View Javadoc

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.kew.actiontaken.dao.impl;
17  
18  import org.kuali.rice.core.framework.persistence.jpa.OrmUtils;
19  import org.kuali.rice.core.framework.persistence.jpa.criteria.Criteria;
20  import org.kuali.rice.core.framework.persistence.jpa.criteria.QueryByCriteria;
21  import org.kuali.rice.kew.actionrequest.ActionRequestValue;
22  import org.kuali.rice.kew.actiontaken.ActionTakenValue;
23  import org.kuali.rice.kew.actiontaken.dao.ActionTakenDAO;
24  
25  import javax.persistence.EntityManager;
26  import javax.persistence.PersistenceContext;
27  import java.io.Serializable;
28  import java.sql.Timestamp;
29  import java.util.Collection;
30  import java.util.List;
31  
32  
33  /**
34   * OJB implementation of the {@link ActionTakenDAO}.
35   *
36   * @author Kuali Rice Team (rice.collab@kuali.org)
37   */
38  public class ActionTakenDAOJpaImpl implements ActionTakenDAO {
39  
40  	@PersistenceContext(unitName="kew-unit")
41  	private EntityManager entityManager;
42  
43      private static final org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(ActionTakenDAOJpaImpl.class);
44  
45      public ActionTakenValue load(String id) {
46          LOG.debug("Loading Action Taken for the given id " + id);
47          return entityManager.find(ActionTakenValue.class, id);
48      }
49  
50      public void deleteActionTaken(ActionTakenValue actionTaken) {
51          LOG.debug("deleting ActionTaken " + actionTaken.getActionTakenId());
52          entityManager.remove(entityManager.find(ActionTakenValue.class, actionTaken.getActionTakenId()));
53      }
54  
55      public ActionTakenValue findByActionTakenId(String actionTakenId) {
56          LOG.debug("finding Action Taken by actionTakenId " + actionTakenId);
57          Criteria crit = new Criteria(ActionTakenValue.class.getName());
58          crit.eq("actionTakenId", actionTakenId);
59          crit.eq("currentIndicator", Boolean.TRUE);
60          return (ActionTakenValue) new QueryByCriteria(entityManager, crit).toQuery().getSingleResult();
61      }
62  
63      public Collection<ActionTakenValue> findByDocIdAndAction(String documentId, String action) {
64          LOG.debug("finding Action Taken by documentId " + documentId + " and action " + action);
65          Criteria crit = new Criteria(ActionTakenValue.class.getName());
66          crit.eq("documentId", documentId);
67          crit.eq("actionTaken", action);
68          crit.eq("currentIndicator", Boolean.TRUE);
69          return (Collection<ActionTakenValue>) new QueryByCriteria(entityManager, crit).toQuery().getResultList();
70      }
71  
72      public Collection<ActionTakenValue> findByDocumentId(String documentId) {
73          LOG.debug("finding Action Takens by documentId " + documentId);
74          Criteria crit = new Criteria(ActionTakenValue.class.getName());
75          crit.eq("documentId", documentId);
76          crit.eq("currentIndicator", Boolean.TRUE);
77          crit.orderBy("actionDate", true);
78          return (Collection<ActionTakenValue>) new QueryByCriteria(entityManager, crit).toQuery().getResultList();
79      }
80  
81      public List<ActionTakenValue> findByDocumentIdWorkflowId(String documentId, String workflowId) {
82          LOG.debug("finding Action Takens by documentId " + documentId + " and workflowId" + workflowId);
83          Criteria crit = new Criteria(ActionTakenValue.class.getName());
84          crit.eq("documentId", documentId);
85          crit.eq("principalId", workflowId);
86          crit.eq("currentIndicator", Boolean.TRUE);
87          return (List<ActionTakenValue>) new QueryByCriteria(entityManager, crit).toQuery().getResultList();
88      }
89  
90      public List findByDocumentIdIgnoreCurrentInd(String documentId) {
91          LOG.debug("finding ActionsTaken ignoring currentInd by documentId:" + documentId);
92          Criteria crit = new Criteria(ActionTakenValue.class.getName());
93          crit.eq("documentId", documentId);
94          return (List) new QueryByCriteria(entityManager, crit);
95      }
96  
97      public void saveActionTaken(ActionTakenValue actionTaken) {
98          LOG.debug("saving ActionTaken");
99          checkNull(actionTaken.getDocumentId(), "Document ID");
100         checkNull(actionTaken.getActionTaken(), "action taken code");
101         checkNull(actionTaken.getDocVersion(), "doc version");
102         checkNull(actionTaken.getPrincipalId(), "principal ID");
103 
104         if (actionTaken.getActionDate() == null) {
105             actionTaken.setActionDate(new Timestamp(System.currentTimeMillis()));
106         }
107         if (actionTaken.getCurrentIndicator() == null) {
108             actionTaken.setCurrentIndicator(Boolean.TRUE);
109         }
110         LOG.debug("saving ActionTaken: routeHeader " + actionTaken.getDocumentId() +
111                 ", actionTaken " + actionTaken.getActionTaken() + ", principalId " + actionTaken.getPrincipalId());
112 
113         if(actionTaken.getActionTakenId()==null){
114         	entityManager.persist(actionTaken);
115         }else{
116         	OrmUtils.merge(entityManager, actionTaken);
117         }
118     }
119 
120     //TODO perhaps runtime isn't the best here, maybe a dao runtime exception
121     private void checkNull(Serializable value, String valueName) throws RuntimeException {
122         if (value == null) {
123             throw new RuntimeException("Null value for " + valueName);
124         }
125     }
126 
127     public void deleteByDocumentId(String documentId){
128 	    Criteria crit = new Criteria(ActionRequestValue.class.getName());
129 	    crit.eq("documentId", documentId);
130 	    ActionRequestValue actionRequestValue = (ActionRequestValue) new QueryByCriteria(entityManager, crit).toQuery().getSingleResult();
131 	    entityManager.remove(actionRequestValue);
132     }
133 
134     public boolean hasUserTakenAction(String workflowId, String documentId) {
135     	Criteria crit = new Criteria(ActionTakenValue.class.getName());
136 	    crit.eq("documentId", documentId);
137 	    crit.eq("principalId", workflowId);
138 	    crit.eq("currentIndicator", Boolean.TRUE);
139 	    long count = (Long) new QueryByCriteria(entityManager, crit).toCountQuery().getSingleResult();
140         return count > 0;
141     }
142 
143     public EntityManager getEntityManager() {
144         return this.entityManager;
145     }
146 
147     public void setEntityManager(EntityManager entityManager) {
148         this.entityManager = entityManager;
149     }
150 
151 }