1   
2   
3   
4   
5   
6   
7   
8   
9   
10  
11  
12  
13  
14  
15  
16  package org.kuali.rice.kew.document;
17  
18  import java.util.Collections;
19  import java.util.List;
20  import java.util.Map;
21  
22  import org.kuali.rice.core.api.exception.RiceRuntimeException;
23  import org.kuali.rice.kew.api.KEWPropertyConstants;
24  import org.kuali.rice.kew.rule.RuleBaseValues;
25  import org.kuali.rice.kew.rule.RuleResponsibilityBo;
26  import org.kuali.rice.kew.rule.bo.RuleTemplateBo;
27  import org.kuali.rice.kew.rule.web.WebRuleUtils;
28  import org.kuali.rice.kew.service.KEWServiceLocator;
29  import org.kuali.rice.kns.document.MaintenanceDocument;
30  import org.kuali.rice.kns.maintenance.KualiMaintainableImpl;
31  import org.kuali.rice.kns.maintenance.Maintainable;
32  import org.kuali.rice.kns.web.ui.Section;
33  import org.kuali.rice.krad.bo.PersistableBusinessObject;
34  import org.kuali.rice.krad.data.KradDataServiceLocator;
35  import org.kuali.rice.krad.maintenance.MaintenanceLock;
36  import org.kuali.rice.krad.service.KRADServiceLocatorWeb;
37  
38  
39  
40  
41  
42  
43  
44  
45  public class RoutingRuleMaintainable extends KualiMaintainableImpl {
46  
47  	private static final long serialVersionUID = -5920808902137192662L;
48  
49  	
50  
51  
52  
53  	@Override
54  	public List getSections(MaintenanceDocument document, Maintainable oldMaintainable) {
55  	    
56  	    
57          if ( getNewRule(document) != null ) {   
58              getNewRule(document).setRuleTemplate( getDataObjectService().find(RuleTemplateBo.class, getNewRule(document).getRuleTemplateId() ) );
59          }
60          
61          if ( getOldRule(document) != null ) {   
62              getOldRule(document).setRuleTemplate( getDataObjectService().find(RuleTemplateBo.class, getOldRule(document).getRuleTemplateId() ) );
63          }
64  
65  	    List<Section> sections = super.getSections(document, oldMaintainable);
66  		return WebRuleUtils.customizeSections(getThisRule(), sections, false);
67  	}
68  
69  	
70  
71  
72  	@Override
73  	public void processAfterNew(MaintenanceDocument document,
74  			Map<String, String[]> parameters) {
75  		WebRuleUtils.validateRuleTemplateAndDocumentType(getOldRule(document), getNewRule(document), parameters);
76  		WebRuleUtils.establishDefaultRuleValues(getNewRule(document));
77  		getNewRule(document).setDocumentId(document.getDocumentHeader().getDocumentNumber());
78  	}
79  
80  	
81  
82  
83  
84  
85  
86  	@Override
87  	public void setGenerateBlankRequiredValues(String docTypeName) {
88  
89  	}
90  
91      
92  
93  
94      @Override
95      public void saveBusinessObject() {
96      	WebRuleUtils.clearKeysForSave(getThisRule());
97      	WebRuleUtils.translateResponsibilitiesForSave(getThisRule());
98      	WebRuleUtils.translateFieldValuesForSave(getThisRule());
99      	KEWServiceLocator.getRuleService().makeCurrent(getThisRule(), true);
100     }
101     
102     @Override
103     public void processAfterCopy(MaintenanceDocument document, Map<String, String[]> parameters) {
104     	WebRuleUtils.processRuleForCopy(document.getDocumentNumber(), getOldRule(document), getNewRule(document));
105         super.processAfterCopy(document, parameters);
106     }
107 
108 	@Override
109 	public void processAfterEdit(MaintenanceDocument document,
110 			Map<String, String[]> parameters) {
111 		if (!getOldRule(document).getCurrentInd()) {
112 			throw new RiceRuntimeException("Cannot edit a non-current version of a rule.");
113 		}
114 		WebRuleUtils.populateForCopyOrEdit(getOldRule(document), getNewRule(document));
115 
116 		getNewRule(document).setPreviousRuleId(getOldRule(document).getId());
117 
118 		getNewRule(document).setDocumentId(document.getDocumentHeader().getDocumentNumber());
119 		super.processAfterEdit(document, parameters);
120 	}
121 
122 	
123 
124 
125 	protected RuleBaseValues getNewRule(MaintenanceDocument document) {
126 		return (RuleBaseValues)document.getNewMaintainableObject().getBusinessObject();
127 	}
128 
129 	
130 
131 
132 	protected RuleBaseValues getOldRule(MaintenanceDocument document) {
133 		return (RuleBaseValues)document.getOldMaintainableObject().getBusinessObject();
134 	}
135 
136 	
137 
138 
139 	protected RuleBaseValues getThisRule() {
140 		return (RuleBaseValues)getBusinessObject();
141 	}
142 
143 	
144 
145 
146 
147 
148 
149 
150 
151 
152 
153 	@Override
154 	public List<MaintenanceLock> generateMaintenanceLocks() {
155 		if (getThisRule().getPreviousRuleId() == null) {
156 			return Collections.emptyList();
157 		}
158 		return super.generateMaintenanceLocks();
159 	}
160 
161 	@Override
162 	public String getDocumentTitle(MaintenanceDocument document) {
163 		StringBuffer title = new StringBuffer();
164         RuleBaseValues rule = getThisRule();
165         if (rule.getPreviousRuleId() != null) {
166             title.append("Editing Rule '").append(rule.getDescription()).append("'");
167         } else {
168             title.append("Adding Rule '").append(rule.getDescription()).append("'");
169         }
170         return title.toString();
171 	}
172 
173 
174 
175 
176 
177 
178 
179 
180 
181 
182 
183 
184     
185 
186 
187 	@Override
188 	protected void setNewCollectionLineDefaultValues(String collectionName,
189 			PersistableBusinessObject addLine) {
190 		super.setNewCollectionLineDefaultValues(collectionName, addLine);
191 		if (KEWPropertyConstants.RESP_SECTION_NAME_SET.contains(collectionName)) {
192 			RuleTemplateBo ruleTemplate = getThisRule().getRuleTemplate();
193 			if(ruleTemplate.getDefaultActionRequestValue() != null && ruleTemplate.getDefaultActionRequestValue().getValue() != null){
194 				((RuleResponsibilityBo) addLine).setActionRequestedCd(ruleTemplate.getDefaultActionRequestValue().getValue());
195 	        }
196 		}
197 	}
198 
199 }