001/** 002 * Copyright 2005-2016 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 */ 016package org.kuali.rice.kew.rule.dao.impl; 017 018import org.apache.commons.lang.StringUtils; 019import org.kuali.rice.core.api.exception.RiceRuntimeException; 020import org.kuali.rice.core.framework.persistence.jpa.OrmUtils; 021import org.kuali.rice.core.framework.persistence.jpa.criteria.Criteria; 022import org.kuali.rice.core.framework.persistence.jpa.criteria.QueryByCriteria; 023import org.kuali.rice.kew.rule.RuleBaseValues; 024import org.kuali.rice.kew.rule.RuleExtensionBo; 025import org.kuali.rice.kew.rule.RuleResponsibilityBo; 026import org.kuali.rice.kew.rule.dao.RuleDAO; 027import org.kuali.rice.kew.api.KewApiConstants; 028import org.kuali.rice.kim.api.identity.principal.Principal; 029import org.kuali.rice.kim.api.services.KimApiServiceLocator; 030 031import javax.persistence.EntityManager; 032import javax.persistence.PersistenceContext; 033import javax.persistence.Query; 034import java.sql.Timestamp; 035import java.util.ArrayList; 036import java.util.Collection; 037import java.util.Date; 038import java.util.HashSet; 039import java.util.Iterator; 040import java.util.List; 041import java.util.Map; 042 043 044public class RuleDAOJpaImpl implements RuleDAO { 045 046 private static final org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(RuleDAOJpaImpl.class); 047 048 @PersistenceContext(unitName="kew-unit") 049 private EntityManager entityManager; 050 051 private static final String OLD_DELEGATIONS_SQL = 052 "select oldDel.dlgn_rule_id "+ 053 "from krew_rule_rsp_t oldRsp, krew_dlgn_rsp_t oldDel "+ 054 "where oldRsp.rule_id=? and "+ 055 "oldRsp.rule_rsp_id=oldDel.rule_rsp_id and "+ 056 "oldDel.dlgn_rule_base_val_id not in "+ 057 "(select newDel.dlgn_rule_base_val_id from krew_rule_rsp_t newRsp, krew_dlgn_rsp_t newDel "+ 058 "where newRsp.rule_id=? and "+ 059 "newRsp.rule_rsp_id=newDel.rule_rsp_id)"; 060 061 public void save(RuleBaseValues ruleBaseValues) { 062 if(ruleBaseValues.getId()==null){ 063 entityManager.persist(ruleBaseValues); 064 }else{ 065 OrmUtils.merge(entityManager, ruleBaseValues); 066 } 067 } 068 069 public List<RuleBaseValues> fetchAllCurrentRulesForTemplateDocCombination(String ruleTemplateId, List documentTypes) { 070 Criteria crit = new Criteria(RuleBaseValues.class.getName()); 071 crit.in("docTypeName", documentTypes); 072 crit.eq("ruleTemplateId", ruleTemplateId); 073 crit.eq("currentInd", Boolean.TRUE); 074 crit.eq("active", Boolean.TRUE); 075 crit.eq("delegateRule", Boolean.FALSE); 076 crit.eq("templateRuleInd", Boolean.FALSE); 077 078 crit.and(generateFromToDateCriteria(new Date())); 079 return (List) new QueryByCriteria(entityManager, crit).toQuery().getResultList(); 080 } 081 082 public List<RuleBaseValues> fetchAllCurrentRulesForTemplateDocCombination(String ruleTemplateId, List documentTypes, Timestamp effectiveDate) { 083 Criteria crit = new Criteria(RuleBaseValues.class.getName()); 084 crit.in("docTypeName", documentTypes); 085 crit.eq("ruleTemplateId", ruleTemplateId); 086 crit.eq("active", Boolean.TRUE); 087 crit.eq("delegateRule", Boolean.FALSE); 088 crit.eq("templateRuleInd", Boolean.FALSE); 089 if (effectiveDate != null) { 090 crit.lte("activationDate", effectiveDate); 091 crit.gte("deactivationDate", effectiveDate); 092 } 093 094 crit.and(generateFromToDateCriteria(new Date())); 095 return (List) new QueryByCriteria(entityManager, crit).toQuery().getResultList(); 096 } 097 098 public Criteria generateFromToDateCriteria(Date date) { 099 Criteria crit = new Criteria(RuleBaseValues.class.getName()); 100 101 Criteria fromCrit = new Criteria(RuleBaseValues.class.getName()); 102 Criteria fromNullCrit = new Criteria(RuleBaseValues.class.getName()); 103 fromNullCrit.isNull("fromDateValue"); 104 Criteria fromLessOrEqualCrit = new Criteria(RuleBaseValues.class.getName()); 105 fromLessOrEqualCrit.lte("fromDateValue", new Timestamp(date.getTime())); 106 fromCrit.or(fromNullCrit); 107 fromCrit.or(fromLessOrEqualCrit); 108 109 Criteria toCrit = new Criteria(RuleBaseValues.class.getName()); 110 Criteria toNullCrit = new Criteria(RuleBaseValues.class.getName()); 111 toNullCrit.isNull("toDateValue"); 112 Criteria toGreaterOrEqualCrit = new Criteria(RuleBaseValues.class.getName()); 113 toGreaterOrEqualCrit.gte("toDateValue", new Timestamp(date.getTime())); 114 toCrit.or(toNullCrit); 115 toCrit.or(toGreaterOrEqualCrit); 116 117 crit.and(fromCrit); 118 crit.and(toCrit); 119 120 return crit; 121 } 122 123 public List<RuleBaseValues> fetchAllRules(boolean currentRules) { 124 Criteria crit = new Criteria(RuleBaseValues.class.getName()); 125 crit.eq("currentInd", new Boolean(currentRules)); 126 crit.eq("templateRuleInd", Boolean.FALSE); 127 crit.orderBy("activationDate", false); 128 129 QueryByCriteria query = new QueryByCriteria(entityManager, crit); 130 131 return (List) query.toQuery().getResultList(); 132 } 133 134 public void delete(String ruleBaseValuesId) { 135 entityManager.remove(entityManager.find(RuleBaseValues.class, ruleBaseValuesId)); 136 } 137 138 public List<RuleBaseValues> findByDocumentId(String documentId) { 139 Criteria crit = new Criteria(RuleBaseValues.class.getName()); 140 crit.eq("documentId", documentId); 141 return (List) new QueryByCriteria(entityManager, crit).toQuery().getResultList(); 142 } 143 144 public RuleBaseValues findRuleBaseValuesByName(String name) { 145 Criteria crit = new Criteria(RuleBaseValues.class.getName()); 146 if (name == null) { 147 return null; 148 } 149 crit.eq("name", name); 150 crit.eq("currentInd", Boolean.TRUE); 151 return (RuleBaseValues) new QueryByCriteria(entityManager, crit).toQuery().getSingleResult(); 152 } 153 154 public RuleBaseValues findRuleBaseValuesById(String ruleBaseValuesId) { 155 if (ruleBaseValuesId == null) { 156 return null; 157 } 158 Criteria crit = new Criteria(RuleBaseValues.class.getName()); 159 crit.eq("id", ruleBaseValuesId); 160 return (RuleBaseValues) new QueryByCriteria(entityManager, crit).toQuery().getSingleResult(); 161 } 162 163 public List<RuleBaseValues> findRuleBaseValuesByResponsibilityReviewer(String reviewerName, String type) { 164 Criteria crit = new Criteria(RuleResponsibilityBo.class.getName()); 165 crit.eq("ruleResponsibilityName", reviewerName); 166 crit.eq("ruleResponsibilityType", type); 167 168 List responsibilities = (List) new QueryByCriteria(entityManager, crit).toQuery().getResultList(); 169 List rules = new ArrayList(); 170 171 for (Iterator iter = responsibilities.iterator(); iter.hasNext();) { 172 RuleResponsibilityBo responsibility = (RuleResponsibilityBo) iter.next(); 173 RuleBaseValues rule = responsibility.getRuleBaseValues(); 174 if (rule != null && rule.getCurrentInd() != null && rule.getCurrentInd().booleanValue()) { 175 rules.add(rule); 176 } 177 } 178 return rules; 179 } 180 181 public List<RuleBaseValues> findRuleBaseValuesByResponsibilityReviewerTemplateDoc(String ruleTemplateName, String documentType, String reviewerName, String type) { 182 Criteria crit = new Criteria(RuleResponsibilityBo.class.getName()); 183 crit.eq("ruleResponsibilityName", reviewerName); 184 crit.eq("ruleResponsibilityType", type); 185 crit.eq("ruleBaseValues.currentInd", Boolean.TRUE); 186 if (!StringUtils.isBlank(ruleTemplateName)) { 187 crit.like("ruleBaseValues.ruleTemplate.name", ruleTemplateName.replace("*", "%").concat("%")); 188 } 189 if (!StringUtils.isBlank(documentType)) { 190 crit.like("ruleBaseValues.docTypeName", documentType.replace("*", "%").concat("%")); 191 } 192 193 List responsibilities = (List) new QueryByCriteria(entityManager, crit).toQuery().getResultList(); 194 List rules = new ArrayList(); 195 196 for (Iterator iter = responsibilities.iterator(); iter.hasNext();) { 197 RuleResponsibilityBo responsibility = (RuleResponsibilityBo) iter.next(); 198 RuleBaseValues rule = responsibility.getRuleBaseValues(); 199 if (rule != null && rule.getCurrentInd() != null && rule.getCurrentInd().booleanValue()) { 200 rules.add(rule); 201 } 202 } 203 return rules; 204 } 205 206 //FIXME nothing uses this, it's not in ruleDAO interface 207// public List findRuleBaseValuesByObjectGraph(RuleBaseValues ruleBaseValues) { 208// ruleBaseValues.setCurrentInd(Boolean.TRUE); 209// ruleBaseValues.setTemplateRuleInd(Boolean.FALSE); 210// return (List) new QueryByObject(entityManager,ruleBaseValues).toQuery().getResultList(); 211// } 212 213 public RuleResponsibilityBo findRuleResponsibility(String responsibilityId) { 214 Criteria crit = new Criteria(RuleResponsibilityBo.class.getName()); 215 crit.eq("responsibilityId", responsibilityId); 216 Collection responsibilities = new QueryByCriteria(entityManager, crit).toQuery().getResultList(); 217 for (Iterator iterator = responsibilities.iterator(); iterator.hasNext();) { 218 RuleResponsibilityBo responsibility = (RuleResponsibilityBo) iterator.next(); 219 if (responsibility.getRuleBaseValues().getCurrentInd().booleanValue()) { 220 return responsibility; 221 } 222 } 223 return null; 224 } 225 226 public List<RuleBaseValues> search(String docTypeName, String ruleId, String ruleTemplateId, String ruleDescription, String groupId, String principalId, Boolean delegateRule, Boolean activeInd, Map extensionValues, String workflowIdDirective) { 227 Criteria crit = getSearchCriteria(docTypeName, ruleTemplateId, ruleDescription, delegateRule, activeInd, extensionValues); 228 if (ruleId != null) { 229 crit.eq("id", ruleId); 230 } 231 if (groupId != null) { 232 //crit.in("responsibilities.ruleBaseValuesId", getResponsibilitySubQuery(groupId), "ruleBaseValuesId"); 233 addResponsibilityCriteria(crit, groupId); 234 } 235 Collection<String> kimGroupIds = new HashSet<String>(); 236 Boolean searchUser = Boolean.FALSE; 237 Boolean searchUserInWorkgroups = Boolean.FALSE; 238 239 if ("group".equals(workflowIdDirective)) { 240 searchUserInWorkgroups = Boolean.TRUE; 241 } else if (StringUtils.isBlank(workflowIdDirective)) { 242 searchUser = Boolean.TRUE; 243 searchUserInWorkgroups = Boolean.TRUE; 244 } else { 245 searchUser = Boolean.TRUE; 246 } 247 248 if (!org.apache.commons.lang.StringUtils.isEmpty(principalId) && searchUserInWorkgroups) { 249 Principal principal = null; 250 251 principal = KimApiServiceLocator.getIdentityService().getPrincipal(principalId); 252 253 if (principal == null) 254 { 255 throw new RiceRuntimeException("Failed to locate user for the given principal id: " + principalId); 256 } 257 kimGroupIds = KimApiServiceLocator.getGroupService().getGroupIdsByPrincipalId(principalId); 258 } 259 addResponsibilityCriteria(crit, kimGroupIds, principalId, searchUser, searchUserInWorkgroups); 260 //if (responsibilityCrit != null) { 261 //crit.in("responsibilities.ruleBaseValuesId", responsibilityCrit,"ruleBaseValuesId"); 262 //} 263 crit.distinct(true); 264 return (List) new QueryByCriteria(entityManager, crit).toQuery().getResultList(); 265 } 266 267 public List<RuleBaseValues> search(String docTypeName, String ruleTemplateId, String ruleDescription, Collection<String> workgroupIds, String workflowId, Boolean delegateRule, Boolean activeInd, Map extensionValues, Collection actionRequestCodes) { 268 Criteria crit = getSearchCriteria(docTypeName, ruleTemplateId, ruleDescription, delegateRule, activeInd, extensionValues); 269 addResponsibilityCriteria(crit, workgroupIds, workflowId, actionRequestCodes, (workflowId != null), ((workgroupIds != null) && !workgroupIds.isEmpty())); 270 //if (responsibilityCrit != null) { 271 //crit.in("responsibilities.ruleBaseValuesId", responsibilityCrit, "ruleBaseValuesId"); 272 //} 273 return (List) new QueryByCriteria(entityManager, crit).toQuery().getResultList(); 274 } 275 276 private void addResponsibilityCriteria(Criteria parentCrit, Collection<String> kimGroupIds, String principalId, Boolean searchUser, Boolean searchUserInWorkgroups) { 277 Collection<String> workgroupIdStrings = new ArrayList<String>(); 278 for (String workgroupId : kimGroupIds) { 279 workgroupIdStrings.add(workgroupId.toString()); 280 } 281 addResponsibilityCriteria(parentCrit, workgroupIdStrings,principalId,new ArrayList<String>(), searchUser, searchUserInWorkgroups); 282 } 283 284 private void addResponsibilityCriteria(Criteria parentCrit, Collection<String> workgroupIds, String workflowId, Collection actionRequestCodes, Boolean searchUser, Boolean searchUserInWorkgroups) { 285 Criteria responsibilityCrit = null; 286 287 Criteria ruleResponsibilityNameCrit = null; 288 289 if ( (actionRequestCodes != null) && (!actionRequestCodes.isEmpty()) ) { 290 responsibilityCrit = new Criteria(RuleBaseValues.class.getName(), false); 291 responsibilityCrit.in("__JPA_ALIAS[['rr']]__.actionRequestedCd", new ArrayList(actionRequestCodes)); 292 } 293 294 if (!org.apache.commons.lang.StringUtils.isEmpty(workflowId)) { 295 // workflow user id exists 296 if (searchUser != null && searchUser) { 297 // searching user wishes to search for rules specific to user 298 ruleResponsibilityNameCrit = new Criteria(RuleBaseValues.class.getName(), false); 299 ruleResponsibilityNameCrit.like("__JPA_ALIAS[['rr']]__.ruleResponsibilityName", workflowId); 300 ruleResponsibilityNameCrit.eq("__JPA_ALIAS[['rr']]__.ruleResponsibilityType", KewApiConstants.RULE_RESPONSIBILITY_WORKFLOW_ID); 301 } 302 if ( (searchUserInWorkgroups != null && searchUserInWorkgroups) && (workgroupIds != null) && (!workgroupIds.isEmpty()) ) { 303 // at least one workgroup id exists and user wishes to search on workgroups 304 if (ruleResponsibilityNameCrit == null) { 305 ruleResponsibilityNameCrit = new Criteria(RuleBaseValues.class.getName(), false); 306 } 307 Criteria workgroupCrit = new Criteria(RuleBaseValues.class.getName(), false); 308 workgroupCrit.in("__JPA_ALIAS[['rr']]__.ruleResponsibilityName", new ArrayList<String>(workgroupIds)); 309 workgroupCrit.eq("__JPA_ALIAS[['rr']]__.ruleResponsibilityType", KewApiConstants.RULE_RESPONSIBILITY_GROUP_ID); 310 ruleResponsibilityNameCrit.or(workgroupCrit); 311 } 312 } else if ( (workgroupIds != null) && (workgroupIds.size() == 1) ) { 313 // no user and one workgroup id 314 ruleResponsibilityNameCrit = new Criteria(RuleBaseValues.class.getName(), false); 315 ruleResponsibilityNameCrit.like("__JPA_ALIAS[['rr']]__.ruleResponsibilityName", workgroupIds.iterator().next()); 316 ruleResponsibilityNameCrit.eq("__JPA_ALIAS[['rr']]__.ruleResponsibilityType", KewApiConstants.RULE_RESPONSIBILITY_GROUP_ID); 317 } else if ( (workgroupIds != null) && (workgroupIds.size() > 1) ) { 318 // no user and more than one workgroup id 319 ruleResponsibilityNameCrit = new Criteria(RuleBaseValues.class.getName(), false); 320 ruleResponsibilityNameCrit.in("__JPA_ALIAS[['rr']]__.ruleResponsibilityName", new ArrayList<String>(workgroupIds)); 321 ruleResponsibilityNameCrit.eq("__JPA_ALIAS[['rr']]__.ruleResponsibilityType", KewApiConstants.RULE_RESPONSIBILITY_GROUP_ID); 322 } 323 324 if (ruleResponsibilityNameCrit != null) { 325 if (responsibilityCrit == null) { 326 responsibilityCrit = new Criteria(RuleBaseValues.class.getName(), false); 327 } 328 responsibilityCrit.and(ruleResponsibilityNameCrit); 329 } 330 331 if (responsibilityCrit != null) { 332 if (parentCrit.getAliasIndex("rr") == -1) { 333 parentCrit.join("responsibilities", "rr", false, true); 334 } 335 parentCrit.and(responsibilityCrit); 336 } 337 //return responsibilityCrit; 338 } 339 340 private Criteria getSearchCriteria(String docTypeName, String ruleTemplateId, String ruleDescription, Boolean delegateRule, Boolean activeInd, Map extensionValues) { 341 Criteria crit = new Criteria(RuleBaseValues.class.getName()); 342 crit.eq("currentInd", Boolean.TRUE); 343 crit.eq("templateRuleInd", Boolean.FALSE); 344 if (activeInd != null) { 345 crit.eq("active", activeInd); 346 } 347 if (docTypeName != null) { 348 crit.like("UPPER(__JPA_ALIAS[[0]]__.docTypeName)", docTypeName.toUpperCase()); 349 } 350 if (ruleDescription != null && !ruleDescription.trim().equals("")) { 351 crit.like("UPPER(__JPA_ALIAS[[0]]__.description)", ruleDescription.toUpperCase()); 352 } 353 if (ruleTemplateId != null) { 354 crit.eq("ruleTemplateId", ruleTemplateId); 355 } 356 if (delegateRule != null) { 357 crit.eq("delegateRule", delegateRule); 358 } 359 if (extensionValues != null && !extensionValues.isEmpty()) { 360 for (Iterator iter2 = extensionValues.entrySet().iterator(); iter2.hasNext();) { 361 Map.Entry entry = (Map.Entry) iter2.next(); 362 if (!org.apache.commons.lang.StringUtils.isEmpty((String) entry.getValue())) { 363 // Criteria extensionCrit = new Criteria(); 364 // extensionCrit.addEqualTo("extensionValues.key", 365 // entry.getKey()); 366 // extensionCrit.addLike("extensionValues.value", 367 // "%"+(String) entry.getValue()+"%"); 368 369 Criteria extensionCrit2 = new Criteria(RuleExtensionBo.class.getName()); 370 extensionCrit2.distinct(true); 371 extensionCrit2.join("extensionValues", "extval", false, true); 372 extensionCrit2.eq("__JPA_ALIAS[['extval']]__.key", entry.getKey()); 373 extensionCrit2.like("UPPER(__JPA_ALIAS[['extval']]__.value)", ("%" + (String) entry.getValue() + "%").toUpperCase()); 374 375 // Criteria extensionCrit3 = new Criteria(); 376 // extensionCrit3.addEqualTo("extensionValues.key", 377 // entry.getKey()); 378 // extensionCrit3.addLike("extensionValues.value", 379 // ("%"+(String) entry.getValue()+"%").toLowerCase()); 380 381 // extensionCrit.addOrCriteria(extensionCrit2); 382 // extensionCrit.addOrCriteria(extensionCrit3); 383 extensionCrit2.memberOf("__JPA_ALIAS[[0]]__", "__JPA_ALIAS[[-1]]__.ruleExtensions"); 384 crit.exists(extensionCrit2); 385 } 386 } 387 } 388 return crit; 389 } 390 391// private Criteria getWorkgroupOrCriteria(Collection workgroupIds) { 392// Criteria responsibilityCrit = new Criteria(RuleResponsibility.class.getName()); 393// for (Iterator iter = workgroupIds.iterator(); iter.hasNext();) { 394// String workgroupIdFromList = (String) iter.next(); 395// Criteria orCriteria = new Criteria(RuleResponsibility.class.getName()); 396// orCriteria.like("ruleResponsibilityName", workgroupIdFromList); 397// responsibilityCrit.or(orCriteria); 398// } 399// 400// Criteria crit = new Criteria(); 401// crit.in("responsibilities.ruleBaseValuesId", responsibilityCrit,"ruleBaseValuesId"); 402// return crit; 403// } 404 405 private void addResponsibilityCriteria(Criteria parentCrit, String ruleResponsibilityName) { 406 //Criteria responsibilityCrit = new Criteria(RuleResponsibility.class.getName()); 407 if (parentCrit.getAliasIndex("rr") == -1) { 408 parentCrit.join("responsibilities", "rr", false, true); 409 } 410 parentCrit.like("__JPA_ALIAS[['rr']]__.ruleResponsibilityName", ruleResponsibilityName); 411 //ReportQueryByCriteria query = QueryFactory.newReportQuery(RuleResponsibility.class, responsibilityCrit); 412 //query.setAttributes(new String[] { "ruleBaseValuesId" }); 413 //return responsibilityCrit; 414 } 415 416// private Criteria getWorkgroupResponsibilitySubQuery(Set<Long> workgroupIds) { 417// Set<String> workgroupIdStrings = new HashSet<String>(); 418// for (Long workgroupId : workgroupIds) { 419// workgroupIdStrings.add(workgroupId.toString()); 420// } 421// Criteria responsibilityCrit = new Criteria(RuleResponsibility.class.getName()); 422// responsibilityCrit.in("ruleResponsibilityName", new ArrayList(workgroupIds)); 423// responsibilityCrit.eq("ruleResponsibilityType", KewApiConstants.RULE_RESPONSIBILITY_GROUP_ID); 424//// ReportQueryByCriteria query = QueryFactory.newReportQuery(RuleResponsibility.class, responsibilityCrit); 425//// query.setAttributes(new String[] { "ruleBaseValuesId" }); 426// return responsibilityCrit; 427// } 428 429 public List<RuleBaseValues> findByPreviousRuleId(String previousRuleId) { 430 Criteria crit = new Criteria(RuleBaseValues.class.getName()); 431 crit.eq("previousRuleId", previousRuleId); 432 return (List) new QueryByCriteria(entityManager, crit).toQuery().getResultList(); 433 } 434 435 public RuleBaseValues findDefaultRuleByRuleTemplateId(String ruleTemplateId) { 436 Criteria crit = new Criteria(RuleBaseValues.class.getName()); 437 crit.eq("ruleTemplateId", ruleTemplateId); 438 crit.eq("templateRuleInd", Boolean.TRUE); 439 List rules = (List) new QueryByCriteria(entityManager, crit).toQuery().getResultList(); 440 if (rules != null && !rules.isEmpty()) { 441 return (RuleBaseValues) rules.get(0); 442 } 443 return null; 444 } 445 446 public void retrieveAllReferences(RuleBaseValues rule) { 447 // getPersistenceBroker().retrieveAllReferences(rule); 448 } 449 450 public RuleBaseValues getParentRule(String ruleBaseValuesId) { 451 Criteria criteria = new Criteria(RuleBaseValues.class.getName()); 452 criteria.eq("currentInd", Boolean.TRUE); 453 criteria.eq("responsibilities.delegationRules.delegateRuleId", ruleBaseValuesId); 454 Collection rules = new QueryByCriteria(entityManager, criteria).toQuery().getResultList(); 455 RuleBaseValues rule = null; 456 for (Iterator iterator = rules.iterator(); iterator.hasNext();) { 457 RuleBaseValues currentRule = (RuleBaseValues) iterator.next(); 458 if (rule == null || currentRule.getVersionNbr().intValue() > rule.getVersionNbr().intValue()) { 459 rule = currentRule; 460 } 461 } 462 return rule; 463 } 464 465 public List findOldDelegations(final RuleBaseValues oldRule, final RuleBaseValues newRule) { 466 467 Query q = entityManager.createNativeQuery(OLD_DELEGATIONS_SQL); 468 q.setParameter(1, oldRule.getId()); 469 q.setParameter(2, newRule.getId()); 470 List oldDelegations = new ArrayList(); 471 for(Object l:q.getResultList()){ 472 // FIXME: KULRICE-5201 - This used to be a cast by new Long(l) -- assuming that the Object here in result list is actually a string or is castable to string by .toString() 473 oldDelegations.add(findRuleBaseValuesById(String.valueOf(l))); 474 } 475 return oldDelegations; 476 477 } 478 479 public String findResponsibilityIdForRule(String ruleName, String ruleResponsibilityName, String ruleResponsibilityType) { 480 Criteria crit = new Criteria(RuleResponsibilityBo.class.getName()); 481 crit.eq("ruleResponsibilityName", ruleResponsibilityName); 482 crit.eq("ruleResponsibilityType", ruleResponsibilityType); 483 crit.eq("ruleBaseValues.currentInd", Boolean.TRUE); 484 crit.eq("ruleBaseValues.name", ruleName); 485 Collection responsibilities = new QueryByCriteria(entityManager, crit).toQuery().getResultList(); 486 if (responsibilities != null) { 487 for (Iterator iter = responsibilities.iterator(); iter.hasNext();) { 488 RuleResponsibilityBo responsibility = (RuleResponsibilityBo) iter.next(); 489 return responsibility.getResponsibilityId(); 490 } 491 } 492 return null; 493 } 494 495 public EntityManager getEntityManager() { 496 return this.entityManager; 497 } 498 499 public void setEntityManager(EntityManager entityManager) { 500 this.entityManager = entityManager; 501 } 502 503}