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 }