1 /** 2 * Copyright 2005-2012 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 }