Coverage Report - org.kuali.rice.kew.document.RoutingRuleMaintainable
 
Classes in this File Line Coverage Branch Coverage Complexity
RoutingRuleMaintainable
0%
0/44
0%
0/12
1.615
 
 1  
 /*
 2  
  * Copyright 2007-2009 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.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.rule.RuleBaseValues;
 24  
 import org.kuali.rice.kew.rule.RuleResponsibility;
 25  
 import org.kuali.rice.kew.rule.bo.RuleTemplate;
 26  
 import org.kuali.rice.kew.rule.web.WebRuleUtils;
 27  
 import org.kuali.rice.kew.service.KEWServiceLocator;
 28  
 import org.kuali.rice.kew.util.KEWPropertyConstants;
 29  
 import org.kuali.rice.kns.maintenance.KualiMaintainableImpl;
 30  
 import org.kuali.rice.kns.web.ui.Section;
 31  
 import org.kuali.rice.krad.bo.PersistableBusinessObject;
 32  
 import org.kuali.rice.kns.document.MaintenanceDocument;
 33  
 import org.kuali.rice.krad.document.MaintenanceLock;
 34  
 import org.kuali.rice.kns.maintenance.Maintainable;
 35  
 
 36  
 /**
 37  
  * This class is the maintainable implementation for Routing Rules 
 38  
  * in KEW (represented by the {@link RuleBaseValues} business object). 
 39  
  * 
 40  
  * @author Kuali Rice Team (rice.collab@kuali.org)
 41  
  *
 42  
  */
 43  0
 public class RoutingRuleMaintainable extends KualiMaintainableImpl {
 44  
 
 45  
         private static final long serialVersionUID = -5920808902137192662L;
 46  
     
 47  
         /**
 48  
          * Override the getSections method on this maintainable so that the Section Containing the various Rule Attributes
 49  
          * can be dynamically generated based on the RuleTemplate which is selected.
 50  
          */
 51  
         @Override
 52  
         public List getSections(MaintenanceDocument document, Maintainable oldMaintainable) {
 53  0
                 List<Section> sections = super.getSections(document, oldMaintainable);
 54  0
                 return WebRuleUtils.customizeSections(getThisRule(), sections, false);
 55  
                 
 56  
         }
 57  
         
 58  
         /**
 59  
          * On creation of a new rule document, we must validate that a rule template and document type are set. 
 60  
          */
 61  
         @Override
 62  
         public void processAfterNew(MaintenanceDocument document,
 63  
                         Map<String, String[]> parameters) {
 64  0
                 WebRuleUtils.validateRuleTemplateAndDocumentType(getOldRule(document), getNewRule(document), parameters);
 65  0
                 WebRuleUtils.establishDefaultRuleValues(getNewRule(document));
 66  0
                 getNewRule(document).setDocumentId(document.getDocumentHeader().getDocumentNumber());
 67  0
         }
 68  
         
 69  
         /**
 70  
          * This is a hack to get around the fact that when a document is first created, this value is
 71  
           * true which causes issues if you want to be able to initialize fields on  the document using
 72  
           * request parameters.  See SectionBridge.toSection for the "if" block where it populates
 73  
           * Field.propertyValue to see why this causes problems
 74  
          */
 75  
         @Override
 76  
         public void setGenerateBlankRequiredValues(String docTypeName) {                
 77  
                 
 78  0
         }
 79  
                         
 80  
     /**
 81  
      * A complete override of the implementation for saving a Rule
 82  
      */
 83  
     @Override
 84  
     public void saveBusinessObject() {
 85  0
             WebRuleUtils.clearKeysForSave(getThisRule());
 86  0
             WebRuleUtils.translateResponsibilitiesForSave(getThisRule());
 87  0
             WebRuleUtils.translateFieldValuesForSave(getThisRule());
 88  0
             KEWServiceLocator.getRuleService().makeCurrent(getThisRule(), true);
 89  0
     }
 90  
     
 91  
     @Override
 92  
     public void processAfterCopy(MaintenanceDocument document, Map<String, String[]> parameters) {
 93  0
             WebRuleUtils.processRuleForCopy(document.getDocumentNumber(), getOldRule(document), getNewRule(document));
 94  0
         super.processAfterCopy(document, parameters);
 95  0
     }
 96  
     
 97  
         @Override
 98  
         public void processAfterEdit(MaintenanceDocument document,
 99  
                         Map<String, String[]> parameters) {
 100  0
                 if (!getOldRule(document).getCurrentInd()) {
 101  0
                         throw new RiceRuntimeException("Cannot edit a non-current version of a rule.");
 102  
                 }
 103  0
                 WebRuleUtils.populateForCopyOrEdit(getOldRule(document), getNewRule(document));
 104  
                 
 105  0
                 getNewRule(document).setPreviousVersionId(getOldRule(document).getRuleBaseValuesId());       
 106  
 
 107  0
                 getNewRule(document).setDocumentId(document.getDocumentHeader().getDocumentNumber());
 108  0
                 super.processAfterEdit(document, parameters);
 109  0
         }
 110  
 
 111  
         /**
 112  
          * Returns the new RuleBaseValues business object.
 113  
          */
 114  
         protected RuleBaseValues getNewRule(MaintenanceDocument document) {
 115  0
                 return (RuleBaseValues)document.getNewMaintainableObject().getBusinessObject();
 116  
         }
 117  
         
 118  
         /**
 119  
          * Returns the old RuleBaseValues business object.
 120  
          */
 121  
         protected RuleBaseValues getOldRule(MaintenanceDocument document) {
 122  0
                 return (RuleBaseValues)document.getOldMaintainableObject().getBusinessObject();
 123  
         }
 124  
         
 125  
         /**
 126  
          * Returns the RuleBaseValues business object associated with this Maintainable.
 127  
          */
 128  
         protected RuleBaseValues getThisRule() {
 129  0
                 return (RuleBaseValues)getBusinessObject();
 130  
         }
 131  
 
 132  
         /**
 133  
          * Overridden implementation of maintenance locks.  The default locking for Routing Rules
 134  
          * is based on previous version (can't route more than one rule based off the same 
 135  
          * previous verison).  However, for the first version of a rule, the previous version id
 136  
          * will be null.
 137  
          * 
 138  
          * So for a new Route Rule maintenance document we don't want any locks generated.
 139  
          * 
 140  
          * TODO can we just let the locking key be the primary key? (ruleBaseValuesId)
 141  
          */
 142  
         @Override
 143  
         public List<MaintenanceLock> generateMaintenanceLocks() {
 144  0
                 if (getThisRule().getPreviousVersionId() == null) {
 145  0
                         return Collections.emptyList();
 146  
                 }
 147  0
                 return super.generateMaintenanceLocks();
 148  
         }
 149  
 
 150  
         @Override
 151  
         public String getDocumentTitle(MaintenanceDocument document) {
 152  0
                 StringBuffer title = new StringBuffer();
 153  0
         RuleBaseValues rule = getThisRule();
 154  0
         if (rule.getPreviousVersionId() != null) {
 155  0
             title.append("Editing Rule '").append(rule.getDescription()).append("'");
 156  
         } else {
 157  0
             title.append("Adding Rule '").append(rule.getDescription()).append("'");
 158  
         }
 159  0
         return title.toString();
 160  
         }
 161  
 
 162  
         /**
 163  
          * This overridden method ...
 164  
          *
 165  
          * @see org.kuali.rice.krad.maintenance.KualiMaintainableImpl#prepareForSave()
 166  
          */
 167  
         @Override
 168  
         public void prepareForSave() {
 169  0
                 super.prepareForSave();
 170  0
                 WebRuleUtils.translateResponsibilitiesForSave(getThisRule());
 171  0
         }
 172  
 
 173  
     /**
 174  
          * @see org.kuali.rice.krad.maintenance.KualiMaintainableImpl#setNewCollectionLineDefaultValues(java.lang.String, org.kuali.rice.krad.bo.PersistableBusinessObject)
 175  
          */
 176  
         @Override
 177  
         protected void setNewCollectionLineDefaultValues(String collectionName,
 178  
                         PersistableBusinessObject addLine) {
 179  0
                 super.setNewCollectionLineDefaultValues(collectionName, addLine);
 180  0
                 if (KEWPropertyConstants.RESP_SECTION_NAME_SET.contains(collectionName)) {
 181  0
                         RuleTemplate ruleTemplate = getThisRule().getRuleTemplate();
 182  0
                         if(ruleTemplate.getDefaultActionRequestValue() != null && ruleTemplate.getDefaultActionRequestValue().getValue() != null){
 183  0
                                 ((RuleResponsibility) addLine).setActionRequestedCd(ruleTemplate.getDefaultActionRequestValue().getValue());
 184  
                 }
 185  
                 }
 186  0
         }
 187  
         
 188  
 }