001    /**
002     * Copyright 2005-2014 The Kuali Foundation
003     *
004     * Licensed under the Educational Community License, Version 2.0 (the "License");
005     * you may not use this file except in compliance with the License.
006     * You may obtain a copy of the License at
007     *
008     * http://www.opensource.org/licenses/ecl2.php
009     *
010     * Unless required by applicable law or agreed to in writing, software
011     * distributed under the License is distributed on an "AS IS" BASIS,
012     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013     * See the License for the specific language governing permissions and
014     * limitations under the License.
015     */
016    package org.kuali.rice.krad.dao.impl;
017    
018    import java.util.List;
019    
020    import javax.persistence.EntityManager;
021    import javax.persistence.PersistenceContext;
022    
023    import org.apache.commons.lang.StringUtils;
024    import org.kuali.rice.core.framework.persistence.jpa.criteria.Criteria;
025    import org.kuali.rice.core.framework.persistence.jpa.criteria.QueryByCriteria;
026    import org.kuali.rice.core.framework.persistence.jpa.criteria.QueryByCriteria.QueryByCriteriaType;
027    import org.kuali.rice.krad.dao.MaintenanceDocumentDao;
028    import org.kuali.rice.krad.maintenance.MaintenanceLock;
029    import org.kuali.rice.krad.util.KRADPropertyConstants;
030    
031    /**
032     * This class is the JPA implementation of the MaintenanceDocumentDao interface.
033     */
034    public class MaintenanceDocumentDaoJpa implements MaintenanceDocumentDao {
035    
036    //      private static org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(MaintenanceDocumentDaoJpa.class);
037    
038            @PersistenceContext
039            private EntityManager entityManager;
040            
041            /**
042             * @see org.kuali.rice.krad.dao.MaintenanceDocumentDao#getLockingDocumentNumber(java.lang.String, java.lang.String)
043             */
044            public String getLockingDocumentNumber(String lockingRepresentation, String documentNumber) {
045                    String lockingDocNumber = "";
046    
047                    // build the query criteria
048                    Criteria criteria = new Criteria(MaintenanceLock.class.getName());
049                    criteria.eq("lockingRepresentation", lockingRepresentation);
050    
051                    // if a docHeaderId is specified, then it will be excluded from the
052                    // locking representation test.
053                    if (StringUtils.isNotBlank(documentNumber)) {
054                            criteria.ne(KRADPropertyConstants.DOCUMENT_NUMBER, documentNumber);
055                    }
056    
057                    // attempt to retrieve a document based off this criteria
058                    MaintenanceLock maintenanceLock = (MaintenanceLock) new QueryByCriteria(entityManager, criteria).toQuery().getSingleResult();
059    
060                    // if a document was found, then there's already one out there pending,
061                    // and we consider it 'locked' and we return the docnumber.
062                    if (maintenanceLock != null) {
063                            lockingDocNumber = maintenanceLock.getDocumentNumber();
064                    }
065                    return lockingDocNumber;
066            }
067    
068    //      /**
069    //       * Returns all pending maintenance documents locked by the given business object class.
070    //       */
071    //      public Collection getPendingDocumentsForClass(Class dataObjectClass) {
072    //              Criteria criteria = new Criteria(MaintenanceLock.class.getName());
073    //              criteria.like("lockingRepresentation", "%" + dataObjectClass.getName() + "%");
074    //
075    //              Collection maintenanceLocks = new QueryByCriteria(entityManager, criteria).toQuery().getResultList();
076    //              if (!maintenanceLocks.isEmpty()) {
077    //                      criteria = new Criteria(MaintenanceDocumentBase.class.getName());
078    //                      List<String> documentNumbers = new ArrayList<String>();
079    //
080    //                      for (Object maintenanceLock : maintenanceLocks) {
081    //                              documentNumbers.add(((MaintenanceLock) maintenanceLock).getDocumentNumber());
082    //                      }
083    //                      criteria.in("documentNumber", documentNumbers);
084    //
085    //                      return new QueryByCriteria(entityManager, criteria).toQuery().getResultList();
086    //              } else {
087    //                      return maintenanceLocks;
088    //              }
089    //      }
090    
091            /**
092             * @see org.kuali.rice.krad.dao.MaintenanceDocumentDao#deleteLocks(java.lang.String)
093             */
094            public void deleteLocks(String documentNumber) {
095                    Criteria criteria = new Criteria(MaintenanceLock.class.getName());
096                    criteria.eq("documentNumber", documentNumber);
097                    new QueryByCriteria(entityManager, criteria, QueryByCriteriaType.DELETE).toQuery().executeUpdate();
098            }
099    
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    }