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