View Javadoc

1   /**
2    * Copyright 2012 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    *
8    * http://www.osedu.org/licenses/ECL-2.0
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
13   * implied. See the License for the specific language governing
14   * permissions and limitations under the License.
15   */
16  
17  package org.kuali.student.core.rate.service;
18  
19  import java.util.List;
20  
21  import javax.jws.WebParam;
22  import javax.jws.WebService;
23  import javax.jws.soap.SOAPBinding;
24  
25  import org.kuali.rice.core.api.criteria.QueryByCriteria;
26  
27  import org.kuali.student.core.rate.dto.CatalogRateInfo;
28  import org.kuali.student.core.rate.dto.RateInfo;
29  
30  import org.kuali.student.r2.common.dto.ContextInfo;
31  import org.kuali.student.r2.common.dto.StatusInfo;
32  import org.kuali.student.r2.common.dto.ValidationResultInfo;
33  
34  import org.kuali.student.r2.common.exceptions.DataValidationErrorException;
35  import org.kuali.student.r2.common.exceptions.DependentObjectsExistException;
36  import org.kuali.student.r2.common.exceptions.DoesNotExistException;
37  import org.kuali.student.r2.common.exceptions.InvalidParameterException;
38  import org.kuali.student.r2.common.exceptions.MissingParameterException;
39  import org.kuali.student.r2.common.exceptions.OperationFailedException;
40  import org.kuali.student.r2.common.exceptions.PermissionDeniedException;
41  import org.kuali.student.r2.common.exceptions.ReadOnlyException;
42  import org.kuali.student.r2.common.exceptions.VersionMismatchException;
43  
44  /**
45   * This service supports the management of rates. The managed entities
46   * are:
47   *
48   * <dl>
49   * <dt>CatalogRate</dt> <dd>This is an "entry" in the rate catalog. The
50   *                      rate catalog represents a catalog of
51   *                      "canonical-like" rates. Approved catalog entries
52   *                      may be used to create a specific rate to an
53   *                      external object.</dd>
54   *
55   * <dt>Rate</dt> <dd>The actual rate associated with an external object. The
56   *               Rate is constrained by its related entry in the rate
57   *               catalog.</dd>
58   * </dl>
59   *
60   * @version 0.0.8
61   * @author Kuali Student Services
62   */
63  
64  @WebService(name = "RateService", serviceName = "RateService", portName = "RateService", targetNamespace = RateServiceNamespace.NAMESPACE)
65  @SOAPBinding(style = SOAPBinding.Style.DOCUMENT, use = SOAPBinding.Use.LITERAL, parameterStyle = SOAPBinding.ParameterStyle.WRAPPED)
66  
67  public interface RateService {
68  
69      /** 
70       * Retrieves a single CatalogRate by CatalogRate Id.
71       *
72       * @param catalogRateId the identifier for the rate to be retrieved
73       * @param contextInfo information containing the principalId and
74       *        locale information about the caller of service operation
75       * @return the CatalogRate requested
76       * @throws DoesNotExistException catalogRateId not found
77       * @throws InvalidParameterException contextInfo is not valid
78       * @throws MissingParameterException catalogRateId or contextInfo is
79       *         missing or null
80       * @throws OperationFailedException unable to complete request
81       * @throws PermissionDeniedException an authorization failure occurred
82       */
83      public CatalogRateInfo getCatalogRate(@WebParam(name = "catalogRateId") String catalogRateId, 
84                                            @WebParam(name = "contextInfo") ContextInfo contextInfo) 
85          throws DoesNotExistException, 
86                 InvalidParameterException, 
87                 MissingParameterException, 
88                 OperationFailedException, 
89                 PermissionDeniedException;
90  
91      /** 
92       * Retrieves a list of CatalogRates from a list of CatalogRate
93       * Ids. The returned list may be in any order and if duplicates
94       * Ids are supplied, a unique set may or may not be returned.
95       *
96       * @param catalogRateIds a list of CatalogRate identifiers
97       * @param contextInfo information containing the principalId and
98       *        locale information about the caller of service operation
99       * @return a list of CatalogRates
100      * @throws DoesNotExistException a catalogRateId in the list not found
101      * @throws InvalidParameterException contextInfo is invalid
102      * @throws MissingParameterException catalogRateIds, an Id in
103      *         catalogRateIds, or contextInfo is missing or null
104      * @throws OperationFailedException unable to complete request
105      * @throws PermissionDeniedException an authorization failure occurred
106      */
107     public List<CatalogRateInfo> getCatalogRatesByIds(@WebParam(name = "catalogRateIds") List<String> catalogRateIds, 
108                                                       @WebParam(name = "contextInfo") ContextInfo contextInfo) 
109         throws DoesNotExistException, 
110                InvalidParameterException, 
111                MissingParameterException, 
112                OperationFailedException, 
113                PermissionDeniedException;
114 
115     /** 
116      * Retrieves a list of CatalogRate Ids by CatalogRate Type.
117      *
118      * @param catalogRateTypeKey an identifier for a CatalogRate Type
119      * @param contextInfo information containing the principalId and
120      *        locale information about the caller of service operation
121      * @return a list of CatalogRate identifiers matching
122      *         catalogRateTypeKey or an empty list if none found
123      * @throws InvalidParameterException contextInfo is not valid
124      * @throws MissingParameterException catalogRateTypeKey or
125      *         contextInfo is missing or null
126      * @throws OperationFailedException unable to complete request
127      * @throws PermissionDeniedException an authorization failure occurred
128      */
129     public List<String> getCatalogRateIdsByType(@WebParam(name = "catalogRateTypeKey") String catalogRateTypeKey, 
130                                                 @WebParam(name = "contextInfo") ContextInfo contextInfo) 
131         throws InvalidParameterException, 
132                MissingParameterException, 
133                OperationFailedException, 
134                PermissionDeniedException;
135 
136     /** 
137      * Retrieves a list of CatalogRates by code.
138      *
139      * @param code a CatalogRate code
140      * @param contextInfo information containing the principalId and
141      *        locale information about the caller of service operation
142      * @return a list of CatalogRates
143      * @throws InvalidParameterException contextInfo is invalid
144      * @throws MissingParameterException code or contextInfo is
145      *         missing or null
146      * @throws OperationFailedException unable to complete request
147      * @throws PermissionDeniedException an authorization failure occurred
148      */
149     public List<CatalogRateInfo> getCatalogRatesByCode(@WebParam(name = "code") String code, 
150                                                        @WebParam(name = "contextInfo") ContextInfo contextInfo) 
151         throws InvalidParameterException, 
152                MissingParameterException, 
153                OperationFailedException, 
154                PermissionDeniedException;
155 
156     /**
157      * Searches for CatalogRates based on the criteria and returns a
158      * list of CatalogRate identifiers which match the search
159      * criteria.
160      *
161      * @param criteria the search criteria
162      * @param contextInfo information containing the principalId and
163      *        locale information about the caller of service operation
164      * @return list of CatalogRate Ids matching the criteria
165      * @throws InvalidParameterException criteria or contextInfo is
166      *         not valid
167      * @throws MissingParameterException criteria or contextInfo is
168      *         missing or null
169      * @throws OperationFailedException unable to complete request
170      * @throws PermissionDeniedException an authorization failure occurred
171      */
172     public List<String> searchForCatalogRateIds(@WebParam(name = "criteria") QueryByCriteria criteria, 
173                                                 @WebParam(name = "contextInfo") ContextInfo contextInfo) 
174         throws InvalidParameterException, 
175                MissingParameterException, 
176                OperationFailedException, 
177                PermissionDeniedException;
178 
179     /**
180      * Searches for CatalogRates based on the criteria and returns a
181      * list of CatalogRates which match the search criteria.
182      * 
183      * @param criteria the search criteria
184      * @param contextInfo information containing the principalId and
185      *        locale information about the caller of service operation
186      * @return list of CatalogRates matching the criteria
187      * @throws InvalidParameterException criteria or contextInfo is
188      *         not valid
189      * @throws MissingParameterException criteria or contextInfo is
190      *         missing or null
191      * @throws OperationFailedException unable to complete request
192      * @throws PermissionDeniedException an authorization failure occurred
193      */
194     public List<CatalogRateInfo> searchForCatalogRates(@WebParam(name = "criteria") QueryByCriteria criteria, 
195                                                        @WebParam(name = "contextInfo") ContextInfo contextInfo) 
196         throws InvalidParameterException, 
197                MissingParameterException, 
198                OperationFailedException, 
199                PermissionDeniedException;
200 
201     /** 
202      * Validates a CatalogRate. Depending on the value of
203      * validationType, this validation could be limited to tests on
204      * just the current CatalogRate and its directly contained
205      * sub-objects or expanded to perform all tests related to this
206      * CatalogRate. If an identifier is present for the CatalogRate
207      * (and/or one of its contained sub-objects) and a record is found
208      * for that identifier, the validation checks if the CatalogRate
209      * can be updated to the new values. If an identifier is not
210      * present or a record does not exist, the validation checks if
211      * the object with the given data can be created.
212      *
213      * @param validationTypeKey the identifier for the validation Type
214      * @param catalogRateTypeKey the identifier for the rate Type
215      * @param catalogRateInfo the CatalogRate information to be validated
216      * @param contextInfo information containing the principalId and
217      *        locale information about the caller of service operation
218      * @return a list of validation results or an empty list if
219      *         validation succeeded
220      * @throws DoesNotExistException validationTypeKey or
221      *         catalogRateTypeKey is not found
222      * @throws InvalidParameterException catalogRateInfo or contextInfo
223      *         is not valid
224      * @throws MissingParameterException validationTypeKey,
225      *         catalogRateTypeKey, catalogRateInfo, or contextInfo is
226      *         missing or null
227      * @throws OperationFailedException unable to complete request
228      * @throws PermissionDeniedException an authorization failure occurred
229      */
230     public List<ValidationResultInfo> validateCatalogRate(@WebParam(name = "validationTypeKey") String validationTypeKey, 
231                                                           @WebParam(name = "catalogRateTypeKey") String catalogRateTypeKey, 
232                                                           @WebParam(name = "catalogRateInfo") CatalogRateInfo catalogRateInfo, 
233                                                           @WebParam(name = "contextInfo") ContextInfo contextInfo) 
234         throws DoesNotExistException, 
235                InvalidParameterException, 
236                MissingParameterException, 
237                OperationFailedException, 
238                PermissionDeniedException;
239 
240     /** 
241      * Creates a new CatalogRate. The CatalogRate Id, Type, and Meta
242      * information may nogt be set in the supplied data.
243      *
244      * @param catalogRateTypeKey the identifier for the Type of the new
245      *        CatalogRate
246      * @param catalogRateInfo the data with which to create the CatalogRate
247      * @param contextInfo information containing the principalId and
248      *        locale information about the caller of service operation
249      * @return the new CatalogRate 
250      * @throws DataValidationErrorException supplied data is invalid
251      * @throws DoesNotExistException catalogRateTypeKey does not
252      *         exist is not supported
253      * @throws InvalidParameterException catalogRateInfo or contextInfo
254      *         is not valid
255      * @throws MissingParameterException catalogRateTypeKey,
256      *         catalogRateInfo or contextInfo is missing or null
257      * @throws OperationFailedException unable to complete request
258      * @throws PermissionDeniedException an authorization failure occurred
259      * @throws ReadOnlyException an attempt at supplying information
260      *         designated as read-only
261      */
262     public CatalogRateInfo createCatalogRate(@WebParam(name = "catalogRateTypeKey") String catalogRateTypeKey, 
263                                              @WebParam(name = "catalogRateInfo") CatalogRateInfo catalogRateInfo, 
264                                              @WebParam(name = "contextInfo") ContextInfo contextInfo) 
265         throws DataValidationErrorException, 
266                InvalidParameterException, 
267                MissingParameterException, 
268                OperationFailedException, 
269                PermissionDeniedException, 
270                ReadOnlyException;
271 
272     /** 
273      * Updates an existing CatalogRate. The CatalogRate Id, Type, and
274      * Meta information may not be changed.
275      *
276      * @param catalogRateId the identifier for the CatalogRate to be
277      *        updated
278      * @param catalogRateInfo the new data for the CatalogRate
279      * @param contextInfo information containing the principalId and
280      *        locale information about the caller of service operation
281      * @return the updated CatalogRate
282      * @throws DataValidationErrorException supplied data is invalid
283      * @throws DoesNotExistException catalogRateId not found
284      * @throws InvalidParameterException catalogRateInfo or
285      *         contextInfo is not valid
286      * @throws MissingParameterException catalogRateId,
287      *         catalogRateInfo, or contextInfo is missing or null
288      * @throws OperationFailedException unable to complete request
289      * @throws PermissionDeniedException an authorization failure occurred
290      * @throws ReadOnlyException an attempt at changing information
291      *         designated as read-only
292      * @throws VersionMismatchException optimistic locking failure or
293      *         the action was attempted on an out of date version
294      */
295     public CatalogRateInfo updateCatalogRate(@WebParam(name = "catalogRateId") String catalogRateId, 
296                                              @WebParam(name = "catalogRateInfo") CatalogRateInfo catalogRateInfo, 
297                                              @WebParam(name = "contextInfo") ContextInfo contextInfo) 
298         throws DataValidationErrorException, 
299                DoesNotExistException, 
300                InvalidParameterException, 
301                MissingParameterException, 
302                OperationFailedException, 
303                PermissionDeniedException, 
304                ReadOnlyException, 
305                VersionMismatchException;
306 
307     /**
308      * Changes the state of a CatalogRate.
309      *
310      * @param catalogRateId the Id of the CatalogRate
311      * @param stateKey the identifier for the new State 
312      * @param contextInfo information containing the principalId and
313      *        locale information about the caller of service operation
314      * @return the status of the operation. This must always be
315      *         true.
316      * @throws DoesNotExistException catalogRateId not found or
317      *         stateKey not found in CatalogRate Lifecycle
318      * @throws InvalidParameterException contextInfo is not valid
319      * @throws MissingParameterException catalogRateId, stateKey, or
320      *         contextInfo is missing or null
321      * @throws OperationFailedException unable to complete request
322      * @throws PermissionDeniedException an authorization failure occurred
323      */
324     public StatusInfo changeCatalogRateState(@WebParam(name = "catalogRateId") String catalogRateId, 
325                                              @WebParam(name = "stateKey") String stateKey,
326                                              @WebParam(name = "contextInfo") ContextInfo contextInfo) 
327         throws DoesNotExistException, 
328                InvalidParameterException, 
329                MissingParameterException, 
330                OperationFailedException, 
331                PermissionDeniedException;
332 
333     /** 
334      * Deletes an existing CatalogRate.
335      *
336      * @param catalogRateId the identifier for the CatalogRate to be
337      *        deleted
338      * @param contextInfo information containing the principalId and
339      *        locale information about the caller of service operation
340      * @return the status of the delete operation. This must always be
341      *         true.
342      * @throws DependentObjectsExistException Rates are attached to
343      *         this RateCatalog
344      * @throws DoesNotExistException catalogRateId not found
345      * @throws InvalidParameterException contextInfo is not valid
346      * @throws MissingParameterException catalogRateId or contextInfo
347      *         is missing or null
348      * @throws OperationFailedException unable to complete request
349      * @throws PermissionDeniedException an authorization failure occurred
350      */
351     public StatusInfo deleteCatalogRate(@WebParam(name = "catalogRateId") String catalogRateId, 
352                                         @WebParam(name = "contextInfo") ContextInfo contextInfo) 
353         throws DependentObjectsExistException,
354                DoesNotExistException, 
355                InvalidParameterException, 
356                MissingParameterException, 
357                OperationFailedException, 
358                PermissionDeniedException;
359 
360     /** 
361      * Retrieves a single Rate by Rate Id.
362      *
363      * @param rateId the identifier for the rate to be retrieved
364      * @param contextInfo information containing the principalId and
365      *        locale information about the caller of service operation
366      * @return the Rate requested
367      * @throws DoesNotExistException rateId not found
368      * @throws InvalidParameterException contextInfo is not valid
369      * @throws MissingParameterException rateId or contextInfo is
370      *         missing or null
371      * @throws OperationFailedException unable to complete request
372      * @throws PermissionDeniedException an authorization failure occurred
373      */
374     public RateInfo getRate(@WebParam(name = "rateId") String rateId, 
375                             @WebParam(name = "contextInfo") ContextInfo contextInfo) 
376         throws DoesNotExistException, 
377                InvalidParameterException, 
378                MissingParameterException, 
379                OperationFailedException, 
380                PermissionDeniedException;
381 
382     /** 
383      * Retrieves a list of Rates from a list of Rate Ids. The returned
384      * list may be in any order and if duplicates Ids are supplied, a
385      * unique set may or may not be returned.
386      *
387      * @param rateIds a list of Rate identifiers
388      * @param contextInfo information containing the principalId and
389      *        locale information about the caller of service operation
390      * @return a list of Rates
391      * @throws DoesNotExistException a rateId in the list not found
392      * @throws InvalidParameterException contextInfo is invalid
393      * @throws MissingParameterException rateIds, an Id in rateIds, or
394      *         contextInfo is missing or null
395      * @throws OperationFailedException unable to complete request
396      * @throws PermissionDeniedException an authorization failure occurred
397      */
398     public List<RateInfo> getRatesByIds(@WebParam(name = "rateIds") List<String> rateIds, 
399                                         @WebParam(name = "contextInfo") ContextInfo contextInfo) 
400         throws DoesNotExistException, 
401                InvalidParameterException, 
402                MissingParameterException, 
403                OperationFailedException, 
404                PermissionDeniedException;
405 
406     /** 
407      * Retrieves a list of Rate Ids by Rate Type.
408      *
409      * @param rateTypeKey an identifier for a Rate Type
410      * @param contextInfo information containing the principalId and
411      *        locale information about the caller of service operation
412      * @return a list of Rate identifiers matching rateTypeKey or an
413      *         empty list if none found
414      * @throws InvalidParameterException contextInfo is not valid
415      * @throws MissingParameterException rateTypeKey or contextInfo is
416      *         missing or null
417      * @throws OperationFailedException unable to complete request
418      * @throws PermissionDeniedException an authorization failure occurred
419      */
420     public List<String> getRateIdsByType(@WebParam(name = "rateTypeKey") String rateTypeKey, 
421                                          @WebParam(name = "contextInfo") ContextInfo contextInfo) 
422         throws InvalidParameterException, 
423                MissingParameterException, 
424                OperationFailedException, 
425                PermissionDeniedException;
426 
427     /** 
428      * Retrieves a list of Rates belonging to a CatalogRate.
429      *
430      * @param catalogRateId the identifier for a rate catalog entry
431      * @param contextInfo information containing the principalId and
432      *        locale information about the caller of service operation
433      * @return a list of Rates for the rate catalog entry or an empty
434      *         list is none found
435      * @throws InvalidParameterException contextInfo is not valid
436      * @throws MissingParameterException catalogRateId or contextInfo
437      *         is missing or null
438      * @throws OperationFailedException unable to complete request
439      * @throws PermissionDeniedException an authorization failure occurred
440      */
441     public List<RateInfo> getRatesByCatalogRate(@WebParam(name = "catalogRateId") String catalogRateId, 
442                                                 @WebParam(name = "contextInfo") ContextInfo contextInfo) 
443         throws InvalidParameterException, 
444                MissingParameterException, 
445                OperationFailedException, 
446                PermissionDeniedException;
447 
448     /**
449      * Searches for Rates based on the criteria and returns a list of
450      * Rate identifiers which match the search criteria.
451      *
452      * @param criteria the search criteria
453      * @param contextInfo information containing the principalId and
454      *        locale information about the caller of service operation
455      * @return list of Rate Ids matching the criteria
456      * @throws InvalidParameterException criteria or contextInfo is
457      *         not valid
458      * @throws MissingParameterException criteria or contextInfo is
459      *         missing or null
460      * @throws OperationFailedException unable to complete request
461      * @throws PermissionDeniedException an authorization failure occurred
462      */
463     public List<String> searchForRateIds(@WebParam(name = "criteria") QueryByCriteria criteria, 
464                                          @WebParam(name = "contextInfo") ContextInfo contextInfo)
465         throws InvalidParameterException, 
466                MissingParameterException, 
467                OperationFailedException, 
468                PermissionDeniedException;
469 
470     /**
471      * Searches for Rates based on the criteria and returns a list of
472      * Rates which match the search criteria.
473      * 
474      * @param criteria the search criteria
475      * @param contextInfo information containing the principalId and
476      *        locale information about the caller of service operation
477      * @return list of Rates matching the criteria
478      * @throws InvalidParameterException criteria or contextInfo is
479      *         not valid
480      * @throws MissingParameterException criteria or contextInfo is
481      *         missing or null
482      * @throws OperationFailedException unable to complete request
483      * @throws PermissionDeniedException an authorization failure occurred
484      */
485     public List<RateInfo> searchForRates(@WebParam(name = "criteria") QueryByCriteria criteria, 
486                                          @WebParam(name = "contextInfo") ContextInfo contextInfo) 
487         throws InvalidParameterException, 
488                MissingParameterException, 
489                OperationFailedException, 
490                PermissionDeniedException;
491 
492     /** 
493      * Validates a Rate. Depending on the value of validationType,
494      * this validation could be limited to tests on just the current
495      * Rate and its directly contained sub-objects or expanded to
496      * perform all tests related to this Rate. If an identifier is
497      * present for the Rate (and/or one of its contained sub-objects)
498      * and a record is found for that identifier, the validation
499      * checks if the Rate can be updated to the new values. If an
500      * identifier is not present or a record does not exist, the
501      * validation checks if the object with the given data can be
502      * created.
503      *
504      * @param validationTypeKey the identifier for the validation Type
505      * @param catalogRateId the identifier for the rate catalog entry
506      * @param rateTypeKey the identifier for the rate Type
507      * @param rateInfo the Rate information to be validated
508      * @param contextInfo information containing the principalId and
509      *        locale information about the caller of service operation
510      * @return a list of validation results or an empty list if
511      *         validation succeeded
512      * @throws DoesNotExistException validationTypeKey, catalogRateId,
513      *         or rateTypeKey is not found
514      * @throws InvalidParameterException rateInfo or contextInfo is
515      *         not valid
516      * @throws MissingParameterException validationTypeKey,
517      *         catalogRateId, rateTypeKey, rateInfo, or contextInfo is
518      *         missing or null
519      * @throws OperationFailedException unable to complete request
520      * @throws PermissionDeniedException an authorization failure occurred
521      */
522     public List<ValidationResultInfo> validateRate(@WebParam(name = "validationTypeKey") String validationTypeKey, 
523                                                    @WebParam(name = "catalogRateId") String catalogRateId, 
524                                                    @WebParam(name = "rateTypeKey") String rateTypeKey, 
525                                                    @WebParam(name = "rateInfo") RateInfo rateInfo, 
526                                                    @WebParam(name = "contextInfo") ContextInfo contextInfo) 
527         throws DoesNotExistException, 
528                InvalidParameterException, 
529                MissingParameterException, 
530                OperationFailedException, 
531                PermissionDeniedException;
532 
533     /** 
534      * Creates a new Rate. The Rate Id, Type, and Meta information may
535      * not be set in the supplied data.
536      *
537      * @param catalogRateId the identifier for the rate catalog entry
538      * @param rateTypeKey the identifier for the Type of the new Rate
539      * @param rateInfo the data with which to create the Rate
540      * @param contextInfo information containing the principalId and
541      *        locale information about the caller of service operation
542      * @return the new Rate 
543      * @throws DataValidationErrorException supplied data is invalid
544      * @throws DoesNotExistException catalogRateId or rateTypeKey does
545      *         not exist or is not supported
546      * @throws InvalidParameterException rateInfo or contextInfo is not
547      *         valid
548      * @throws MissingParameterException catalogRateId, rateTypeKey,
549      *         rateInfo or contextInfo is missing or null
550      * @throws OperationFailedException unable to complete request
551      * @throws PermissionDeniedException an authorization failure occurred
552      * @throws ReadOnlyException an attempt at supplying information
553      *         designated as read-only
554      */
555     public RateInfo createRate(@WebParam(name = "catalogRateId") String catalogRateId, 
556                                @WebParam(name = "rateTypeKey") String rateTypeKey, 
557                                @WebParam(name = "rateInfo") RateInfo rateInfo, 
558                                @WebParam(name = "contextInfo") ContextInfo contextInfo) 
559         throws DataValidationErrorException, 
560                InvalidParameterException, 
561                MissingParameterException, 
562                OperationFailedException, 
563                PermissionDeniedException, 
564                ReadOnlyException;
565 
566     /** 
567      * Updates an existing Rate. The Rate Id, Type, and Meta
568      * information may not be changed.
569      *
570      * @param rateId the identifier for the Rate to be updated
571      * @param rateInfo the new data for the Rate
572      * @param contextInfo information containing the principalId and
573      *        locale information about the caller of service operation
574      * @return the updated Rate
575      * @throws DataValidationErrorException supplied data is invalid
576      * @throws DoesNotExistException rateId not found
577      * @throws InvalidParameterException rateInfo or contextInfo is
578      *         not valid
579      * @throws MissingParameterException rateId, rateInfo, or
580      *         contextInfo is missing or null
581      * @throws OperationFailedException unable to complete request
582      * @throws PermissionDeniedException an authorization failure occurred
583      * @throws ReadOnlyException an attempt at changing information
584      *         designated as read-only
585      * @throws VersionMismatchException optimistic locking failure or
586      *         the action was attempted on an out of date version
587      */
588     public RateInfo updateRate(@WebParam(name = "rateId") String rateId, 
589                                @WebParam(name = "rateInfo") RateInfo rateInfo, 
590                                @WebParam(name = "contextInfo") ContextInfo contextInfo) 
591         throws DataValidationErrorException, 
592                DoesNotExistException, 
593                InvalidParameterException, 
594                MissingParameterException, 
595                OperationFailedException, 
596                PermissionDeniedException, 
597                ReadOnlyException, 
598                VersionMismatchException;
599 
600     /**
601      * Changes the state of a Rate.
602      *
603      * @param rateId the Id of the Rate
604      * @param stateKey the identifier for the new State 
605      * @param contextInfo information containing the principalId and
606      *        locale information about the caller of service operation
607      * @return the status of the operation. This must always be true.
608      * @throws DoesNotExistException rateId not found or stateKey
609      *         not found in Rate Lifecycle
610      * @throws InvalidParameterException contextInfo is not valid
611      * @throws MissingParameterException rateId, stateKey, or
612      *         contextInfo is missing or null
613      * @throws OperationFailedException unable to complete request
614      * @throws PermissionDeniedException an authorization failure occurred
615      */
616     public StatusInfo changeRateState(@WebParam(name = "rateId") String rateId, 
617                                       @WebParam(name = "stateKey") String stateKey,
618                                       @WebParam(name = "contextInfo") ContextInfo contextInfo) 
619         throws DoesNotExistException, 
620                InvalidParameterException, 
621                MissingParameterException, 
622                OperationFailedException, 
623                PermissionDeniedException;
624 
625     /** 
626      * Deletes an existing Rate.
627      *
628      * @param rateId the identifier for the Rate to be deleted
629      * @param contextInfo information containing the principalId and
630      *        locale information about the caller of service operation
631      * @return the status of the delete operation. This must always be
632      *         true.
633      * @throws DoesNotExistException rateId not found
634      * @throws InvalidParameterException contextInfo is not valid
635      * @throws MissingParameterException rateId or contextInfo is
636      *         missing or null
637      * @throws OperationFailedException unable to complete request
638      * @throws PermissionDeniedException an authorization failure occurred
639      */
640     public StatusInfo deleteRate(@WebParam(name = "rateId") String rateId, 
641                                  @WebParam(name = "contextInfo") ContextInfo contextInfo) 
642         throws DoesNotExistException, 
643                InvalidParameterException, 
644                MissingParameterException, 
645                OperationFailedException, 
646                PermissionDeniedException;
647 }