Mercurial > hg > LGDataverses
comparison 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 |
comparison
equal
deleted
inserted
replaced
| 9:5926d6419569 | 10:a50cf11e5178 |
|---|---|
| 1 package edu.harvard.iq.dataverse; | |
| 2 | |
| 3 import java.sql.Timestamp; | |
| 4 import java.util.Date; | |
| 5 import java.util.List; | |
| 6 import javax.ejb.Stateless; | |
| 7 import javax.ejb.TransactionAttribute; | |
| 8 import static javax.ejb.TransactionAttributeType.REQUIRES_NEW; | |
| 9 import javax.inject.Named; | |
| 10 import javax.persistence.EntityManager; | |
| 11 import javax.persistence.NoResultException; | |
| 12 import javax.persistence.NonUniqueResultException; | |
| 13 import javax.persistence.PersistenceContext; | |
| 14 import javax.persistence.Query; | |
| 15 | |
| 16 /** | |
| 17 * Your goto bean for everything {@link DvObject}, that's not tied to any | |
| 18 * concrete subclass. | |
| 19 * | |
| 20 * @author michael | |
| 21 */ | |
| 22 @Stateless | |
| 23 @Named | |
| 24 public class DvObjectServiceBean implements java.io.Serializable { | |
| 25 | |
| 26 @PersistenceContext(unitName = "VDCNet-ejbPU") | |
| 27 private EntityManager em; | |
| 28 | |
| 29 /** | |
| 30 * @param dvoc The object we check | |
| 31 * @return {@code true} iff the passed object is the owner of any | |
| 32 * {@link DvObject}. | |
| 33 */ | |
| 34 public boolean hasData(DvObjectContainer dvoc) { | |
| 35 return em.createNamedQuery("DvObject.ownedObjectsById", Long.class) | |
| 36 .setParameter("id", dvoc.getId()) | |
| 37 .getSingleResult() > 0; | |
| 38 } | |
| 39 | |
| 40 public DvObject findDvObject(Long id) { | |
| 41 try { | |
| 42 return em.createNamedQuery("DvObject.findById", DvObject.class) | |
| 43 .setParameter("id", id) | |
| 44 .getSingleResult(); | |
| 45 } catch (NoResultException | NonUniqueResultException ex) { | |
| 46 return null; | |
| 47 } | |
| 48 } | |
| 49 | |
| 50 public List<DvObject> findAll() { | |
| 51 return em.createNamedQuery("DvObject.findAll", DvObject.class).getResultList(); | |
| 52 } | |
| 53 | |
| 54 public DvObject updateContentIndexTime(DvObject dvObject) { | |
| 55 /** | |
| 56 * @todo to avoid a possible OptimisticLockException, should we merge | |
| 57 * dvObject before we try to setIndexTime? See | |
| 58 * https://github.com/IQSS/dataverse/commit/6ad0ebb272c8cb46368cb76784b55dbf33eea947 | |
| 59 */ | |
| 60 DvObject dvObjectToModify = findDvObject(dvObject.getId()); | |
| 61 dvObjectToModify.setIndexTime(new Timestamp(new Date().getTime())); | |
| 62 DvObject savedDvObject = em.merge(dvObjectToModify); | |
| 63 return savedDvObject; | |
| 64 } | |
| 65 | |
| 66 /** | |
| 67 * @todo DRY! Perhaps we should merge this with the older | |
| 68 * updateContentIndexTime method. | |
| 69 */ | |
| 70 public DvObject updatePermissionIndexTime(DvObject dvObject) { | |
| 71 /** | |
| 72 * @todo to avoid a possible OptimisticLockException, should we merge | |
| 73 * dvObject before we try to set this timestamp? See | |
| 74 * https://github.com/IQSS/dataverse/commit/6ad0ebb272c8cb46368cb76784b55dbf33eea947 | |
| 75 */ | |
| 76 DvObject dvObjectToModify = findDvObject(dvObject.getId()); | |
| 77 dvObjectToModify.setPermissionIndexTime(new Timestamp(new Date().getTime())); | |
| 78 DvObject savedDvObject = em.merge(dvObjectToModify); | |
| 79 return savedDvObject; | |
| 80 } | |
| 81 | |
| 82 @TransactionAttribute(REQUIRES_NEW) | |
| 83 public int clearAllIndexTimes() { | |
| 84 Query clearIndexTimes = em.createQuery("UPDATE DvObject o SET o.indexTime = NULL, o.permissionIndexTime = NULL"); | |
| 85 int numRowsUpdated = clearIndexTimes.executeUpdate(); | |
| 86 return numRowsUpdated; | |
| 87 } | |
| 88 | |
| 89 } |
