Package au.edu.uts.aip.mandreacchio.ejb

Source Code of au.edu.uts.aip.mandreacchio.ejb.OrderDAOJpaImpl

package au.edu.uts.aip.mandreacchio.ejb;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

import au.edu.uts.aip.mandreacchio.jpa.Order;
import au.edu.uts.aip.mandreacchio.jpa.Status;

public class OrderDAOJpaImpl implements OrderDAO {

  @PersistenceContext
  private EntityManager em;

  // this is the default constructor
  public OrderDAOJpaImpl() {
    this("store");
  }

  public OrderDAOJpaImpl(String unitName) {
    EntityManagerFactory emf = Persistence
        .createEntityManagerFactory(unitName);
    em = emf.createEntityManager();
  }

  // this is the special constructor to set the entity manager.
  // this is used when we run with EJB3
  public OrderDAOJpaImpl(EntityManager em) {
    this.em = em;
  }

  public void setEntityManager(EntityManager em) {
    this.em = em;
  }

  // Start Methods
  @Override
  public Order createOrder(Order o) {

    em.getTransaction().begin();
    em.persist(o);
    // o.setCustomerRefNumber("11158704-" + o.getId());
    em.flush();
    // testing Commit
    // em.getTransaction().commit();

    return o;

  }

  @Override
  public Order getOrderById(int id) {
    Order result = (Order) em.getReference(Order.class, id);
    return result;
  }

  @Override
  public Order getOrderByLastNameAndCRN(String crn, String lastName) {
    Order result;
    Integer orderId = Order.crnToOrderId(crn);

    if (orderId == null) {
      return result = null;
    }

    // If problems come up again, this could help: select p FROM Person p
    // left join fetch p.address
    try {

      result = (Order) em
          .createQuery(
              "SELECT o FROM Order o INNER JOIN o.customer c WHERE c.lastName = ?1 AND o.id = ?2")
          .setParameter(1, lastName).setParameter(2, orderId)
          .getSingleResult();

    } catch (Exception e) {
      result = null;
    }

    // LazyLoading error workaround
    // result.getCustomer();
    if (result != null){
    result.getOrderLines().size();
    }
    // result.getStatus().getStatus();

    return result;
  }

  @Override
  public List<Order> getAllOrders() {
    @SuppressWarnings("unchecked")
    List<Order> results = em.createQuery("select O from Order O")
        .getResultList();
    return results;
  }

  // TODO This should probably be "get order by status"
  @Override
  public List<Order> getAllOrderedPaidOrders() {

    StatusDAO sdao = new StatusDAOJpaImpl();
    Status s = sdao.getStatusById(3);
    @SuppressWarnings("unchecked")
    List<Order> results = em
        .createQuery(
            "SELECT o FROM Order o INNER JOIN o.status s WHERE s.status != ?1")
        .setParameter(1, s.getStatus()).getResultList();

    // LazyLoading error workaround
    for (Order o : results) {
      o.getCustomer();
      o.getOrderLines().size();
      o.getStatus();
    }
    return results;
  }

  @Override
  public Order getOrderByCRN(String crn) {
    Order result;

    // Convert CRN to OrderID
    Integer orderId = Order.crnToOrderId(crn);
    if (orderId == null) {
      return result = null;
    }

    try {
      result = (Order) em
          .createQuery("SELECT o FROM Order o WHERE o.id = ?1")
          .setParameter(1, orderId).getSingleResult();

    } catch (Exception e) {
      result = null;
    }

    return result;
  }

  @Override
  public List<Order> getAllPaidOrders() {

    StatusDAO sdao = new StatusDAOJpaImpl();
    Status s = sdao.getStatusById(2);
    @SuppressWarnings("unchecked")
    List<Order> results = em
        .createQuery(
            "SELECT o FROM Order o INNER JOIN o.status s WHERE s.status = ?1")
        .setParameter(1, s.getStatus()).getResultList();
    return results;
  }

 
  @Override
  public void updateStatusByCRN(int statusId, String crn) {

    StatusDAO sdao = new StatusDAOJpaImpl();
    Status status = sdao.getStatusById(statusId);

    int orderId = Order.crnToOrderId(crn);
    try {
      em.getTransaction().begin();
      em.createQuery(
          "UPDATE Order o SET o.status = :status WHERE o.id = :orderId")
          .setParameter("status", status)
          .setParameter("orderId", orderId).executeUpdate();
      em.getTransaction().commit();
      em.clear();
    } catch (Exception e) {
      e.printStackTrace();
    }

    return;

  }

}
TOP

Related Classes of au.edu.uts.aip.mandreacchio.ejb.OrderDAOJpaImpl

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.