Mercurial > hg > LGDataverses
view src/main/java/edu/harvard/iq/dataverse/DvObjectServiceBean.java @ 14:be7787c36e58 default tip
new: nofity LGSercies for deleted files
| author | Zoe Hong <zhong@mpiwg-berlin.mpg.de> |
|---|---|
| date | Mon, 02 Nov 2015 16:41:23 +0100 |
| parents | a50cf11e5178 |
| children |
line wrap: on
line source
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; } }
