Mercurial > hg > LGDataverses
diff src/main/java/edu/harvard/iq/dataverse/DvObjectServiceBean.java @ 10:a50cf11e5178
Rewrite LGDataverse completely upgrading to dataverse4.0
| author | Zoe Hong <zhong@mpiwg-berlin.mpg.de> |
|---|---|
| date | Tue, 08 Sep 2015 17:00:21 +0200 |
| parents | |
| children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/edu/harvard/iq/dataverse/DvObjectServiceBean.java Tue Sep 08 17:00:21 2015 +0200 @@ -0,0 +1,89 @@ +package edu.harvard.iq.dataverse; + +import java.sql.Timestamp; +import java.util.Date; +import java.util.List; +import javax.ejb.Stateless; +import javax.ejb.TransactionAttribute; +import static javax.ejb.TransactionAttributeType.REQUIRES_NEW; +import javax.inject.Named; +import javax.persistence.EntityManager; +import javax.persistence.NoResultException; +import javax.persistence.NonUniqueResultException; +import javax.persistence.PersistenceContext; +import javax.persistence.Query; + +/** + * Your goto bean for everything {@link DvObject}, that's not tied to any + * concrete subclass. + * + * @author michael + */ +@Stateless +@Named +public class DvObjectServiceBean implements java.io.Serializable { + + @PersistenceContext(unitName = "VDCNet-ejbPU") + private EntityManager em; + + /** + * @param dvoc The object we check + * @return {@code true} iff the passed object is the owner of any + * {@link DvObject}. + */ + public boolean hasData(DvObjectContainer dvoc) { + return em.createNamedQuery("DvObject.ownedObjectsById", Long.class) + .setParameter("id", dvoc.getId()) + .getSingleResult() > 0; + } + + public DvObject findDvObject(Long id) { + try { + return em.createNamedQuery("DvObject.findById", DvObject.class) + .setParameter("id", id) + .getSingleResult(); + } catch (NoResultException | NonUniqueResultException ex) { + return null; + } + } + + public List<DvObject> findAll() { + return em.createNamedQuery("DvObject.findAll", DvObject.class).getResultList(); + } + + public DvObject updateContentIndexTime(DvObject dvObject) { + /** + * @todo to avoid a possible OptimisticLockException, should we merge + * dvObject before we try to setIndexTime? See + * https://github.com/IQSS/dataverse/commit/6ad0ebb272c8cb46368cb76784b55dbf33eea947 + */ + DvObject dvObjectToModify = findDvObject(dvObject.getId()); + dvObjectToModify.setIndexTime(new Timestamp(new Date().getTime())); + DvObject savedDvObject = em.merge(dvObjectToModify); + return savedDvObject; + } + + /** + * @todo DRY! Perhaps we should merge this with the older + * updateContentIndexTime method. + */ + public DvObject updatePermissionIndexTime(DvObject dvObject) { + /** + * @todo to avoid a possible OptimisticLockException, should we merge + * dvObject before we try to set this timestamp? See + * https://github.com/IQSS/dataverse/commit/6ad0ebb272c8cb46368cb76784b55dbf33eea947 + */ + DvObject dvObjectToModify = findDvObject(dvObject.getId()); + dvObjectToModify.setPermissionIndexTime(new Timestamp(new Date().getTime())); + DvObject savedDvObject = em.merge(dvObjectToModify); + return savedDvObject; + } + + @TransactionAttribute(REQUIRES_NEW) + public int clearAllIndexTimes() { + Query clearIndexTimes = em.createQuery("UPDATE DvObject o SET o.indexTime = NULL, o.permissionIndexTime = NULL"); + int numRowsUpdated = clearIndexTimes.executeUpdate(); + return numRowsUpdated; + } + +}
