Coverage Report - org.kuali.rice.kew.document.RoutingRuleMaintainable
 
Classes in this File Line Coverage Branch Coverage Complexity
RoutingRuleMaintainable
0%
0/49
0%
0/12
1.571
 
 1  
 /**
 2  
  * Copyright 2005-2011 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.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.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  
     /**
 92  
      * A complete override of the implementation for saving a Rule
 93  
      */
 94  
     @Override
 95  
     public void saveDataObject() {
 96  0
             WebRuleUtils.clearKeysForSave(getThisRule());
 97  0
             WebRuleUtils.translateResponsibilitiesForSave(getThisRule());
 98  0
             WebRuleUtils.translateFieldValuesForSave(getThisRule());
 99  0
             KEWServiceLocator.getRuleService().makeCurrent(getThisRule(), true);
 100  0
     }
 101  
     
 102  
     @Override
 103  
     public void processAfterCopy(MaintenanceDocument document, Map<String, String[]> parameters) {
 104  0
             WebRuleUtils.processRuleForCopy(document.getDocumentNumber(), getOldRule(document), getNewRule(document));
 105  0
         super.processAfterCopy(document, parameters);
 106  0
     }
 107  
     
 108  
         @Override
 109  
         public void processAfterEdit(MaintenanceDocument document,
 110  
                         Map<String, String[]> parameters) {
 111  0
                 if (!getOldRule(document).getCurrentInd()) {
 112  0
                         throw new RiceRuntimeException("Cannot edit a non-current version of a rule.");
 113  
                 }
 114  0
                 WebRuleUtils.populateForCopyOrEdit(getOldRule(document), getNewRule(document));
 115  
                 
 116  0
                 getNewRule(document).setPreviousRuleId(getOldRule(document).getId());
 117  
 
 118  0
                 getNewRule(document).setDocumentId(document.getDocumentHeader().getDocumentNumber());
 119  0
                 super.processAfterEdit(document, parameters);
 120  0
         }
 121  
 
 122  
         /**
 123  
          * Returns the new RuleBaseValues business object.
 124  
          */
 125  
         protected RuleBaseValues getNewRule(MaintenanceDocument document) {
 126  0
                 return (RuleBaseValues)document.getNewMaintainableObject().getBusinessObject();
 127  
         }
 128  
         
 129  
         /**
 130  
          * Returns the old RuleBaseValues business object.
 131  
          */
 132  
         protected RuleBaseValues getOldRule(MaintenanceDocument document) {
 133  0
                 return (RuleBaseValues)document.getOldMaintainableObject().getBusinessObject();
 134  
         }
 135  
         
 136  
         /**
 137  
          * Returns the RuleBaseValues business object associated with this Maintainable.
 138  
          */
 139  
         protected RuleBaseValues getThisRule() {
 140  0
                 return (RuleBaseValues)getBusinessObject();
 141  
         }
 142  
 
 143  
         /**
 144  
          * Overridden implementation of maintenance locks.  The default locking for Routing Rules
 145  
          * is based on previous version (can't route more than one rule based off the same 
 146  
          * previous verison).  However, for the first version of a rule, the previous version id
 147  
          * will be null.
 148  
          * 
 149  
          * So for a new Route Rule maintenance document we don't want any locks generated.
 150  
          * 
 151  
          * TODO can we just let the locking key be the primary key? (ruleBaseValuesId)
 152  
          */
 153  
         @Override
 154  
         public List<MaintenanceLock> generateMaintenanceLocks() {
 155  0
                 if (getThisRule().getPreviousRuleId() == null) {
 156  0
                         return Collections.emptyList();
 157  
                 }
 158  0
                 return super.generateMaintenanceLocks();
 159  
         }
 160  
 
 161  
         @Override
 162  
         public String getDocumentTitle(MaintenanceDocument document) {
 163  0
                 StringBuffer title = new StringBuffer();
 164  0
         RuleBaseValues rule = getThisRule();
 165  0
         if (rule.getPreviousRuleId() != null) {
 166  0
             title.append("Editing Rule '").append(rule.getDescription()).append("'");
 167  
         } else {
 168  0
             title.append("Adding Rule '").append(rule.getDescription()).append("'");
 169  
         }
 170  0
         return title.toString();
 171  
         }
 172  
 
 173  
         /**
 174  
          * This overridden method ...
 175  
          *
 176  
          * @see org.kuali.rice.krad.maintenance.KualiMaintainableImpl#prepareForSave()
 177  
          */
 178  
         @Override
 179  
         public void prepareForSave() {
 180  0
                 super.prepareForSave();
 181  0
                 WebRuleUtils.translateResponsibilitiesForSave(getThisRule());
 182  0
         }
 183  
 
 184  
     /**
 185  
          * @see org.kuali.rice.krad.maintenance.KualiMaintainableImpl#setNewCollectionLineDefaultValues(java.lang.String, org.kuali.rice.krad.bo.PersistableBusinessObject)
 186  
          */
 187  
         @Override
 188  
         protected void setNewCollectionLineDefaultValues(String collectionName,
 189  
                         PersistableBusinessObject addLine) {
 190  0
                 super.setNewCollectionLineDefaultValues(collectionName, addLine);
 191  0
                 if (KEWPropertyConstants.RESP_SECTION_NAME_SET.contains(collectionName)) {
 192  0
                         RuleTemplateBo ruleTemplate = getThisRule().getRuleTemplate();
 193  
             //if (ruleTemplate == null && getThisRule().getRuleTemplateId() != null) {
 194  
             //    ruleTemplate = KEWServiceLocator.getRuleTemplateService().findByRuleTemplateId(getThisRule().getRuleTemplateId());
 195  
             //}
 196  0
                         if(ruleTemplate.getDefaultActionRequestValue() != null && ruleTemplate.getDefaultActionRequestValue().getValue() != null){
 197  0
                                 ((RuleResponsibilityBo) addLine).setActionRequestedCd(ruleTemplate.getDefaultActionRequestValue().getValue());
 198  
                 }
 199  
                 }
 200  0
         }
 201  
         
 202  
 }