View Javadoc

1   /*
2    * Copyright 2005-2008 The Kuali Foundation
3    *
4    *
5    * Licensed under the Educational Community License, Version 2.0 (the "License");
6    * you may not use this file except in compliance with the License.
7    * You may obtain a copy of the License at
8    *
9    * http://www.opensource.org/licenses/ecl2.php
10   *
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS,
13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   * See the License for the specific language governing permissions and
15   * limitations under the License.
16   */
17  package org.kuali.rice.kew.actiontaken.dao.impl;
18  
19  import org.kuali.rice.core.jpa.criteria.Criteria;
20  import org.kuali.rice.core.jpa.criteria.QueryByCriteria;
21  import org.kuali.rice.core.util.OrmUtils;
22  import org.kuali.rice.kew.actionrequest.ActionRequestValue;
23  import org.kuali.rice.kew.actiontaken.ActionTakenValue;
24  import org.kuali.rice.kew.actiontaken.dao.ActionTakenDAO;
25  
26  import javax.persistence.EntityManager;
27  import javax.persistence.PersistenceContext;
28  import java.io.Serializable;
29  import java.sql.Timestamp;
30  import java.util.Collection;
31  import java.util.List;
32  
33  
34  /**
35   * OJB implementation of the {@link ActionTakenDAO}.
36   *
37   * @author Kuali Rice Team (rice.collab@kuali.org)
38   */
39  public class ActionTakenDAOJpaImpl implements ActionTakenDAO {
40  
41  	@PersistenceContext(unitName="kew-unit")
42  	private EntityManager entityManager;
43  
44      private static final org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(ActionTakenDAOJpaImpl.class);
45  
46      public ActionTakenValue load(Long id) {
47          LOG.debug("Loading Action Taken for the given id " + id);
48          return entityManager.find(ActionTakenValue.class, id);
49      }
50  
51      public void deleteActionTaken(ActionTakenValue actionTaken) {
52          LOG.debug("deleting ActionTaken " + actionTaken.getActionTakenId());
53          entityManager.remove(entityManager.find(ActionTakenValue.class, actionTaken.getActionTakenId()));
54      }
55  
56      public ActionTakenValue findByActionTakenId(Long actionTakenId) {
57          LOG.debug("finding Action Taken by actionTakenId " + actionTakenId);
58          Criteria crit = new Criteria(ActionTakenValue.class.getName());
59          crit.eq("actionTakenId", actionTakenId);
60          crit.eq("currentIndicator", Boolean.TRUE);
61          return (ActionTakenValue) new QueryByCriteria(entityManager, crit).toQuery().getSingleResult();
62      }
63  
64      public Collection<ActionTakenValue> findByDocIdAndAction(Long routeHeaderId, String action) {
65          LOG.debug("finding Action Taken by routeHeaderId " + routeHeaderId + " and action " + action);
66          Criteria crit = new Criteria(ActionTakenValue.class.getName());
67          crit.eq("routeHeaderId", routeHeaderId);
68          crit.eq("actionTaken", action);
69          crit.eq("currentIndicator", Boolean.TRUE);
70          return (Collection<ActionTakenValue>) new QueryByCriteria(entityManager, crit).toQuery().getResultList();
71      }
72  
73      public Collection<ActionTakenValue> findByRouteHeaderId(Long routeHeaderId) {
74          LOG.debug("finding Action Takens by routeHeaderId " + routeHeaderId);
75          Criteria crit = new Criteria(ActionTakenValue.class.getName());
76          crit.eq("routeHeaderId", routeHeaderId);
77          crit.eq("currentIndicator", Boolean.TRUE);
78          return (Collection<ActionTakenValue>) new QueryByCriteria(entityManager, crit).toQuery().getResultList();
79      }
80  
81      public List<ActionTakenValue> findByRouteHeaderIdWorkflowId(Long routeHeaderId, String workflowId) {
82          LOG.debug("finding Action Takens by routeHeaderId " + routeHeaderId + " and workflowId" + workflowId);
83          Criteria crit = new Criteria(ActionTakenValue.class.getName());
84          crit.eq("routeHeaderId", routeHeaderId);
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 findByRouteHeaderIdIgnoreCurrentInd(Long routeHeaderId) {
91          LOG.debug("finding ActionsTaken ignoring currentInd by routeHeaderId:" + routeHeaderId);
92          Criteria crit = new Criteria(ActionTakenValue.class.getName());
93          crit.eq("routeHeaderId", routeHeaderId);
94          return (List) new QueryByCriteria(entityManager, crit);
95      }
96  
97      public void saveActionTaken(ActionTakenValue actionTaken) {
98          LOG.debug("saving ActionTaken");
99          checkNull(actionTaken.getRouteHeaderId(), "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.getRouteHeaderId() +
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 deleteByRouteHeaderId(Long routeHeaderId){
128 	    Criteria crit = new Criteria(ActionRequestValue.class.getName());
129 	    crit.eq("routeHeaderId", routeHeaderId);
130 	    ActionRequestValue actionRequestValue = (ActionRequestValue) new QueryByCriteria(entityManager, crit).toQuery().getSingleResult();
131 	    entityManager.remove(actionRequestValue);
132     }
133 
134     public boolean hasUserTakenAction(String workflowId, Long routeHeaderId) {
135     	Criteria crit = new Criteria(ActionTakenValue.class.getName());
136 	    crit.eq("routeHeaderId", routeHeaderId);
137 	    crit.eq("principalId", workflowId);
138 	    crit.eq("currentIndicator", Boolean.TRUE);
139 	    int count = (Integer) 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 }