View Javadoc

1   /**
2    * Copyright 2010 The Kuali Foundation 
3    *
4    * Licensed under the Educational Community License, Version 2.0 (the
5    * "License"); you may not use this file except in compliance with the
6    * License. You may obtain a copy of the License at
7    * http://www.osedu.org/licenses/ECL-2.0 Unless required by applicable
8    * law or agreed to in writing, software distributed under the License
9    * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
10   * CONDITIONS OF ANY KIND, either express or implied. See the License
11   * for the specific language governing permissions and limitations
12   * under the License.
13   */
14  package org.kuali.student.r2.lum.lrc.service;
15  
16  import java.util.List;
17  
18  import javax.jws.WebParam;
19  import javax.jws.WebService;
20  import javax.jws.soap.SOAPBinding;
21  import org.kuali.rice.core.api.criteria.QueryByCriteria;
22  
23  import org.kuali.student.r2.common.dto.StatusInfo;
24  import org.kuali.student.r2.common.exceptions.PermissionDeniedException;
25  import org.kuali.student.r2.common.dto.ContextInfo;
26  import org.kuali.student.r2.common.dto.ValidationResultInfo;
27  import org.kuali.student.r2.common.exceptions.AlreadyExistsException;
28  import org.kuali.student.r2.common.exceptions.DataValidationErrorException;
29  import org.kuali.student.r2.common.exceptions.DependentObjectsExistException;
30  import org.kuali.student.r2.common.exceptions.DoesNotExistException;
31  import org.kuali.student.r2.common.exceptions.InvalidParameterException;
32  import org.kuali.student.r2.common.exceptions.MissingParameterException;
33  import org.kuali.student.r2.common.exceptions.OperationFailedException;
34  import org.kuali.student.r2.common.exceptions.VersionMismatchException;
35  import org.kuali.student.r2.common.search.service.SearchService;
36  import org.kuali.student.r2.lum.util.constants.LrcServiceConstants;
37  import org.kuali.student.r2.lum.lrc.dto.ResultValuesGroupInfo;
38  import org.kuali.student.r2.lum.lrc.dto.ResultScaleInfo;
39  import org.kuali.student.r2.lum.lrc.dto.ResultValueInfo;
40  
41  /**
42   * The Learning Result Catalog Service is a Class I service which
43   * gives a set of operations to manage a learning result. A learning
44   * result can be of various types e.g grades, credits etc. This
45   * service has basic CRUD operations to touch various concepts that
46   * exist to model learning results e.g Result Value, Result Value
47   * Group, and Result Value Range.
48   *
49   * @Author sambit
50   * @Since Tue May 10 14:09:46 PDT 2011
51   */
52  @WebService(name = "LrcService", targetNamespace = LrcServiceConstants.NAMESPACE)
53  @SOAPBinding(style = SOAPBinding.Style.DOCUMENT, use = SOAPBinding.Use.LITERAL, parameterStyle = SOAPBinding.ParameterStyle.WRAPPED)
54  public interface LRCService extends LrcServiceBusinessLogic, SearchService {
55  
56      /**
57       * Retrieves existing result values group by an identifier.
58       *
59       * @param resultValuesGroupKey identifiers for resultValuesGroup to be retrieved
60       * @param contextInfo Context information containing the principalId
61       *                and locale information about the caller of service
62       *                operation     
63       * @return details of the results for these Ids
64       * @throws DoesNotExistException  resultValuesGroupKey not found
65       * @throws InvalidParameterException invalid resultValuesGroupKey
66       * @throws MissingParameterException invalid resultValuesGroupKey
67       * @throws OperationFailedException  unable to complete request
68       * @throws PermissionDeniedException authorization failure
69       */
70      public ResultValuesGroupInfo getResultValuesGroup(@WebParam(name = "resultValuesGroupKey") String resultValuesGroupKey,
71                                                        @WebParam(name = "contextInfo") ContextInfo contextInfo)
72              throws DoesNotExistException,
73              InvalidParameterException,
74              MissingParameterException,
75              OperationFailedException,
76              PermissionDeniedException;
77  
78      /**
79       * Retrieves result values groups by a list of identifiers.
80       *
81       * @param resultValuesGroupKeys  identifiers for result values group
82       * @param contextInfo Context information containing the principalId
83       *                and locale information about the caller of service
84       *                operation     
85       * @return result values group list
86       * @throws DoesNotExistException resultValuesGroup not found
87       * @throws InvalidParameterException invalid resultValuesGroupKeys
88       * @throws MissingParameterException invalid resultValuesGroupKeys
89       * @throws OperationFailedException unable to complete request
90       * @throws PermissionDeniedException authorization failure
91       */
92      public List<ResultValuesGroupInfo> getResultValuesGroupsByKeys(@WebParam(name = "resultValuesGroupKeys") List<String> resultValuesGroupKeys,
93                                                                     @WebParam(name = "contextInfo") ContextInfo contextInfo)
94              throws DoesNotExistException,
95              InvalidParameterException,
96              MissingParameterException,
97              OperationFailedException,
98              PermissionDeniedException;
99  
100     /**
101      * Retrieves a list of existing result values groups that a result value is tied to.
102      *
103      * @param resultValueKey identifier for result value
104      * @param contextInfo Context information containing the principalId
105      *                and locale information about the caller of service
106      *                operation
107      * @return details of the results for these keys
108      * @throws DoesNotExistException resultValue not found
109      * @throws InvalidParameterException invalid resultValueKey
110      * @throws MissingParameterException invalid resultValueKey
111      * @throws OperationFailedException unable to complete request
112      * @throws PermissionDeniedException authorization failure
113      */
114     public List<ResultValuesGroupInfo> getResultValuesGroupsByResultValue(@WebParam(name = "resultValueKey") String resultValueKey,
115                                                                           @WebParam(name = "contextInfo") ContextInfo contextInfo)
116             throws DoesNotExistException,
117             InvalidParameterException,
118             MissingParameterException,
119             OperationFailedException,
120             PermissionDeniedException;
121 
122     /**
123      * Retrieves a list of existing result values groups that a result scale is tied to.
124      *
125      * @param resultScaleKey identifier for result scale
126      * @param contextInfo Context information containing the principalId
127      *                and locale information about the caller of service
128      *                operation
129      * @return details of the results for these keys
130      * @throws DoesNotExistException resultValue not found
131      * @throws InvalidParameterException invalid resultValueKey
132      * @throws MissingParameterException invalid resultValueKey
133      * @throws OperationFailedException unable to complete request
134      * @throws PermissionDeniedException authorization failure
135      */
136     public List<ResultValuesGroupInfo> getResultValuesGroupsByResultScale(@WebParam(name = "resultScaleKey") String resultScaleKey,
137                                                                           @WebParam(name = "contextInfo") ContextInfo contextInfo)
138             throws DoesNotExistException,
139             InvalidParameterException,
140             MissingParameterException,
141             OperationFailedException,
142             PermissionDeniedException;
143 
144     /**
145      * Retrieves a list of result group identifiers for a specified
146      * result values group type.
147      *
148      * @param resultValuesGroupTypeKey identifier for the result group type
149      * @param contextInfo Context information containing the principalId
150      *                and locale information about the caller of service
151      *                operation     
152      * @return list of result group identifiers
153      * @throws DoesNotExistException resultValuesGroupTypeKey not found
154      * @throws InvalidParameterException invalid resultValuesGroupTypeKey
155      * @throws MissingParameterException missing resultValuesGroupTypeKey
156      * @throws OperationFailedException unable to complete request
157      * @throws PermissionDeniedException authorization failure     
158      */
159     public List<String> getResultValuesGroupKeysByType(@WebParam(name = "resultValuesGroupTypeKey") String resultValuesGroupTypeKey,
160                                                        @WebParam(name = "contextInfo") ContextInfo contextInfo)
161             throws DoesNotExistException,
162             InvalidParameterException,
163             MissingParameterException,
164             OperationFailedException,
165             PermissionDeniedException;
166 
167     /**
168      * Creates a new result Values Group.
169      *
170      * @param resultValuesGroupInfo information about the result values group 
171      *        being created
172      * @param contextInfo Context information containing the principalId
173      *                and locale information about the caller of service
174      *                operation     
175      * @return create result values group information
176      * @throws AlreadyExistsException result values group already exists
177      * @throws DataValidationErrorException one or more values invalid for 
178      *         this operation
179      * @throws InvalidParameterException invalid resultValuesGroupInfo
180      * @throws MissingParameterException missing resultValuesGroupInfo
181      * @throws OperationFailedException unable to complete request
182      * @throws PermissionDeniedException authorization failure
183      */
184     public ResultValuesGroupInfo createResultValuesGroup(
185             @WebParam(name = "resultScaleKey") String resultScaleKey,
186             @WebParam(name = "resultValuesGroupTypeKey") String resultValuesGroupTypeKey,
187             @WebParam(name = "resultGroupInfo") ResultValuesGroupInfo resultValuesGroupInfo,
188             @WebParam(name = "contextInfo") ContextInfo contextInfo)
189             throws AlreadyExistsException,
190             DataValidationErrorException,
191             InvalidParameterException,
192             MissingParameterException,
193             OperationFailedException,
194             PermissionDeniedException;
195 
196     /**
197      * Updates an existing result values group.
198      *
199      * @param resultValuesGroupKey identifier of the result values group to update
200      * @param resultGroupInfo updated information about the result values group
201      * @param contextInfo Context information containing the principalId
202      *                and locale information about the caller of service
203      *                operation     
204      * @return updated result values group information
205      * @throws DataValidationErrorException one or more values invalid for 
206      *                                      this operation
207      * @throws DoesNotExistException resultValuesGroupKey not found
208      * @throws InvalidParameterExceptioninvalid resultValuesGroupKey or 
209      *                                          resultValuesGroupInfo
210      * @throws MissingParameterException missing resultValuesGroupKey or
211      *                                   resultValuesGroupInfo
212      * @throws OperationFailedException unable to complete request
213      * @throws PermissionDeniedException authorization failure
214      * @throws VersionMismatchException action was attempted on an out of 
215      *                                  date version
216      */
217     public ResultValuesGroupInfo updateResultValuesGroup(@WebParam(name = "resultValuesGroupKey") String resultValuesGroupKey,
218                                                          @WebParam(name = "resultValuesGroupInfo") ResultValuesGroupInfo gradeValuesGroupInfo,
219                                                          @WebParam(name = "contextInfo") ContextInfo contextInfo)
220             throws DataValidationErrorException,
221             DoesNotExistException,
222             InvalidParameterException,
223             MissingParameterException,
224             OperationFailedException,
225             PermissionDeniedException,
226             VersionMismatchException;
227 
228     /**
229      * Deletes an existing result values group.
230      *
231      * @param resultValuesGroupKey identifier of the result values group to update
232      * @param contextInfo Context information containing the principalId
233      *                and locale information about the caller of service
234      *                operation     
235      * @return status of the operation
236      * @throws DoesNotExistException resultValuesGroupKey not found
237      * @throws InvalidParameterException invalid resultValuesGroupKey
238      * @throws MissingParameterException missing resultValuesGroupKey
239      * @throws OperationFailedException unable to complete request
240      * @throws PermissionDeniedException authorization failure
241      */
242     public StatusInfo deleteResultValuesGroup(@WebParam(name = "resultValuesGroupKey") String resultValuesGroupKey,
243                                               @WebParam(name = "contextInfo") ContextInfo contextInfo)
244             throws DoesNotExistException,
245             InvalidParameterException,
246             MissingParameterException,
247             OperationFailedException,
248             PermissionDeniedException;
249 
250     /**
251      * Validates a result values group. Depending on the value of
252      * validationType, this validation could be limited to tests on
253      * just the current object and its directly contained sub-objects
254      * or expanded to perform all tests related to this object. 
255      *
256      * @param validationType Identifier of the extent of validation
257      * @param gradeValuesGroupInfo Result values group to be validated
258      * @param contextInfo Context information containing the principalId
259      *                and locale information about the caller of service
260      *                operation
261      * @return
262      * @throws DoesNotExistException resultValuesGroupInfo does not exist
263      * @throws InvalidParameterException validationType or 
264      *                                   resultValuesGroupInfo does not exist
265      * @throws MissingParameterException missing validationType, resultValuesGroupInfo
266      * @throws OperationFailedException unable to complete request
267      */
268     public List<ValidationResultInfo> validateResultValuesGroup(@WebParam(name = "validationType") String validationType,
269                                                                 @WebParam(name = "resultGroupInfo") ResultValuesGroupInfo gradeValuesGroupInfo,
270                                                                 @WebParam(name = "contextInfo") ContextInfo contextInfo)
271             throws DoesNotExistException,
272             InvalidParameterException,
273             MissingParameterException,
274             OperationFailedException;
275 
276     /**
277      * Get or create a new result values group holding the specified number of credits
278      *
279      * The resulting RVG should have a type of FIXED
280      *
281      * May also create the corresponding credit value.
282      *
283      * @param creditValue the credit value to be found/created
284      * @param scaleKey the scale associated with this type of credit (regular or remedial or continuing ed, etc)
285      * @param contextInfo Context information containing the principalId
286      *                and locale information about the caller of service
287      *                operation     
288      * @return create result values group information
289      * @throws AlreadyExistsException result values group already exists
290      * @throws DataValidationErrorException one or more values invalid for 
291      *         this operation
292      * @throws InvalidParameterException invalid resultValuesGroupInfo
293      * @throws MissingParameterException missing resultValuesGroupInfo
294      * @throws OperationFailedException unable to complete request
295      * @throws PermissionDeniedException authorization failure
296      * @impl the parameters hold string representations of floating points to avoid rounding issues
297      */
298     @Override
299     public ResultValuesGroupInfo getCreateFixedCreditResultValuesGroup(@WebParam(name = "creditValue") String creditValue,
300                                                                        @WebParam(name = "scaleKey") String scaleKey,
301                                                                        @WebParam(name = "contextInfo") ContextInfo contextInfo)
302             throws InvalidParameterException,
303             MissingParameterException,
304             OperationFailedException,
305             PermissionDeniedException;
306 
307     /**
308      * Get or create a new result values group holding the specified number of credits
309      *
310      * The resulting RVG will have a type of RANGE
311      *
312      * @param creditValueMin the minimum credit value of the range to be found/created
313      * @param creditValueMax the maximum credit value to be found/created
314      * @param creditValueIncrement the credit value increment of the range to be found/created
315      * @param scaleKey the scale associated with this type of credit (regular or remedial or continuing ed, etc)
316      * @param contextInfo Context information containing the principalId
317      *                and locale information about the caller of service
318      *                operation     
319      * @return create result values group information
320      * @throws AlreadyExistsException result values group already exists
321      * @throws DataValidationErrorException one or more values invalid for 
322      *         this operation
323      * @throws InvalidParameterException invalid resultValuesGroupInfo
324      * @throws MissingParameterException missing resultValuesGroupInfo
325      * @throws OperationFailedException unable to complete request
326      * @throws PermissionDeniedException authorization failure
327      * @impl the parameters hold string representations of floating points to avoid rounding issues
328      */
329     @Override
330     public ResultValuesGroupInfo getCreateRangeCreditResultValuesGroup(@WebParam(name = "creditValueMin") String creditValueMin,
331                                                                        @WebParam(name = "creditValueMax") String creditValueMax,
332                                                                        @WebParam(name = "creditValueIncrement") String creditValueIncrement,
333                                                                        @WebParam(name = "scaleKey") String scaleKey,
334                                                                        @WebParam(name = "contextInfo") ContextInfo contextInfo)
335             throws InvalidParameterException,
336             MissingParameterException,
337             OperationFailedException,
338             PermissionDeniedException;
339 
340     /**
341      * Get or create a new result values group holding the specified number of credits
342      *
343      * The resulting RVG should have the type of MULTIPLE
344      *
345      * @param creditValues the minimum credit value of the range to be found/created
346      * @param scaleKey the scale associated with this type of credit (regular or remedial or continuing ed, etc)
347      * @param contextInfo Context information containing the principalId
348      *                and locale information about the caller of service
349      *                operation     
350      * @return create result values group information
351      * @throws AlreadyExistsException result values group already exists
352      * @throws DataValidationErrorException one or more values invalid for 
353      *         this operation
354      * @throws InvalidParameterException invalid resultValuesGroupInfo
355      * @throws MissingParameterException missing resultValuesGroupInfo
356      * @throws OperationFailedException unable to complete request
357      * @throws PermissionDeniedException authorization failure
358      * @impl the parameters hold string representations of floating points to avoid rounding issues
359      */
360     @Override
361     public ResultValuesGroupInfo getCreateMultipleCreditResultValuesGroup(@WebParam(name = "creditValues") List<String> creditValues,
362                                                                           @WebParam(name = "scaleKey") String scaleKey,
363                                                                           @WebParam(name = "contextInfo") ContextInfo contextInfo)
364             throws InvalidParameterException,
365             MissingParameterException,
366             OperationFailedException,
367             PermissionDeniedException;
368 
369     /**
370      * Retrieves result value by its id.
371      *
372      * @param resultValueKey identifier for the result
373      * @param contextInfo Context information containing the principalId
374      *                and locale information about the caller of service
375      *                operation      
376      * @return details about a result value
377      * @throws DoesNotExistException the resultValueKey is not found
378      * @throws InvalidParameterException invalid resultValueKey
379      * @throws MissingParameterException missing parameter
380      * @throws OperationFailedException unable to complete request
381      * @throws PermissionDeniedException authorization failure 
382      */
383     public ResultValueInfo getResultValue(@WebParam(name = "resultValueKey") String resultValueKey,
384                                           @WebParam(name = "contextInfo") ContextInfo contextInfo)
385             throws DoesNotExistException,
386             InvalidParameterException,
387             MissingParameterException,
388             OperationFailedException,
389             PermissionDeniedException;
390 
391     /**
392      * Retrieves a list of result value objects for a list of identifiers. 
393      *
394      * @param resultValueKeys identifier for the result
395      * @param contextInfo Context information containing the principalId
396      *                and locale information about the caller of service
397      *                operation      
398      * @return list of result group identifiers
399      * @throws DoesNotExistException a resultValueKey from the list is not found
400      * @throws InvalidParameterException invalid resultValueKeys
401      * @throws MissingParameterException missing resultValueKeys
402      * @throws OperationFailedException unable to complete request
403      * @throws PermissionDeniedException authorization failure 
404      */
405     public List<ResultValueInfo> getResultValuesByKeys(@WebParam(name = "resultValueKeys") List<String> resultValueKeys,
406                                                        @WebParam(name = "contextInfo") ContextInfo contextInfo)
407             throws DoesNotExistException,
408             InvalidParameterException,
409             MissingParameterException,
410             OperationFailedException,
411             PermissionDeniedException;
412 
413     /**
414      * Retrieves a list of result values by type.
415      *
416      * @param resultValueTypeKey identifier for the result group type
417      * @param contextInfo Context information containing the principalId
418      *                and locale information about the caller of service
419      *                operation     
420      * @return list of result group identifiers
421      * @throws DoesNotExistException resultValueTypeKey not found
422      * @throws InvalidParameterException invalid resultValueTypeKey
423      * @throws MissingParameterException missing resultValueTypeKey
424      * @throws OperationFailedException unable to complete request
425      * @throws PermissionDeniedException authorization failure     
426      */
427     public List<String> getResultValueKeysByType(@WebParam(name = "resultValueTypeKey") String resultValueTypeKey,
428                                                  @WebParam(name = "contextInfo") ContextInfo contextInfo)
429             throws DoesNotExistException,
430             InvalidParameterException,
431             MissingParameterException,
432             OperationFailedException,
433             PermissionDeniedException;
434 
435     /**
436      * Retrieves a list of result value objects for a specified result
437      * values group. It is sorted by the scale inside the values group.
438      *
439      * @param resultValuesGroupKey identifier for the result values group
440      * @param contextInfo Context information containing the principalId
441      *                and locale information about the caller of service
442      *                operation     
443      * @return list of result group identifiers
444      * @throws DoesNotExistException resultValueKey not found
445      * @throws InvalidParameterException invalid resultValuesGroupKey
446      * @throws MissingParameterException missing resultValuesGroupKey
447      * @throws OperationFailedException unable to complete request
448      * @throws PermissionDeniedException authorization failure     
449      */
450     public List<ResultValueInfo> getResultValuesForResultValuesGroup(@WebParam(name = "resultValuesGroupKey") String resultValuesGroupKey,
451                                                                      @WebParam(name = "contextInfo") ContextInfo contextInfo)
452             throws DoesNotExistException,
453             InvalidParameterException,
454             MissingParameterException,
455             OperationFailedException,
456             PermissionDeniedException;
457 
458     /**
459      * Create a new result value 
460      * @param resultScaleKey scale to which this value is attached
461      * @param resultValueTypeKey type of the result value to be created
462      * @param resultValueInfo  info about the result value
463      * @param contextInfo Context information containing the principalId
464      *                and locale information about the caller of service
465      *                operation     
466      * @return newly created resultValue
467      * @throws AlreadyExistsException resultValue already exists
468      * @throws DataValidationErrorException one or more values invalid for 
469      *                                      this operation 
470      * @throws InvalidParameterException invalid resultValueInfo
471      * @throws MissingParameterException missing resultValueInfo
472      * @throws OperationFailedException unable to complete request
473      * @throws PermissionDeniedException authorization failure
474      */
475     public ResultValueInfo createResultValue(
476             @WebParam(name = "resultScaleKey") String resultScaleKey,
477             @WebParam(name = "resultValueTypeKey") String resultValueTypeKey,
478             @WebParam(name = "resultValueInfo") ResultValueInfo resultValueInfo,
479             @WebParam(name = "contextInfo") ContextInfo contextInfo)
480             throws AlreadyExistsException,
481             DataValidationErrorException,
482             DoesNotExistException,
483             InvalidParameterException,
484             MissingParameterException,
485             OperationFailedException,
486             PermissionDeniedException;
487 
488     /**
489      * Update a result value
490      * @param resultValueKey resultValueKey to be updated
491      * @param resultValueInfo update information for the result value
492      * @param contextInfo Context information containing the principalId
493      *                and locale information about the caller of service
494      *                operation     
495      * @return updated information about the result value
496      * @throws DataValidationErrorException one or more values invalid for 
497      *                                      this operation
498      * @throws DoesNotExistException resultValueKey does not exist
499      * @throws InvalidParameterException invalid resultValueKey, resultValueInfo
500      * @throws MissingParameterException missing resultValueKey, resultValueInfo
501      * @throws OperationFailedException unable to complete request
502      * @throws PermissionDeniedException authorization failure
503      * @throws VersionMismatchException action was attempted on an out of 
504      *                                  date version
505      */
506     public ResultValueInfo updateResultValue(@WebParam(name = "resultValueKey") String resultValueKey,
507                                              @WebParam(name = "resultValueInfo") ResultValueInfo resultValueInfo,
508                                              @WebParam(name = "contextInfo") ContextInfo contextInfo)
509             throws DataValidationErrorException,
510             DoesNotExistException,
511             InvalidParameterException,
512             MissingParameterException,
513             OperationFailedException,
514             PermissionDeniedException,
515             VersionMismatchException;
516 
517     /**
518      * Delete a result value. This should not be allowed if any result values group is still referencing the result value.
519      * @param resultValueKey result value to be deleted
520      * @param contextInfo Context information containing the principalId
521      *                and locale information about the caller of service
522      *                operation
523      * @return status of the delete operation
524      * @throws DoesNotExistException resultValueKey does not exist
525      * @throws DependentObjectsExistException if a group is tied to this value
526      * @throws InvalidParameterException  invalid resultValueKey
527      * @throws MissingParameterException missing resultValueKey
528      * @throws OperationFailedException unable to complete request
529      * @throws PermissionDeniedException authorization failure
530      */
531     public StatusInfo deleteResultValue(@WebParam(name = "resultValueKey") String resultValueKey,
532                                         @WebParam(name = "contextInfo") ContextInfo contextInfo)
533             throws DoesNotExistException,
534             DependentObjectsExistException,
535             InvalidParameterException,
536             MissingParameterException,
537             OperationFailedException,
538             PermissionDeniedException;
539 
540     /**
541      * Validates a Result Value. Depending on the value of
542      * validationType, this validation could be limited to tests on
543      * just the current object and its directly contained subobjects
544      * or expanded to perform all tests related to this object. If an
545      * identifier is present for the academic calendar and a record
546      * is found for that identifier, the validation checks if the
547      * academic calendar can be shifted to the new values. If a
548      * record cannot be found for the identifier, it is assumed that
549      * the record does not exist and as such, the checks performed
550      * will be much shallower, typically mimicking those performed by
551      * setting the validationType to the current object. This is a
552      * slightly different pattern from the standard validation as the
553      * caller provides the identifier in the create statement instead
554      * of the server assigning an identifier.
555      *
556      * @param validationType  Identifier of the extent of validation
557      * @param resultValueInfo Result value to be validated
558      * @param contextInfo Context information containing the principalId
559      *                and locale information about the caller of service
560      *                operation
561      * @return a ValidationResultInfo
562      * @throws DoesNotExistException resultValueInfo does not exist
563      * @throws InvalidParameterException validationType or resultValueInfo 
564      *                                   does not exist
565      * @throws MissingParameterException missing validationType or resultValueInfo
566      * @throws OperationFailedException unable to complete request
567      */
568     public List<ValidationResultInfo> validateResultValue(@WebParam(name = "validationType") String validationType,
569                                                           @WebParam(name = "resultValueInfo") ResultValueInfo resultValueInfo,
570                                                           @WebParam(name = "contextInfo") ContextInfo contextInfo)
571             throws DoesNotExistException,
572             InvalidParameterException,
573             MissingParameterException,
574             OperationFailedException;
575 
576     /**
577      * Get or create a new result value holding the specified numeric value within the range
578      *
579      * The resulting result value should be attached to the specified group and must be within 
580      * the range of the group
581      *
582      * @param resultValue the result value within the specified group range to be found/created
583      * @param scaleKey the with associated with this value
584      * @param contextInfo Context information containing the principalId
585      *                and locale information about the caller of service
586      *                operation     
587      * @return the result value group information
588      * @throws InvalidParameterException invalid scaleKey or scaleKey is not a range
589      * @throws MissingParameterException missing resultValuesGroupInfo
590      * @throws OperationFailedException unable to complete request
591      * @throws PermissionDeniedException authorization failure
592      * @impl the parameters hold string representations of floating points to avoid rounding issues
593      */
594     @Override
595     public ResultValueInfo getCreateResultValueForScale(@WebParam(name = "resultValue") String resultValue,
596                                                         @WebParam(name = "scaleKey") String scaleKey,
597                                                         @WebParam(name = "contextInfo") ContextInfo contextInfo)
598             throws InvalidParameterException,
599             MissingParameterException,
600             OperationFailedException,
601             PermissionDeniedException;
602 
603     /**
604      * Retrieves result scale by an identifier.
605      *
606      * @param resultScaleKey identifiers for result scale to be retrieved
607      * @param contextInfo Context information containing the principalId
608      *                and locale information about the caller of service
609      *                operation     
610      * @return details of the result scale for the id
611      * @throws DoesNotExistException  resultValuesGroupKey not found
612      * @throws InvalidParameterException invalid resultValuesGroupKey
613      * @throws MissingParameterException invalid resultValuesGroupKey
614      * @throws OperationFailedException unable to complete request
615      * @throws PermissionDeniedException authorization failure
616      */
617     public ResultScaleInfo getResultScale(@WebParam(name = "resultScaleKey") String resultScaleKey,
618                                           @WebParam(name = "contextInfo") ContextInfo contextInfo)
619             throws DoesNotExistException,
620             InvalidParameterException,
621             MissingParameterException,
622             OperationFailedException,
623             PermissionDeniedException;
624 
625     /**
626      * Retrieves result scales by a list of identifiers.
627      *
628      * @param resultScaleKeys  identifiers for result scale
629      * @param contextInfo Context information containing the principalId
630      *                and locale information about the caller of service
631      *                operation     
632      * @return result scale list
633      * @throws DoesNotExistException resultScale not found
634      * @throws InvalidParameterException invalid resultScaleKeys
635      * @throws MissingParameterException invalid resultScaleKeys
636      * @throws OperationFailedException unable to complete request
637      * @throws PermissionDeniedException authorization failure
638      */
639     public List<ResultScaleInfo> getResultScalesByKeys(@WebParam(name = "resultScaleKeys") List<String> resultScaleKeys,
640                                                        @WebParam(name = "contextInfo") ContextInfo contextInfo)
641             throws DoesNotExistException,
642             InvalidParameterException,
643             MissingParameterException,
644             OperationFailedException,
645             PermissionDeniedException;
646 
647     /**
648      * Retrieves a list of result group identifiers for a specified
649      * result scale type.
650      *
651      * @param resultScaleTypeKey identifier for the result group type
652      * @param contextInfo Context information containing the principalId
653      *                and locale information about the caller of service
654      *                operation     
655      * @return list of result group identifiers
656      * @throws DoesNotExistException resultScaleTypeKey not found
657      * @throws InvalidParameterException invalid resultScaleTypeKey
658      * @throws MissingParameterException missing resultScaleTypeKey
659      * @throws OperationFailedException unable to complete request
660      * @throws PermissionDeniedException authorization failure     
661      */
662     public List<String> getResultScaleKeysByType(@WebParam(name = "resultScaleTypeKey") String resultScaleTypeKey,
663                                                  @WebParam(name = "contextInfo") ContextInfo contextInfo)
664             throws DoesNotExistException,
665             InvalidParameterException,
666             MissingParameterException,
667             OperationFailedException,
668             PermissionDeniedException;
669 
670     /**
671      * Creates a new result scale.
672      *
673      * @param resultScaleTypeKey type key of the result scale
674      * @param resultScaleInfo information about the result scale 
675      *        being created
676      * @param contextInfo Context information containing the principalId
677      *                and locale information about the caller of service
678      *                operation     
679      * @return create result scale information
680      * @throws AlreadyExistsException result scale already exists
681      * @throws DataValidationErrorException one or more values invalid for 
682      *         this operation
683      * @throws InvalidParameterException invalid resultScaleInfo
684      * @throws MissingParameterException missing resultScaleInfo
685      * @throws OperationFailedException unable to complete request
686      * @throws PermissionDeniedException authorization failure
687      */
688     public ResultScaleInfo createResultScale(@WebParam(name = "resultScaleTypeKey") String resultScaleTypeKey,
689                                              @WebParam(name = "resultGroupInfo") ResultScaleInfo resultScaleInfo,
690                                              @WebParam(name = "contextInfo") ContextInfo contextInfo)
691             throws AlreadyExistsException,
692             DataValidationErrorException,
693             InvalidParameterException,
694             MissingParameterException,
695             OperationFailedException,
696             PermissionDeniedException;
697 
698     /**
699      * Updates an existing result scale.
700      *
701      * @param resultScaleKey identifier of the result scale to update
702      * @param resultGroupInfo updated information about the result scale
703      * @param contextInfo Context information containing the principalId
704      *                and locale information about the caller of service
705      *                operation     
706      * @return updated result scale information
707      * @throws DataValidationErrorException one or more values invalid for 
708      *                                      this operation
709      * @throws DoesNotExistException resultScaleKey not found
710      * @throws InvalidParameterExceptioninvalid resultScaleKey or 
711      *                                          resultScaleInfo
712      * @throws MissingParameterException missing resultScaleKey or
713      *                                   resultScaleInfo
714      * @throws OperationFailedException unable to complete request
715      * @throws PermissionDeniedException authorization failure
716      * @throws VersionMismatchException action was attempted on an out of 
717      *                                  date version
718      */
719     public ResultScaleInfo updateResultScale(@WebParam(name = "resultScaleKey") String resultScaleKey,
720                                              @WebParam(name = "resultScaleInfo") ResultScaleInfo resultScaleInfo,
721                                              @WebParam(name = "contextInfo") ContextInfo contextInfo)
722             throws DataValidationErrorException,
723             DoesNotExistException,
724             InvalidParameterException,
725             MissingParameterException,
726             OperationFailedException,
727             PermissionDeniedException,
728             VersionMismatchException;
729 
730     /**
731      * Deletes an existing result scale.
732      *
733      * @param resultScaleKey identifier of the result scale to update
734      * @param contextInfo Context information containing the principalId
735      *                and locale information about the caller of service
736      *                operation     
737      * @return status of the operation
738      * @throws DoesNotExistException resultScaleKey not found
739      * @throws DependentObjectsExistException if a group or value exists for this scale
740      * @throws InvalidParameterException invalid resultScaleKey
741      * @throws MissingParameterException missing resultScaleKey
742      * @throws OperationFailedException unable to complete request
743      * @throws PermissionDeniedException authorization failure
744      */
745     public StatusInfo deleteResultScale(@WebParam(name = "resultScaleKey") String resultScaleKey,
746                                         @WebParam(name = "contextInfo") ContextInfo contextInfo)
747             throws DoesNotExistException,
748             DependentObjectsExistException,
749             InvalidParameterException,
750             MissingParameterException,
751             OperationFailedException,
752             PermissionDeniedException;
753 
754     /**
755      * Validates a result scale. Depending on the value of
756      * validationType, this validation could be limited to tests on
757      * just the current object and its directly contained sub-objects
758      * or expanded to perform all tests related to this object. 
759      *
760      * @param validationType Identifier of the extent of validation
761      * @param gradeScaleInfo Result scale to be validated
762      * @param contextInfo Context information containing the principalId
763      *                and locale information about the caller of service
764      *                operation
765      * @return
766      * @throws DoesNotExistException resultScaleInfo does not exist
767      * @throws InvalidParameterException validationType or 
768      *                                   resultScaleInfo does not exist
769      * @throws MissingParameterException missing validationType, resultScaleInfo
770      * @throws OperationFailedException unable to complete request
771      */
772     public List<ValidationResultInfo> validateResultScale(@WebParam(name = "validationType") String validationType,
773                                                           @WebParam(name = "gradeScaleInfo") ResultScaleInfo gradeScaleInfo,
774                                                           @WebParam(name = "contextInfo") ContextInfo contextInfo)
775             throws DoesNotExistException,
776             InvalidParameterException,
777             MissingParameterException,
778             OperationFailedException;
779 
780     /**
781      * Retrieves result values by result scale key.
782      *
783      * @param resultScaleKey key to the scale 
784      * @param contextInfo Context information containing the principalId
785      *                and locale information about the caller of service
786      *                operation
787      * @return a list of result values for the scale
788      * @throws DoesNotExistException resultScaleKey is not found
789      * @throws InvalidParameterException invalid resultScaleKey
790      * @throws MissingParameterException null resultScaleKey
791      * @throws OperationFailedException unable to complete request
792      * @throws PermissionDeniedException authorization failure
793      */
794     public List<ResultValueInfo> getResultValuesForScale(@WebParam(name = "resultScaleKey") String resultScaleKey,
795                                                          @WebParam(name = "contextInfo") ContextInfo contextInfo)
796             throws DoesNotExistException,
797             InvalidParameterException,
798             MissingParameterException,
799             OperationFailedException,
800             PermissionDeniedException;
801 
802     /**
803      * Retrieves a result value by result scale key and value
804      *
805      * @param resultScaleKey key to the scale
806      * @param value the specific value
807      * @param contextInfo Context information containing the principalId
808      *                and locale information about the caller of service
809      *                operation
810      * @return the matching Result Value
811      * @throws DoesNotExistException resultScaleKey is not found
812      * @throws InvalidParameterException invalid resultScaleKey
813      * @throws MissingParameterException null resultScaleKey
814      * @throws OperationFailedException unable to complete request
815      * @throws PermissionDeniedException authorization failure
816      */
817     public ResultValueInfo getResultValueForScaleAndValue(@WebParam(name = "resultScaleKey") String resultScaleKey,
818                                                           @WebParam(name = "value") String value,
819                                                           @WebParam(name = "contextInfo") ContextInfo contextInfo)
820             throws DoesNotExistException,
821             InvalidParameterException,
822             MissingParameterException,
823             OperationFailedException,
824             PermissionDeniedException;
825 
826     /**
827      * Retrieves result values for the list of Result values groups.
828      *
829      * No values are selected for groups that are RANGES.
830      *
831      * @param resultValuesGroupKeys list of result value groups for which to return values
832      * @param contextInfo Context information containing the principalId
833      *                and locale information about the caller of service
834      *                operation
835      * @return a list of unique result values for that set of groups
836      * @throws DoesNotExistException resultScaleKey is not found
837      * @throws InvalidParameterException invalid resultScaleKey
838      * @throws MissingParameterException null resultScaleKey
839      * @throws OperationFailedException unable to complete request
840      * @throws PermissionDeniedException authorization failure
841      */
842     public List<ResultValueInfo> getResultValuesForResultValuesGroups(@WebParam(name = "resultValuesGroupKeys") List<String> resultValuesGroupKeys,
843                                                                       @WebParam(name = "contextInfo") ContextInfo contextInfo)
844             throws DoesNotExistException,
845             InvalidParameterException,
846             MissingParameterException,
847             OperationFailedException,
848             PermissionDeniedException;
849 
850     /**
851      * Retrieves a list of existing result values groups that have a scale
852      * of the specified type.
853      *
854      * @param resultScaleTypeKey identifier for result scale type key
855      * @param contextInfo Context information containing the principalId
856      *                and locale information about the caller of service
857      *                operation
858      * @return details of the results for these keys
859      * @throws DoesNotExistException resultValue not found
860      * @throws InvalidParameterException invalid resultValueKey
861      * @throws MissingParameterException invalid resultValueKey
862      * @throws OperationFailedException unable to complete request
863      * @throws PermissionDeniedException authorization failure
864      */
865     public List<ResultValuesGroupInfo> getResultValuesGroupsByResultScaleType(@WebParam(name = "resultScaleTypeKey") String resultScaleTypeKey,
866                                                                               @WebParam(name = "contextInfo") ContextInfo contextInfo)
867             throws DoesNotExistException,
868             InvalidParameterException,
869             MissingParameterException,
870             OperationFailedException,
871             PermissionDeniedException;
872     
873      
874     /**
875      * Searches for result scale ids using a free form search criteria.
876      *
877      * @param criteria
878      * @param context
879      * @return
880      * @throws InvalidParameterException
881      * @throws MissingParameterException
882      * @throws OperationFailedException
883      * @throws PermissionDeniedException
884      */
885     public List<String> searchForResultScaleIds(@WebParam(name = "criteria") QueryByCriteria criteria,
886             @WebParam(name = "context") ContextInfo context) throws InvalidParameterException, MissingParameterException,
887             OperationFailedException, PermissionDeniedException;
888 
889     /**
890      * Searches for result scales using a free form search criteria
891      *
892      * @param criteria
893      * @param context
894      * @throws InvalidParameterException
895      * @throws MissingParameterException
896      * @throws OperationFailedException
897      * @throws PermissionDeniedException
898      */
899     public List<ResultScaleInfo> searchForResultScales(@WebParam(name = "criteria") QueryByCriteria criteria,
900             @WebParam(name = "context") ContextInfo context)  throws InvalidParameterException, MissingParameterException,
901             OperationFailedException,PermissionDeniedException;
902     
903     
904      
905     /**
906      * Searches for result value ids using a free form search criteria.
907      *
908      * @param criteria
909      * @param context
910      * @return
911      * @throws InvalidParameterException
912      * @throws MissingParameterException
913      * @throws OperationFailedException
914      * @throws PermissionDeniedException
915      */
916     public List<String> searchForResultValueIds(@WebParam(name = "criteria") QueryByCriteria criteria,
917             @WebParam(name = "context") ContextInfo context) throws InvalidParameterException, MissingParameterException,
918             OperationFailedException, PermissionDeniedException;
919 
920     /**
921      * Searches for result values using a free form search criteria
922      *
923      * @param criteria
924      * @param context
925      * @throws InvalidParameterException
926      * @throws MissingParameterException
927      * @throws OperationFailedException
928      * @throws PermissionDeniedException
929      */
930     public List<ResultValueInfo> searchForResultValues(@WebParam(name = "criteria") QueryByCriteria criteria,
931             @WebParam(name = "context") ContextInfo context)  throws InvalidParameterException, MissingParameterException,
932             OperationFailedException,PermissionDeniedException;
933     
934     
935      
936     /**
937      * Searches for result value group ids using a free form search criteria.
938      *
939      * @param criteria
940      * @param context
941      * @return
942      * @throws InvalidParameterException
943      * @throws MissingParameterException
944      * @throws OperationFailedException
945      * @throws PermissionDeniedException
946      */
947     public List<String> searchForResultValuesGroupIds(@WebParam(name = "criteria") QueryByCriteria criteria,
948             @WebParam(name = "context") ContextInfo context) throws InvalidParameterException, MissingParameterException,
949             OperationFailedException, PermissionDeniedException;
950 
951     /**
952      * Searches for result value groups using a free form search criteria
953      *
954      * @param criteria
955      * @param context
956      * @throws InvalidParameterException
957      * @throws MissingParameterException
958      * @throws OperationFailedException
959      * @throws PermissionDeniedException
960      */
961     public List<ResultValuesGroupInfo> searchForResultValuesGroups(@WebParam(name = "criteria") QueryByCriteria criteria,
962             @WebParam(name = "context") ContextInfo context)  throws InvalidParameterException, MissingParameterException,
963             OperationFailedException,PermissionDeniedException;
964     
965 }