1 /**
2 * Copyright 2005-2013 The Kuali Foundation
3 *
4 * Licensed under the Educational Community License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.opensource.org/licenses/ecl2.php
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16 package org.kuali.rice.krad.dao.impl;
17
18 import java.util.List;
19
20 import javax.persistence.EntityManager;
21 import javax.persistence.PersistenceContext;
22
23 import org.apache.commons.lang.StringUtils;
24 import org.kuali.rice.core.framework.persistence.jpa.criteria.Criteria;
25 import org.kuali.rice.core.framework.persistence.jpa.criteria.QueryByCriteria;
26 import org.kuali.rice.core.framework.persistence.jpa.criteria.QueryByCriteria.QueryByCriteriaType;
27 import org.kuali.rice.krad.dao.MaintenanceDocumentDao;
28 import org.kuali.rice.krad.maintenance.MaintenanceLock;
29 import org.kuali.rice.krad.util.KRADPropertyConstants;
30
31 /**
32 * This class is the JPA implementation of the MaintenanceDocumentDao interface.
33 */
34 public class MaintenanceDocumentDaoJpa implements MaintenanceDocumentDao {
35
36 // private static org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(MaintenanceDocumentDaoJpa.class);
37
38 @PersistenceContext
39 private EntityManager entityManager;
40
41 /**
42 * @see org.kuali.rice.krad.dao.MaintenanceDocumentDao#getLockingDocumentNumber(java.lang.String, java.lang.String)
43 */
44 public String getLockingDocumentNumber(String lockingRepresentation, String documentNumber) {
45 String lockingDocNumber = "";
46
47 // build the query criteria
48 Criteria criteria = new Criteria(MaintenanceLock.class.getName());
49 criteria.eq("lockingRepresentation", lockingRepresentation);
50
51 // if a docHeaderId is specified, then it will be excluded from the
52 // locking representation test.
53 if (StringUtils.isNotBlank(documentNumber)) {
54 criteria.ne(KRADPropertyConstants.DOCUMENT_NUMBER, documentNumber);
55 }
56
57 // attempt to retrieve a document based off this criteria
58 MaintenanceLock maintenanceLock = (MaintenanceLock) new QueryByCriteria(entityManager, criteria).toQuery().getSingleResult();
59
60 // if a document was found, then there's already one out there pending,
61 // and we consider it 'locked' and we return the docnumber.
62 if (maintenanceLock != null) {
63 lockingDocNumber = maintenanceLock.getDocumentNumber();
64 }
65 return lockingDocNumber;
66 }
67
68 // /**
69 // * Returns all pending maintenance documents locked by the given business object class.
70 // */
71 // public Collection getPendingDocumentsForClass(Class dataObjectClass) {
72 // Criteria criteria = new Criteria(MaintenanceLock.class.getName());
73 // criteria.like("lockingRepresentation", "%" + dataObjectClass.getName() + "%");
74 //
75 // Collection maintenanceLocks = new QueryByCriteria(entityManager, criteria).toQuery().getResultList();
76 // if (!maintenanceLocks.isEmpty()) {
77 // criteria = new Criteria(MaintenanceDocumentBase.class.getName());
78 // List<String> documentNumbers = new ArrayList<String>();
79 //
80 // for (Object maintenanceLock : maintenanceLocks) {
81 // documentNumbers.add(((MaintenanceLock) maintenanceLock).getDocumentNumber());
82 // }
83 // criteria.in("documentNumber", documentNumbers);
84 //
85 // return new QueryByCriteria(entityManager, criteria).toQuery().getResultList();
86 // } else {
87 // return maintenanceLocks;
88 // }
89 // }
90
91 /**
92 * @see org.kuali.rice.krad.dao.MaintenanceDocumentDao#deleteLocks(java.lang.String)
93 */
94 public void deleteLocks(String documentNumber) {
95 Criteria criteria = new Criteria(MaintenanceLock.class.getName());
96 criteria.eq("documentNumber", documentNumber);
97 new QueryByCriteria(entityManager, criteria, QueryByCriteriaType.DELETE).toQuery().executeUpdate();
98 }
99
100 /**
101 * @see org.kuali.rice.krad.dao.MaintenanceDocumentDao#storeLocks(java.util.List)
102 */
103 public void storeLocks(List<MaintenanceLock> maintenanceLocks) {
104 for (MaintenanceLock maintenanceLock : maintenanceLocks) {
105 entityManager.merge(maintenanceLock);
106 }
107 }
108
109 /**
110 * @return the entityManager
111 */
112 public EntityManager getEntityManager() {
113 return this.entityManager;
114 }
115
116 /**
117 * @param entityManager the entityManager to set
118 */
119 public void setEntityManager(EntityManager entityManager) {
120 this.entityManager = entityManager;
121 }
122
123 }