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.kns.service;
17
18 import java.util.List;
19 import java.util.Map;
20
21 import org.kuali.rice.kns.bo.Parameter;
22
23 /**
24 * This class provides methods to verify the existence of Parameters, get the value(s), and get ParameterEvaluators. For the most
25 * part, your code should be asking for a ParameterEvaluator and interacting with that. For optional parameters (ones that may not
26 * exist but should be processed if they do), you will want to use the parameterExists method before using other methods, since an
27 * exception will be thrown by the other methods if the referenced parameter does not exist. In some cases you may need to just pull
28 * the value(s) of a parameter via the getParameterValue(s) or getIndicatorParameter methods. All of the methods that you will want
29 * to use take a Class componentClass and String parameterName argument. Implementations of this class know how to translate these
30 * appropriately to retrieve Parameters and construct ParameterEvaluators.
31 */
32 public interface ParameterService {
33 /**
34 * This method provides an exception free way to ensure that a parameter exists.
35 *
36 * @param componentClass
37 * @param parameterName
38 * @return boolean indicating whether or not the parameter exists
39 */
40 public boolean parameterExists(Class<? extends Object> componentClass, String parameterName);
41
42 /**
43 * This method provides a convenient way to access the a parameter that signifies true or false.
44 *
45 * @param componentClass
46 * @param parameterName
47 * @return boolean value of indicator parameter
48 */
49 public boolean getIndicatorParameter(Class<? extends Object> componentClass, String parameterName);
50
51 /**
52 * This method provides a convenient way to access the a parameter that signifies true or false.
53 *
54 * @param namespaceCode
55 * @param detailTypeCode
56 * @param parameterName
57 * @return boolean value of indicator parameter
58 */
59 public boolean getIndicatorParameter(String namespaceCode, String detailTypeCode, String parameterName);
60
61 /**
62 * This method returns the actual BusinessObject instance of a parameter.
63 *
64 * @param namespaceCode
65 * @param detailTypeCode
66 * @param parameterName
67 * @return The Parameter instance
68 */
69 public Parameter retrieveParameter(String namespaceCode,
70 String detailTypeCode, String parameterName);
71
72 /**
73 * This method returns the unprocessed text value of a parameter.
74 *
75 * @param componentClass
76 * @param parameterName
77 * @return unprocessed string value as a parameter
78 */
79 public String getParameterValue(Class<? extends Object> componentClass, String parameterName);
80
81 /**
82 * This method can be used to derive a value based on another value.
83 *
84 * @param componentClass
85 * @param parameterName
86 * @param constrainingValue
87 * @return derived value
88 */
89 public String getParameterValue(Class<? extends Object> componentClass, String parameterName, String constrainingValue);
90
91 /**
92 * This method returns the value of the specified parameter
93 * @param namespaceCode
94 * @param detailTypeCode
95 * @param parameterName
96 */
97 public String getParameterValue(String namespaceCode, String detailTypeCode, String parameterName);
98
99 /**
100 * This method can be used to parse the value of a parameter.
101 *
102 * @param componentClass
103 * @param parameterName
104 * @return parsed List of String parameter values
105 */
106 public List<String> getParameterValues(Class<? extends Object> componentClass, String parameterName);
107
108 /**
109 * This method can be used to derive a set of values based on another value.
110 *
111 * @param componentClass
112 * @param parameterName
113 * @param constrainingValue
114 * @return derived values List<String>
115 */
116 public List<String> getParameterValues(Class<? extends Object> componentClass, String parameterName, String constrainingValue);
117
118 /**
119 * This method returns a list of the parameter values split on implementation specific criteria.
120 * For the default KualiConfigurationServiceImpl, the split is on a semi-colon.
121 * @param namespaceCode
122 * @param detailTypeCode
123 * @param parameterName
124 */
125 public List<String> getParameterValues(String namespaceCode, String detailTypeCode, String parameterName);
126
127 /**
128 * This method will return an instance of a ParameterEvaluator implementation that will wrap a Parameter and provide convenient
129 * evaluation methods.
130 *
131 * @param componentClass
132 * @param parameterName
133 * @return ParameterEvaluator
134 */
135 public ParameterEvaluator getParameterEvaluator(Class<? extends Object> componentClass, String parameterName);
136
137 /**
138 * This method will return an instance of a ParameterEvaluator implementation that will wrap a Parameter and provide convenient
139 * evaluation methods.
140 *
141 * @param namespaceCode
142 * @param detailTypeCode
143 * @param parameterName
144 * @return ParameterEvaluator
145 */
146 public ParameterEvaluator getParameterEvaluator(String namespaceCode, String detailTypeCode, String parameterName);
147
148 /**
149 * This method will return an instance of a ParameterEvaluator implementation that will wrap a Parameter and constrainedValue
150 * and provide convenient evaluation methods.
151 *
152 * @param componentClass
153 * @param parameterName
154 * @return ParameterEvaluator
155 */
156 public ParameterEvaluator getParameterEvaluator(Class<? extends Object> componentClass, String parameterName, String constrainedValue);
157
158 /**
159 * This method will return an instance of a ParameterEvaluator implementation that will wrap a Parameter and constrainedValue
160 * and provide convenient evaluation methods.
161 *
162 * @param namespaceCode
163 * @param detailTypeCode
164 * @param parameterName
165 * @return ParameterEvaluator
166 */
167 public ParameterEvaluator getParameterEvaluator(String namespaceCode, String detailTypeCode, String parameterName, String constrainedValue);
168
169 /**
170 * This method will return an instance of a ParameterEvaluator implementation that will wrap a Parameter, constrainingValue, and
171 * constrainedValue and provide convenient evaluation methods.
172 *
173 * @param componentClass
174 * @param parameterName
175 * @return ParameterEvaluator
176 */
177 public ParameterEvaluator getParameterEvaluator(Class<? extends Object> componentClass, String parameterName, String constrainingValue, String constrainedValue);
178
179 /**
180 * This method will return an instance of a ParameterEvaluator implementation that will wrap an allow Parameter, a deny
181 * Parameter, constrainingValue, and constrainedValue and provide convenient evaluation methods.
182 *
183 * @param componentClass
184 * @param parameterName
185 * @return ParameterEvaluator
186 */
187 public ParameterEvaluator getParameterEvaluator(Class<? extends Object> componentClass, String allowParameterName, String denyParameterName, String constrainingValue, String constrainedValue);
188
189 /**
190 * This method can be used to change the value of a Parameter for unit testing purposes.
191 *
192 * @param componentClass
193 * @param parameterName
194 * @param parameterText
195 */
196 public void setParameterForTesting(Class<? extends Object> componentClass, String parameterName, String parameterText);
197
198 /**
199 * This method can be used to clear the parameter cache during unit testing.
200 */
201 public void clearCache();
202
203 /**
204 * This method can be used to set a namespace.
205 *
206 * @param documentOrStepClass
207 *
208 */
209 public String getNamespace(Class<? extends Object> documentOrStepClass);
210
211 /**
212 * This method can be used to change the value of a Parameter for unit testing purposes.
213 *
214 * @param documentOrStepClass
215 */
216 public String getDetailType(Class<? extends Object> documentOrStepClass);
217
218 /**
219 * This method can be used to retrieve a list of parameters that
220 * match the given fieldValues criteria. You could also specify the "like"
221 * criteria in the Map.
222 *
223 * @param fieldValues The Map containing the key value pairs to be used
224 * to build the criteria.
225 * @return List of Parameters that match the criteria.
226 */
227 public List<Parameter> retrieveParametersGivenLookupCriteria(Map<String, String> fieldValues);
228
229 }