package fi.otavanopisto.pyramus.dao.changelog;
import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.Query;
import fi.otavanopisto.pyramus.dao.PyramusEntityDAO;
import fi.otavanopisto.pyramus.domainmodel.changelog.ChangeLogEntry;
import fi.otavanopisto.pyramus.domainmodel.changelog.ChangeLogEntryEntityProperty;
import fi.otavanopisto.pyramus.domainmodel.changelog.ChangeLogEntryProperty;
@Stateless
public class ChangeLogEntryPropertyDAO extends PyramusEntityDAO<ChangeLogEntryProperty> {
public ChangeLogEntryProperty create(ChangeLogEntry entry, ChangeLogEntryEntityProperty property, String value) {
EntityManager entityManager = getEntityManager();
ChangeLogEntryProperty changeLogEntryProperty = new ChangeLogEntryProperty();
changeLogEntryProperty.setEntry(entry);
changeLogEntryProperty.setProperty(property);
changeLogEntryProperty.setValue(value);
entityManager.persist(changeLogEntryProperty);
return changeLogEntryProperty;
}
public ChangeLogEntryProperty findLatestByEntryEntityProperty(ChangeLogEntryEntityProperty entryEntityProperty, String entityId) {
EntityManager entityManager = getEntityManager();
Query query = entityManager.createQuery(
"select " +
" p " +
"from " +
" fi.otavanopisto.pyramus.domainmodel.changelog.ChangeLogEntryProperty p " +
"where " +
" p.property = :property AND " +
" p.entry.entityId = :entityId " +
"order by " +
" p.entry.time desc");
query.setParameter("property", entryEntityProperty);
query.setParameter("entityId", entityId);
query.setMaxResults(1);
@SuppressWarnings("unchecked") List<ChangeLogEntryProperty> result = query.getResultList();
return result.size() == 1 ? result.get(0) : null;
}
}