001: /*
002: * Copyright 2005-2006 The Kuali Foundation.
003: *
004: *
005: * Licensed under the Educational Community License, Version 1.0 (the "License");
006: * you may not use this file except in compliance with the License.
007: * You may obtain a copy of the License at
008: *
009: * http://www.opensource.org/licenses/ecl1.php
010: *
011: * Unless required by applicable law or agreed to in writing, software
012: * distributed under the License is distributed on an "AS IS" BASIS,
013: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014: * See the License for the specific language governing permissions and
015: * limitations under the License.
016: */
017: package edu.iu.uis.eden.routetemplate.web;
018:
019: import java.util.ArrayList;
020: import java.util.Iterator;
021: import java.util.List;
022:
023: import org.apache.commons.beanutils.PropertyUtils;
024:
025: import edu.iu.uis.eden.routetemplate.RuleDelegation;
026: import edu.iu.uis.eden.routetemplate.RuleResponsibility;
027:
028: /**
029: * Some utilities which are utilized by the {@link Rule2Action}.
030: *
031: * @author ewestfal
032: */
033: public class WebRuleUtils {
034:
035: /**
036: * Copies the existing rule onto the current document. This is used within the web-based rule GUI to make a
037: * copy of a rule on the existing document. Essentially, this method makes a copy of the rule and all
038: * delegates but preserves the document ID of the original rule.
039: */
040: public static WebRuleBaseValues copyRuleOntoExistingDocument(
041: WebRuleBaseValues rule) throws Exception {
042: WebRuleBaseValues ruleCopy = new WebRuleBaseValues();
043: PropertyUtils.copyProperties(ruleCopy, rule);
044: ruleCopy.setPreviousVersionId(null);
045: ruleCopy.setCurrentInd(null);
046: ruleCopy.setVersionNbr(null);
047:
048: List responsibilities = new ArrayList();
049: for (Iterator iter = ruleCopy.getResponsibilities().iterator(); iter
050: .hasNext();) {
051: WebRuleResponsibility responsibility = (WebRuleResponsibility) iter
052: .next();
053: WebRuleResponsibility responsibilityCopy = new WebRuleResponsibility();
054: PropertyUtils.copyProperties(responsibilityCopy,
055: responsibility);
056:
057: responsibilityCopy.setResponsibilityId(null);
058: responsibilityCopy.setRuleResponsibilityKey(null);
059:
060: List delegations = new ArrayList();
061: for (Iterator iterator = responsibilityCopy
062: .getDelegationRules().iterator(); iterator
063: .hasNext();) {
064: RuleDelegation delegation = (RuleDelegation) iterator
065: .next();
066: RuleDelegation delegationCopy = new RuleDelegation();
067: PropertyUtils
068: .copyProperties(delegationCopy, delegation);
069:
070: delegationCopy.setDelegateRuleId(null);
071: delegationCopy.setLockVerNbr(null);
072: delegationCopy.setRuleDelegationId(null);
073: delegationCopy.setRuleResponsibilityId(null);
074:
075: WebRuleBaseValues delegationRule = ((WebRuleBaseValues) delegation
076: .getDelegationRuleBaseValues());
077: WebRuleBaseValues ruleDelegateCopy = new WebRuleBaseValues();
078: PropertyUtils.copyProperties(ruleDelegateCopy,
079: delegationRule);
080:
081: ruleDelegateCopy.setPreviousVersionId(null);
082: ruleDelegateCopy.setCurrentInd(null);
083: ruleDelegateCopy.setVersionNbr(null);
084:
085: List delegateResps = new ArrayList();
086: for (Iterator iterator1 = ruleDelegateCopy
087: .getResponsibilities().iterator(); iterator1
088: .hasNext();) {
089: WebRuleResponsibility delegateResp = (WebRuleResponsibility) iterator1
090: .next();
091: WebRuleResponsibility delegateRespCopy = new WebRuleResponsibility();
092: PropertyUtils.copyProperties(delegateRespCopy,
093: delegateResp);
094:
095: delegateRespCopy.setResponsibilityId(null);
096: delegateRespCopy.setRuleResponsibilityKey(null);
097: delegateResps.add(delegateRespCopy);
098: }
099: ruleDelegateCopy.setResponsibilities(delegateResps);
100: delegationCopy
101: .setDelegationRuleBaseValues(ruleDelegateCopy);
102: delegations.add(delegationCopy);
103: }
104: responsibilityCopy.setDelegationRules(delegations);
105: responsibilities.add(responsibilityCopy);
106: }
107: ruleCopy.setResponsibilities(responsibilities);
108: return ruleCopy;
109: }
110:
111: /**
112: * Makes a copy of the rule and clears the document id on the rule and any of its delegates.
113: * This method is used for making a copy of a rule for a new document. It essentially calls
114: * the copyRuleOntoExistingDocument method and then clears out the document IDs.
115: *
116: * @param webRuleBaseValues
117: */
118: public static WebRuleBaseValues copyToNewRule(
119: WebRuleBaseValues webRuleBaseValues) throws Exception {
120: WebRuleBaseValues newRule = copyRuleOntoExistingDocument(webRuleBaseValues);
121: // clear out all document IDs on the rule and it's delegates
122: newRule.setRouteHeaderId(null);
123: for (Iterator iterator = newRule.getResponsibilities()
124: .iterator(); iterator.hasNext();) {
125: RuleResponsibility responsibility = (RuleResponsibility) iterator
126: .next();
127: for (Iterator iterator2 = responsibility
128: .getDelegationRules().iterator(); iterator2
129: .hasNext();) {
130: RuleDelegation delegation = (RuleDelegation) iterator2
131: .next();
132: delegation.getDelegationRuleBaseValues()
133: .setRouteHeaderId(null);
134: }
135: }
136: return newRule;
137: }
138:
139: }
|