Package org.meb.spdwldr

Source Code of org.meb.spdwldr.EventSourceDao

package org.meb.spdwldr;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.Map.Entry;

import javax.persistence.EntityManager;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Order;
import javax.persistence.criteria.Path;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import javax.persistence.metamodel.ManagedType;

import org.apache.commons.lang.time.DateUtils;
import org.meb.spdwldr.core.SortOrder.Direction;

public class EventSourceDao {

  private EntityManager createEntityManager() {
    return EMF.get().createEntityManager();
  }

  public List<EventSource> find(EventSourceQuery query) {
    EntityManager em = createEntityManager();
    CriteriaBuilder cb = em.getCriteriaBuilder();
    CriteriaQuery<EventSource> cq = cb.createQuery(EventSource.class);
    Root<EventSource> evsr = cq.from(EventSource.class);
    List<Predicate> predicates = new ArrayList<Predicate>();
    if (query.getUpdateDateFrom() != null) {
      predicates.add(cb.greaterThanOrEqualTo(evsr.get(EventSource_.updateDate),
          query.getUpdateDateFrom()));
    }
    if (query.getUpdateDateTo() != null) {
      predicates.add(cb.lessThanOrEqualTo(evsr.get(EventSource_.updateDate),
          query.getUpdateDateTo()));
    }
    if (predicates.size() > 0) {
      cq.where(predicates.toArray(new Predicate[predicates.size()]));
    }

    if (!query.getSortOrder().isEmpty()) {
      ManagedType<EventSource> mt = em.getMetamodel().managedType(EventSource.class);
      Iterator<Entry<String, Direction>> iter = query.getSortOrder().iterator();
      ArrayList<Order> order = new ArrayList<Order>();
      while (iter.hasNext()) {
        Entry<String, Direction> entry = iter.next();
        Path<?> path = evsr.get(mt.getSingularAttribute(entry.getKey()));
        if (entry.getValue() == Direction.ASC) {
          order.add(cb.asc(path));
        } else if (entry.getValue() == Direction.DESC) {
          order.add(cb.desc(path));
        }
      }
      cq.orderBy(order);
    }

    List<EventSource> eventSources = em.createQuery(cq).getResultList();
    for (EventSource source : eventSources) {
      em.detach(source);
    }
    return eventSources;
  }

  public EventSource find(String uri) {
    EntityManager em = createEntityManager();
    CriteriaBuilder cb = em.getCriteriaBuilder();
    CriteriaQuery<EventSource> cq = cb.createQuery(EventSource.class);
    cq.where(cb.equal(cq.from(EventSource.class).get(EventSource_.eventUri), uri));
    List<EventSource> list = em.createQuery(cq).getResultList();
    if (list != null) {
      if (list.size() == 0) {
        return null;
      } else if (list.size() == 1) {
        EventSource source = list.get(0);
        em.detach(source);
        return source;
      } else {
        throw new RuntimeException("One result was expected, got " + list.size());
      }
    }
    return null;
  }

  public void persist(EventSource source) {
    corrrectDateAndTime(source);
    createEntityManager().persist(source);
  }

  public void merge(EventSource source) {
    corrrectDateAndTime(source);
    createEntityManager().merge(source);
  }

  public void delete(Long id) {
    createEntityManager().remove(id);
  }

  private void corrrectDateAndTime(EventSource source) {
    Date operDate = DateUtils.truncate(new Date(), Calendar.SECOND);
    if (source.getInsertDate() == null) {
      source.setInsertDate(operDate);
    }
    source.setUpdateDate(operDate);

    Date eventDate = source.getEventDate();
    if (eventDate != null) {
      source.setEventDate(DateUtils.truncate(eventDate, Calendar.DAY_OF_MONTH));
      if (source.getEventTime() == null) {
        source.setEventTime(eventDate);
      }
    }
  }

}
TOP

Related Classes of org.meb.spdwldr.EventSourceDao

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.