1 /** 2 * Copyright 2005-2014 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.krad.datadictionary.state; 17 18 import org.kuali.rice.krad.datadictionary.validator.ValidationTrace; 19 20 import java.util.List; 21 import java.util.Map; 22 23 /** 24 * StateMapping defines the methods necessary to allow for state validation to apply to a state object 25 * 26 * @author Kuali Rice Team (rice.collab@kuali.org) 27 * @since 2.2 28 */ 29 public interface StateMapping { 30 31 /** 32 * Gets the currentState by looking at the statePropertyName on the stateObject passed in 33 * 34 * @param stateObject the object containing the state information 35 * @return the currentState of the object 36 */ 37 public String getCurrentState(Object stateObject); 38 39 /** 40 * Gets the nextState of the object passed in by looking at the statePropertyName and using the states list 41 * to determine the next state in order. Returns the currentState if there is no next state. 42 * 43 * @param stateObject the object containing the state information 44 * @return the next state of the object, or current state if no next state exists 45 */ 46 public String getNextState(Object stateObject); 47 48 /** 49 * Returns the human readable message determined by the key set for the state passed in 50 * against the stateNameMessageKeyMap. If the state cannot be found in the states list or the state passed in is 51 * blank, this method will return null. If the key found does not match a message, this method will return the 52 * state 53 * passed in. 54 * 55 * @param state state to get the message for 56 * @return state message, or the state passed in (if a valid state in states). Otherwise, returns null. 57 */ 58 public String getStateNameMessage(String state); 59 60 /** 61 * Map used by getStateNameMessage to determine the key to use when retrieving the message for the state specified. 62 * The map should be defined as state:messageKeyForState. 63 * 64 * @return map of states and their messageKeys 65 */ 66 public Map<String, String> getStateNameMessageKeyMap(); 67 68 /** 69 * Set the stateNameMessageKeyMap 70 * 71 * @param stateNameMessageKeyMap map of states and their messageKeys 72 */ 73 public void setStateNameMessageKeyMap(Map<String, String> stateNameMessageKeyMap); 74 75 /** 76 * The states of this stateMapping. IMPORTANT: This must be ALL states for this mapping IN ORDER. 77 * 78 * @return list of states, in the order in which they are applied. If states were never set, returns an empty 79 * list. 80 */ 81 public List<String> getStates(); 82 83 /** 84 * Set the states of this stateMapping, in order 85 * 86 * @param states list of states, in the order in which they are applied. 87 */ 88 public void setStates(List<String> states); 89 90 /** 91 * The property name/path to be used when trying to find state String information on the object. This is used by 92 * getCurrentState(Object object) 93 * and getNextState(Object object); 94 * 95 * @return the property name/path representing where state information can be found on the object 96 */ 97 public String getStatePropertyName(); 98 99 /** 100 * Set the property name/path 101 * 102 * @param name the property name/path that points to the string representation of the object's tate 103 */ 104 public void setStatePropertyName(String name); 105 106 /** 107 * This ONLY applies to client side validations as the controller has full control over what validations to apply 108 * on the server. This setting determines for what states, if any, the client side validation needs to use for 109 * its validation instead of the default (by default if state validation is setup, the client side validation 110 * will use n+1 as its validation, ie whatever the NEXT state is). 111 * 112 * <p>The map must be defined as such: (state of the object, state to use for validation on the 113 * client when in that state).<br> 114 * Example:<br> 115 * key="INITIAL" value="SUBMIT"<br> 116 * key="SAVE" value="SUBMIT"<br> 117 * In this example, when the object is in the "INITIAL" or the "SAVE" states, validation on the client will 118 * be against the "SUBMIT" state</p> 119 * 120 * @return map representing the state of the object and state to use for validation on the 121 * client when in that state 122 */ 123 public Map<String, String> getCustomClientSideValidationStates(); 124 125 /** 126 * Set the custom client side validation behavior map. This only applies for client-side validation. 127 * 128 * @param customClientSideValidationStates map representing the state of the object and state to use for validation 129 * on the 130 * client when in that state 131 */ 132 public void setCustomClientSideValidationStates(Map<String, String> customClientSideValidationStates); 133 134 /** 135 * Validates different requirements of component compiling a series of reports detailing information on errors 136 * found in the component. Used by the RiceDictionaryValidator. 137 * 138 * @param tracer Record of component's location 139 */ 140 public void completeValidation(ValidationTrace tracer); 141 142 }