View Javadoc

1   /*
2    * Copyright 2009 The Kuali Foundation Licensed under the Educational Community
3    * License, Version 1.0 (the "License"); you may not use this file except in
4    * compliance with the License. You may obtain a copy of the License at
5    * http://www.opensource.org/licenses/ecl1.php Unless required by applicable law
6    * or agreed to in writing, software distributed under the License is
7    * distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
8    * KIND, either express or implied. See the License for the specific language
9    * governing permissions and limitations under the License.
10   */
11  package org.kuali.student.r2.lum.program.service;
12  
13  import java.util.Date;
14  import java.util.List;
15  
16  import javax.jws.WebParam;
17  import javax.jws.WebService;
18  import javax.jws.soap.SOAPBinding;
19  
20  
21  import org.kuali.student.r1.common.dictionary.service.DictionaryService;
22  import org.kuali.student.r2.core.search.service.SearchService;
23  import org.kuali.student.r2.common.dto.ContextInfo;
24  import org.kuali.student.r2.common.dto.StatusInfo;
25  import org.kuali.student.r2.common.dto.ValidationResultInfo;
26  import org.kuali.student.r2.common.exceptions.AlreadyExistsException;
27  import org.kuali.student.r2.common.exceptions.DataValidationErrorException;
28  import org.kuali.student.r2.common.exceptions.DoesNotExistException;
29  import org.kuali.student.r2.common.exceptions.IllegalVersionSequencingException;
30  import org.kuali.student.r2.common.exceptions.InvalidParameterException;
31  import org.kuali.student.r2.common.exceptions.MissingParameterException;
32  import org.kuali.student.r2.common.exceptions.OperationFailedException;
33  import org.kuali.student.r2.common.exceptions.PermissionDeniedException;
34  import org.kuali.student.r2.common.exceptions.ReadOnlyException;
35  import org.kuali.student.r2.common.exceptions.VersionMismatchException;
36  
37  import org.kuali.student.r2.common.util.constants.ProgramServiceConstants;
38  import org.kuali.student.r2.core.versionmanagement.service.VersionManagementService;
39  import org.kuali.student.r2.lum.program.dto.CredentialProgramInfo;
40  import org.kuali.student.r2.lum.program.dto.HonorsProgramInfo;
41  import org.kuali.student.r2.lum.program.dto.MajorDisciplineInfo;
42  import org.kuali.student.r2.lum.program.dto.MinorDisciplineInfo;
43  
44  import org.kuali.student.r2.lum.program.dto.CoreProgramInfo;
45  import org.kuali.student.r2.lum.program.dto.ProgramRequirementInfo;
46  import org.kuali.student.r2.lum.program.dto.ProgramVariationInfo;
47  
48  /**
49   * The Program Service allows for the creation and management of programs.
50   * 
51   * @version 2.0
52   * @Author sambitpa@usc.edu
53   */
54  @WebService(name = "ProgramService", targetNamespace = ProgramServiceConstants.PROGRAM_NAMESPACE)
55  // TODO CHECK THESE VALUES
56  @SOAPBinding(style = SOAPBinding.Style.DOCUMENT, use = SOAPBinding.Use.LITERAL, parameterStyle = SOAPBinding.ParameterStyle.WRAPPED)
57  public interface ProgramService extends  SearchService,  VersionManagementService, DictionaryService
58  {
59  
60      /**
61       * Retrieves a CredentialProgram
62       * 
63       * @param credentialProgramId Unique Id of the CredentialProgram. Maps to
64       *            cluId
65       * @return the created Credential Program
66       * @throws DoesNotExistException CredentialProgram does not exist
67       * @throws InvalidParameterException invalid Credential Program
68       * @throws MissingParameterException missing Credential Program
69       * @throws OperationFailedException unable to complete request
70       * @throws PermissionDeniedException authorization failure
71       * @throws org.kuali.student.r2.common.exceptions.OperationFailedException
72       * @throws org.kuali.student.r2.common.exceptions.PermissionDeniedException
73       */
74      public CredentialProgramInfo getCredentialProgram(@WebParam(name = "credentialProgramId") String credentialProgramId, @WebParam(name = "contextInfo") ContextInfo contextInfo)
75              throws DoesNotExistException, InvalidParameterException, MissingParameterException, OperationFailedException, PermissionDeniedException;
76  
77      /**
78       * Retrieves a list of CredentialPrograms corresponding to the given list of
79       * CredentialProgram Ids
80       * 
81       * @param credentialProgramIds list of CredentialPrograms to be retrieved
82       * @param contextInfo Context information containing the principalId and
83       *            locale information about the caller of service operation
84       * @return list of CredentialProgram
85       * @throws DoesNotExistException an commentKey in list not found
86       * @throws InvalidParameterException invalid commentKey
87       * @throws MissingParameterException commentIds, contextInfo not specified
88       * @throws OperationFailedException unable to complete request
89       * @throws PermissionDeniedException authorization failure
90       */
91      public List<CredentialProgramInfo> getCredentialProgramsByIds(@WebParam(name = "credentialProgramIds") List<String> credentialProgramIds, @WebParam(name = "contextInfo") ContextInfo contextInfo)
92              throws DoesNotExistException, InvalidParameterException, MissingParameterException, OperationFailedException, PermissionDeniedException;
93  
94      /**
95       * Validates a Credential Program against its data dictionary
96       * 
97       * @param validationType identifier of the extent of validation
98       * @param credentialProgramInfo Credential Program information to be tested
99       * @return results from performing the validation
100      * @throws InvalidParameterException invalid validationTypeKey, cluInfo
101      * @throws MissingParameterException missing validationTypeKey, cluInfo
102      * @throws OperationFailedException unable to complete request
103      */
104     public List<ValidationResultInfo> validateCredentialProgram(@WebParam(name = "validationType") String validationType,
105             @WebParam(name = "credentialProgramInfo") CredentialProgramInfo credentialProgramInfo, @WebParam(name = "contextInfo") ContextInfo contextInfo) throws InvalidParameterException,
106             MissingParameterException, OperationFailedException;
107 
108     /**
109      * Creates a Credential Program
110      * 
111      * @param credentialProgramInfo credentialProgramInfo
112      * @return the created Credential Program
113      * @throws AlreadyExistsException The Credential Program already exists
114      * @throws DataValidationErrorException One or more values invalid for this
115      *             operation
116      * @throws InvalidParameterException invalid Credential Program
117      * @throws MissingParameterException missing Credential Program
118      * @throws OperationFailedException unable to complete request
119      * @throws PermissionDeniedException authorization failure
120      */
121     public CredentialProgramInfo createCredentialProgram(@WebParam(name = "credentialProgramTypeKey") String credentialProgramTypeKey,
122             @WebParam(name = "credentialProgramInfo") CredentialProgramInfo credentialProgramInfo, @WebParam(name = "contextInfo") ContextInfo contextInfo) throws AlreadyExistsException,
123             DataValidationErrorException, InvalidParameterException, MissingParameterException, OperationFailedException, PermissionDeniedException;
124 
125     /**
126      * Creates a new Credential Program version based on the current Credential
127      * Program
128      * 
129      * @param credentialProgramId identifier for the Credential Program to be
130      *            versioned
131      * @param versionComment comment for the current version
132      * @return the new versioned Credential Program information
133      * @throws DoesNotExistException Credential Program does not exist
134      * @throws InvalidParameterException invalid credentialProgramId
135      * @throws MissingParameterException invalid credentialProgramId
136      * @throws OperationFailedException unable to complete request
137      * @throws PermissionDeniedException authorization failure
138      * @throws VersionMismatchException The action was attempted on an out of
139      *             date version
140      * @throws DataValidationErrorException
141      * @throws ReadOnlyException 
142      */
143     public CredentialProgramInfo createNewCredentialProgramVersion(@WebParam(name = "credentialProgramId") String credentialProgramId, @WebParam(name = "versionComment") String versionComment,
144             @WebParam(name = "contextInfo") ContextInfo contextInfo) throws DoesNotExistException, InvalidParameterException, MissingParameterException, OperationFailedException,
145             PermissionDeniedException, VersionMismatchException, DataValidationErrorException, ReadOnlyException;
146 
147     /**
148      * Sets a specific version of the Credential Program as current. The
149      * sequence number must be greater than the existing current Credential
150      * Program version. This will truncate the current version's end date to the
151      * currentVersionStart param. If a Major exists which is set to become
152      * current in the future, that Major's currentVersionStart and
153      * CurrentVersionEnd will be nullified. The currentVersionStart must be in
154      * the future to prevent changing historic data.
155      * 
156      * @param credentialProgramId Version Specific Id of the Credential Program
157      * @param currentVersionStart Date when this Credential Program becomes
158      *            current. Must be in the future and be after the most current
159      *            Credential Program's start date.
160      * @return status of the operation (success or failure)
161      * @throws DoesNotExistException Credential Program for credentialProgramId
162      *             does not exist
163      * @throws InvalidParameterException invalid credentialProgramId,
164      *             currentVersionStart
165      * @throws MissingParameterException invalid credentialProgramId
166      * @throws IllegalVersionSequencingException a Credential Program with
167      *             higher sequence number from the one provided is marked
168      *             current
169      * @throws OperationFailedException unable to complete request
170      * @throws PermissionDeniedException authorization failure
171      * @throws DataValidationErrorException 
172      */
173     public StatusInfo setCurrentCredentialProgramVersion(@WebParam(name = "credentialProgramId") String credentialProgramId, @WebParam(name = "currentVersionStart") Date currentVersionStart,
174             @WebParam(name = "contextInfo") ContextInfo contextInfo) throws DoesNotExistException, InvalidParameterException, MissingParameterException, IllegalVersionSequencingException,
175             OperationFailedException, PermissionDeniedException, DataValidationErrorException;
176 
177     /**
178      * Updates a Credential Program
179      * 
180      * @param credentialProgramInfo credentialProgramInfo
181      * @return updated Credential Program
182      * @throws DataValidationErrorException One or more values invalid for this
183      *             operation
184      * @throws DoesNotExistException Credential Program not found
185      * @throws InvalidParameterException invalid Credential Program
186      * @throws MissingParameterException missing Credential Program
187      * @throws VersionMismatchException The action was attempted on an out of
188      *             date version
189      * @throws OperationFailedException unable to complete request
190      * @throws PermissionDeniedException authorization failure
191      */
192     public CredentialProgramInfo updateCredentialProgram(@WebParam(name = "credentialProgramId") String credentialProgramId,
193             @WebParam(name = "credentialProgramInfo") CredentialProgramInfo credentialProgramInfo, @WebParam(name = "contextInfo") ContextInfo contextInfo) throws DataValidationErrorException,
194             DoesNotExistException, InvalidParameterException, MissingParameterException, VersionMismatchException, OperationFailedException, PermissionDeniedException;
195 
196     /**
197      * Deletes a Credential Program
198      * 
199      * @param credentialProgramId identifier for credentialProgramId.Maps to
200      *            cluId
201      * @return status of the operation (success or failure)
202      * @throws DoesNotExistException Credential Program does not exist
203      * @throws InvalidParameterException invalid credentialProgramId
204      * @throws MissingParameterException invalid credentialProgramId
205      * @throws OperationFailedException unable to complete request
206      * @throws PermissionDeniedException authorization failure
207      */
208     public StatusInfo deleteCredentialProgram(@WebParam(name = "credentialProgramId") String credentialProgramId, @WebParam(name = "contextInfo") ContextInfo contextInfo)
209             throws DoesNotExistException, InvalidParameterException, MissingParameterException, OperationFailedException, PermissionDeniedException;
210 
211     /**
212      * Retrieves a MajorDiscipline
213      * 
214      * @param majorDisciplineId Unique Id of the MajorDiscipline. Maps to cluId
215      * @return the created MajorDiscipline
216      * @throws DoesNotExistException MajorDiscipline does not exist
217      * @throws InvalidParameterException invalid MajorDiscipline
218      * @throws MissingParameterException missing MajorDiscipline
219      * @throws OperationFailedException unable to complete request
220      * @throws PermissionDeniedException authorization failure
221      */
222     public MajorDisciplineInfo getMajorDiscipline(@WebParam(name = "majorDisciplineId") String majorDisciplineId, @WebParam(name = "contextInfo") ContextInfo contextInfo)
223             throws DoesNotExistException, InvalidParameterException, MissingParameterException, OperationFailedException, PermissionDeniedException;
224 
225     /**
226      * Retrieves a list of MajorDiscipline corresponding to the given list of
227      * major discipline Ids
228      * 
229      * @param majorDisciplineIds list of MajorDisciplines to be retrieved
230      * @param contextInfo Context information containing the principalId and
231      *            locale information about the caller of service operation
232      * @return list of MajorDiscipline
233      * @throws DoesNotExistException an commentKey in list not found
234      * @throws InvalidParameterException invalid commentKey
235      * @throws MissingParameterException commentIds, contextInfo not specified
236      * @throws OperationFailedException unable to complete request
237      * @throws PermissionDeniedException authorization failure
238      */
239     public List<MajorDisciplineInfo> getMajorDisciplinesByIds(@WebParam(name = "majorDisciplineIds") List<String> majorDisciplineIds, @WebParam(name = "contextInfo") ContextInfo contextInfo)
240             throws DoesNotExistException, InvalidParameterException, MissingParameterException, OperationFailedException, PermissionDeniedException;
241 
242     /**
243      * Retrieves the list of Major Discipline identifiers a given Credential
244      * Program Type.
245      * 
246      * @param programType Type of Credential Program
247      * @return List of Major Discipline identifiers for the given Credential
248      *         Program Type
249      * @throws DoesNotExistException program type not found
250      * @throws InvalidParameterException invalid program type
251      * @throws MissingParameterException program type is not specified
252      * @throws OperationFailedException unable to complete request
253      */
254     public List<String> getMajorDisciplineIdsByCredentialProgramType(@WebParam(name = "programType") String programType,
255             @WebParam(name = "contextInfo") ContextInfo contextInfo)
256             throws DoesNotExistException, InvalidParameterException, MissingParameterException, OperationFailedException;
257 
258     /** 
259      * Retrieves a list of program variations for a particular major
260      * @param majorDisciplineId Major Discipline Identifier
261      * @return list of program variations associated with the specified Major
262      * @throws DoesNotExistException Major not found
263      * @throws InvalidParameterException invalid majorDisciplineId
264      * @throws MissingParameterException majorDisciplineId not specified
265      * @throws OperationFailedException unable to complete request
266      */
267     public List<ProgramVariationInfo> getProgramVariationsByMajorDiscipline(@WebParam(name = "majorDisciplineId") String majorDisciplineId,
268             @WebParam(name = "contextInfo") ContextInfo contextInfo)
269             throws DoesNotExistException,
270             InvalidParameterException,
271             MissingParameterException,
272             OperationFailedException;
273 
274     /**
275      * Validates a Major discipline against its data dictionary
276      * 
277      * @param validationType identifier of the extent of validation
278      * @param majorDisciplineInfo Major discipline information to be tested
279      * @return results from performing the validation
280      * @throws InvalidParameterException invalid validationTypeKey, cluInfo
281      * @throws MissingParameterException missing validationTypeKey, cluInfo
282      * @throws OperationFailedException unable to complete request
283      * @throws PermissionDeniedException 
284      */
285     public List<ValidationResultInfo> validateMajorDiscipline(@WebParam(name = "validationType") String validationType,
286             @WebParam(name = "majorDisciplineInfo") MajorDisciplineInfo majorDisciplineInfo, @WebParam(name = "contextInfo") ContextInfo contextInfo) throws InvalidParameterException,
287             MissingParameterException, OperationFailedException, PermissionDeniedException;
288 
289     /**
290      * Creates a Major Discipline Program
291      * 
292      * @param majorDisciplineInfo majorDisciplineInfo
293      * @return the created Major Discipline
294      * @throws AlreadyExistsException The Major already exists
295      * @throws DataValidationErrorException One or more values invalid for this
296      *             operation
297      * @throws InvalidParameterException invalid Major
298      * @throws MissingParameterException missing Major
299      * @throws OperationFailedException unable to complete request
300      * @throws PermissionDeniedException authorization failure
301      */
302     public MajorDisciplineInfo createMajorDiscipline(@WebParam(name = "majorDisciplineTypeKey") String majorDisciplineTypeKey,
303             @WebParam(name = "majorDisciplineInfo") MajorDisciplineInfo majorDisciplineInfo, @WebParam(name = "contextInfo") ContextInfo contextInfo) throws AlreadyExistsException,
304             DataValidationErrorException, InvalidParameterException, MissingParameterException, OperationFailedException, PermissionDeniedException;
305 
306     /**
307      * Updates a Major Discipline
308      * 
309      * @param majorDisciplineInfo majorDisciplineInfo
310      * @return updated Major Discipline
311      * @throws DataValidationErrorException One or more values invalid for this
312      *             operation
313      * @throws DoesNotExistException Major not found
314      * @throws InvalidParameterException invalid Major
315      * @throws MissingParameterException missing Major
316      * @throws VersionMismatchException The action was attempted on an out of
317      *             date version
318      * @throws OperationFailedException unable to complete request
319      * @throws PermissionDeniedException authorization failure
320      */
321     public MajorDisciplineInfo updateMajorDiscipline(@WebParam(name = "majorDisciplineId") String majorDisciplineId, @WebParam(name = "majorDisciplineInfo") MajorDisciplineInfo majorDisciplineInfo,
322             @WebParam(name = "contextInfo") ContextInfo contextInfo) throws DataValidationErrorException, DoesNotExistException, InvalidParameterException, MissingParameterException,
323             VersionMismatchException, OperationFailedException, PermissionDeniedException;
324 
325     /**
326      * Deletes a Major Discipline
327      * 
328      * @param majorDisciplineId identifier for majorDisciplineId.Maps to cluId
329      * @return status of the operation (success or failure)
330      * @throws DoesNotExistException Major does not exist
331      * @throws InvalidParameterException invalid majorDisciplineId
332      * @throws MissingParameterException invalid majorDisciplineId
333      * @throws OperationFailedException unable to complete request
334      * @throws PermissionDeniedException authorization failure
335      */
336     public StatusInfo deleteMajorDiscipline(@WebParam(name = "majorDisciplineId") String majorDisciplineId, @WebParam(name = "contextInfo") ContextInfo contextInfo) throws DoesNotExistException,
337             InvalidParameterException, MissingParameterException, OperationFailedException, PermissionDeniedException;
338 
339     /**
340      * Creates a new Major Discipline version based on the current Major
341      * 
342      * @param majorDisciplineId identifier for the Major Discipline to be
343      *            versioned
344      * @param versionComment comment for the current version
345      * @return the new versioned Major Discipline information
346      * @throws DoesNotExistException Major does not exist
347      * @throws InvalidParameterException invalid majorDisciplineId
348      * @throws MissingParameterException invalid majorDisciplineId
349      * @throws OperationFailedException unable to complete request
350      * @throws PermissionDeniedException authorization failure
351      * @throws VersionMismatchException The action was attempted on an out of
352      *             date version
353      * @throws DataValidationErrorException
354      * @throws ReadOnlyException 
355      */
356     public MajorDisciplineInfo createNewMajorDisciplineVersion(@WebParam(name = "majorDisciplineId") String majorDisciplineId, @WebParam(name = "versionComment") String versionComment,
357             @WebParam(name = "contextInfo") ContextInfo contextInfo) throws DoesNotExistException, InvalidParameterException, MissingParameterException, OperationFailedException,
358             PermissionDeniedException, VersionMismatchException, DataValidationErrorException, ReadOnlyException;
359 
360     /**
361      * Retrieves a HonorsProgram
362      * 
363      * @param honorsProgramId Unique Id of the HonorsProgram. Maps to cluId
364      * @return the created Honors Program
365      * @throws DoesNotExistException HonorsProgram does not exist
366      * @throws InvalidParameterException invalid Honors Program
367      * @throws MissingParameterException missing Honors Program
368      * @throws OperationFailedException unable to complete request
369      * @throws PermissionDeniedException authorization failure
370      */
371     public HonorsProgramInfo getHonorsProgram(@WebParam(name = "honorsProgramId") String honorsProgramId, @WebParam(name = "contextInfo") ContextInfo contextInfo) throws DoesNotExistException,
372             InvalidParameterException, MissingParameterException, OperationFailedException, PermissionDeniedException;
373 
374     /**
375      * 
376      * Retrieves a list of honors program by Ids
377      * 
378      * @param honorsProgramIds
379      * @param contextInfo
380      * @return
381      * @throws DoesNotExistException
382      * @throws InvalidParameterException
383      * @throws MissingParameterException
384      * @throws OperationFailedException
385      * @throws PermissionDeniedException
386      */
387     public List<HonorsProgramInfo> getHonorsProgramsByIds(@WebParam(name = "honorsProgramIds") List<String> honorsProgramIds, @WebParam(name = "contextInfo") ContextInfo contextInfo) throws DoesNotExistException,
388             InvalidParameterException, MissingParameterException, OperationFailedException, PermissionDeniedException;
389 
390     /**
391      * Retrieves the list of Honors Program Program a given Credential Program
392      * Type.
393      * 
394      * @param programType Type of Credential Program
395      * @return List of Honors Programs for the given Credential Program Type
396      * @throws DoesNotExistException program type not found
397      * @throws InvalidParameterException invalid program type
398      * @throws MissingParameterException program type is not specified
399      * @throws OperationFailedException unable to complete request
400      */
401     public List<String> getHonorProgramIdsByCredentialProgramType(@WebParam(name = "programType") String programType, @WebParam(name = "contextInfo") ContextInfo contextInfo) throws DoesNotExistException,
402             InvalidParameterException, MissingParameterException, OperationFailedException;
403 
404     /**
405      * Validates a Honors Program against its data dictionary
406      * 
407      * @param validationType identifier of the extent of validation
408      * @param honorsProgramInfo Honors Program information to be tested
409      * @return results from performing the validation
410      * @throws InvalidParameterException invalid validationTypeKey, cluInfo
411      * @throws MissingParameterException missing validationTypeKey, cluInfo
412      * @throws OperationFailedException unable to complete request
413      */
414     public List<ValidationResultInfo> validateHonorsProgram(@WebParam(name = "validationType") String validationType, @WebParam(name = "honorsProgramInfo") HonorsProgramInfo honorsProgramInfo,
415             @WebParam(name = "contextInfo") ContextInfo contextInfo) throws InvalidParameterException, MissingParameterException, OperationFailedException;
416 
417     /**
418      * Creates a Honors Program
419      * 
420      * @param honorsProgramInfo honorsProgramInfo
421      * @return the created Honors Program
422      * @throws AlreadyExistsException The Honors Program already exists
423      * @throws DataValidationErrorException One or more values invalid for this
424      *             operation
425      * @throws InvalidParameterException invalid Honors Program
426      * @throws MissingParameterException missing Honors Program
427      * @throws OperationFailedException unable to complete request
428      * @throws PermissionDeniedException authorization failure
429      */
430     public HonorsProgramInfo createHonorsProgram(@WebParam(name = "honorsProgramTypeKey") String honorsProgramTypeKey, @WebParam(name = "honorsProgramInfo") HonorsProgramInfo honorsProgramInfo,
431             @WebParam(name = "contextInfo") ContextInfo contextInfo) throws AlreadyExistsException, DataValidationErrorException, InvalidParameterException, MissingParameterException,
432             OperationFailedException, PermissionDeniedException;
433 
434     /**
435      * Updates a Honors Program
436      * 
437      * @param honorsProgramInfo honorsProgramInfo
438      * @return updated Honors Program
439      * @throws DataValidationErrorException One or more values invalid for this
440      *             operation
441      * @throws DoesNotExistException Honors Program not found
442      * @throws InvalidParameterException invalid Honors Program
443      * @throws MissingParameterException missing Honors Program
444      * @throws VersionMismatchException The action was attempted on an out of
445      *             date version
446      * @throws OperationFailedException unable to complete request
447      * @throws PermissionDeniedException authorization failure
448      */
449     public HonorsProgramInfo updateHonorsProgram(@WebParam(name = "honorsProgramId") String honorsProgramId, @WebParam(name = "honorsProgramTypeKey") String honorsProgramTypeKey,
450             @WebParam(name = "honorsProgramInfo") HonorsProgramInfo honorsProgramInfo, @WebParam(name = "contextInfo") ContextInfo contextInfo) throws DataValidationErrorException,
451             DoesNotExistException, InvalidParameterException, MissingParameterException, VersionMismatchException, OperationFailedException, PermissionDeniedException;
452 
453     /**
454      * Deletes a Honors Program
455      * 
456      * @param honorsProgramId identifier for honorsProgramId.Maps to cluId
457      * @return status of the operation (success or failure)
458      * @throws DoesNotExistException Honors Program does not exist
459      * @throws InvalidParameterException invalid honorsProgramId
460      * @throws MissingParameterException invalid honorsProgramId
461      * @throws OperationFailedException unable to complete request
462      * @throws PermissionDeniedException authorization failure
463      */
464     public StatusInfo deleteHonorsProgram(@WebParam(name = "honorsProgramId") String honorsProgramId, @WebParam(name = "contextInfo") ContextInfo contextInfo) throws DoesNotExistException,
465             InvalidParameterException, MissingParameterException, OperationFailedException, PermissionDeniedException;
466 
467     /**
468      * Retrieves a Core Program
469      * 
470      * @param coreProgramId Unique Id of the Core Program. Maps to cluId
471      * @return the Core Program
472      * @throws DoesNotExistException Program Requirement does not exist
473      * @throws InvalidParameterException invalid Program Requirement
474      * @throws MissingParameterException missing Program Requirement
475      * @throws OperationFailedException unable to complete request
476      * @throws PermissionDeniedException authorization failure
477      */
478     public CoreProgramInfo getCoreProgram(@WebParam(name = "coreProgramId") String coreProgramId, @WebParam(name = "contextInfo") ContextInfo contextInfo) throws DoesNotExistException,
479             InvalidParameterException, MissingParameterException, OperationFailedException, PermissionDeniedException;
480 
481     /**
482      * 
483      * Retrieves a list of core program by Ids
484      * 
485      * @param coreProgramIds
486      * @param contextInfo
487      * @return
488      * @throws DoesNotExistException
489      * @throws InvalidParameterException
490      * @throws MissingParameterException
491      * @throws OperationFailedException
492      * @throws PermissionDeniedException
493      */
494     public List<CoreProgramInfo> getCoreProgramsByIds(@WebParam(name = "coreProgramIds") List<String> coreProgramIds, @WebParam(name = "contextInfo") ContextInfo contextInfo) throws DoesNotExistException,
495             InvalidParameterException, MissingParameterException, OperationFailedException, PermissionDeniedException;
496 
497     /**
498      * Validates a Core Program against its data dictionary
499      * 
500      * @param validationType identifier of the extent of validation
501      * @param coreProgramInfo Core Program information to be tested
502      * @return results from performing the validation
503      * @throws InvalidParameterException invalid validationTypeKey, cluInfo
504      * @throws MissingParameterException missing validationTypeKey, cluInfo
505      * @throws OperationFailedException unable to complete request
506      */
507     public List<ValidationResultInfo> validateCoreProgram(@WebParam(name = "validationType") String validationType, @WebParam(name = "coreProgramInfo") CoreProgramInfo coreProgramInfo,
508             @WebParam(name = "contextInfo") ContextInfo contextInfo) throws InvalidParameterException, MissingParameterException, OperationFailedException;
509 
510     /**
511      * Creates a Core Program
512      * 
513      * @param coreProgramInfo coreProgramInfo
514      * @return the created Core Program
515      * @throws AlreadyExistsException The Core Program already exists
516      * @throws DataValidationErrorException One or more values invalid for this
517      *             operation
518      * @throws InvalidParameterException invalid Core Program
519      * @throws MissingParameterException missing Core Program
520      * @throws OperationFailedException unable to complete request
521      * @throws PermissionDeniedException authorization failure
522      */
523     public CoreProgramInfo createCoreProgram(@WebParam(name = "coreProgramTypeKey") String coreProgramTypeKey, @WebParam(name = "coreProgramInfo") CoreProgramInfo coreProgramInfo,
524             @WebParam(name = "contextInfo") ContextInfo contextInfo) throws AlreadyExistsException, DataValidationErrorException, InvalidParameterException, MissingParameterException,
525             OperationFailedException, PermissionDeniedException, DoesNotExistException;
526 
527     /**
528      * Creates a new Core Program version based on the current Core Program
529      * 
530      * @param coreProgramId identifier for the Core Program to be versioned
531      * @param versionComment comment for the current version
532      * @return the new versioned Core Program information
533      * @throws DoesNotExistException Core Program does not exist
534      * @throws InvalidParameterException invalid coreProgramId
535      * @throws MissingParameterException invalid coreProgramId
536      * @throws OperationFailedException unable to complete request
537      * @throws PermissionDeniedException authorization failure
538      * @throws VersionMismatchException The action was attempted on an out of
539      *             date version
540      * @throws DataValidationErrorException
541      * @throws ReadOnlyException 
542      */
543     public CoreProgramInfo createNewCoreProgramVersion(@WebParam(name = "coreProgramId") String coreProgramId, @WebParam(name = "versionComment") String versionComment,
544             @WebParam(name = "contextInfo") ContextInfo contextInfo) throws DoesNotExistException, InvalidParameterException, MissingParameterException, OperationFailedException,
545             PermissionDeniedException, VersionMismatchException, DataValidationErrorException, ReadOnlyException;
546 
547     /**
548      * Sets a specific version of the Core Program as current. The sequence
549      * number must be greater than the existing current Core Program version.
550      * This will truncate the current version's end date to the
551      * currentVersionStart param. If a Major exists which is set to become
552      * current in the future, that Major's currentVersionStart and
553      * CurrentVersionEnd will be nullified. The currentVersionStart must be in
554      * the future to prevent changing historic data.
555      * 
556      * @param coreProgramId Version Specific Id of the Core Program
557      * @param currentVersionStart Date when this Core Program becomes current.
558      *            Must be in the future and be after the most current major's
559      *            start date.
560      * @return status of the operation (success or failure)
561      * @throws DoesNotExistException Core Program for coreProgramId does not
562      *             exist
563      * @throws InvalidParameterException invalid coreProgramId,
564      *             currentVersionStart
565      * @throws MissingParameterException invalid coreProgramId
566      * @throws IllegalVersionSequencingException a CoreProgram with higher
567      *             sequence number from the one provided is marked current
568      * @throws OperationFailedException unable to complete request
569      * @throws PermissionDeniedException authorization failure
570      * @throws DataValidationErrorException 
571      */
572     public StatusInfo setCurrentCoreProgramVersion(@WebParam(name = "coreProgramId") String coreProgramId, @WebParam(name = "currentVersionStart") Date currentVersionStart,
573             @WebParam(name = "contextInfo") ContextInfo contextInfo) throws DoesNotExistException, InvalidParameterException, MissingParameterException, IllegalVersionSequencingException,
574             OperationFailedException, PermissionDeniedException, DataValidationErrorException;
575 
576     /**
577      * Updates a Core Program
578      * 
579      * @param coreProgramInfo coreProgramInfo
580      * @return updated Core Program
581      * @throws DataValidationErrorException One or more values invalid for this
582      *             operation
583      * @throws DoesNotExistException Core Program not found
584      * @throws InvalidParameterException invalid Core Program
585      * @throws MissingParameterException missing Core Program
586      * @throws VersionMismatchException The action was attempted on an out of
587      *             date version
588      * @throws OperationFailedException unable to complete request
589      * @throws PermissionDeniedException authorization failure
590      */
591     public CoreProgramInfo updateCoreProgram(@WebParam(name = "coreProgramId") String coreProgramId, @WebParam(name = "coreProgramTypeKey") String coreProgramTypeKey,
592             @WebParam(name = "coreProgramInfo") CoreProgramInfo coreProgramInfo, @WebParam(name = "contextInfo") ContextInfo contextInfo) throws DataValidationErrorException, DoesNotExistException,
593             InvalidParameterException, MissingParameterException, VersionMismatchException, OperationFailedException, PermissionDeniedException;
594 
595     /**
596      * Deletes a Core Program
597      * 
598      * @param coreProgramId identifier for coreProgramId.Maps to cluId
599      * @return status of the operation (success or failure)
600      * @throws DoesNotExistException Core Program does not exist
601      * @throws InvalidParameterException invalid coreProgramId
602      * @throws MissingParameterException invalid coreProgramId
603      * @throws OperationFailedException unable to complete request
604      * @throws PermissionDeniedException authorization failure
605      */
606     public StatusInfo deleteCoreProgram(@WebParam(name = "coreProgramId") String coreProgramId, @WebParam(name = "contextInfo") ContextInfo contextInfo) throws DoesNotExistException,
607             InvalidParameterException, MissingParameterException, OperationFailedException, PermissionDeniedException;
608 
609     /**
610      * Retrieves a ProgramRequirement
611      * 
612      * @param programRequirementId Unique Id of the ProgramRequirement. Maps to
613      *            cluId
614      * @return the Program Requirement
615      * @throws DoesNotExistException Program Requirement does not exist
616      * @throws InvalidParameterException invalid Program Requirement
617      * @throws MissingParameterException missing Program Requirement
618      * @throws OperationFailedException unable to complete request
619      * @throws PermissionDeniedException authorization failure
620      */
621     public ProgramRequirementInfo getProgramRequirement(@WebParam(name = "programRequirementId") String programRequirementId, @WebParam(name = "contextInfo") ContextInfo contextInfo)
622             throws DoesNotExistException, InvalidParameterException, MissingParameterException, OperationFailedException, PermissionDeniedException;
623 
624     /**
625      * 
626      * Retrieves a list of ProgramRequirements by Ids
627      * 
628      * @param programRequirementIds
629      * @param contextInfo
630      * @return
631      * @throws DoesNotExistException
632      * @throws InvalidParameterException
633      * @throws MissingParameterException
634      * @throws OperationFailedException
635      * @throws PermissionDeniedException
636      */
637     public List<ProgramRequirementInfo> getProgramRequirementsByIds(@WebParam(name = "programRequirementIds") List<String> programRequirementIds, @WebParam(name = "contextInfo") ContextInfo contextInfo) throws DoesNotExistException,
638             InvalidParameterException, MissingParameterException, OperationFailedException, PermissionDeniedException;
639 
640     /**
641      * Validates a Program Requirement against its data dictionary
642      * 
643      * @param validationType identifier of the extent of validation
644      * @param programRequirementInfo Program Requirement information to be
645      *            tested
646      * @return results from performing the validation
647      * @throws InvalidParameterException invalid validationTypeKey, cluInfo
648      * @throws MissingParameterException missing validationTypeKey, cluInfo
649      * @throws OperationFailedException unable to complete request
650      */
651     public List<ValidationResultInfo> validateProgramRequirement(@WebParam(name = "validationType") String validationType,
652             @WebParam(name = "programRequirementInfo") ProgramRequirementInfo programRequirementInfo, @WebParam(name = "contextInfo") ContextInfo contextInfo) throws InvalidParameterException,
653             MissingParameterException, OperationFailedException;
654 
655     /**
656      * Creates a Program Requirement
657      * 
658      * @param programRequirementInfo programRequirementInfo
659      * @return the created Program Requirement
660      * @throws AlreadyExistsException The Program Requirement already exists
661      * @throws DataValidationErrorException One or more values invalid for this
662      *             operation
663      * @throws InvalidParameterException invalid Program Requirement
664      * @throws MissingParameterException missing Program Requirement
665      * @throws OperationFailedException unable to complete request
666      * @throws PermissionDeniedException authorization failure
667      */
668     public ProgramRequirementInfo createProgramRequirement(@WebParam(name = "programRequirementTypeKey") String programRequirementTypeKey,
669             @WebParam(name = "programRequirementInfo") ProgramRequirementInfo programRequirementInfo, @WebParam(name = "contextInfo") ContextInfo contextInfo) throws AlreadyExistsException,
670             DataValidationErrorException, InvalidParameterException, MissingParameterException, OperationFailedException, PermissionDeniedException;
671 
672     /**
673      * Updates a Program Requirement
674      * 
675      * @param programRequirementInfo programRequirementInfo
676      * @return updated Program Requirement
677      * @throws DataValidationErrorException One or more values invalid for this
678      *             operation
679      * @throws DoesNotExistException Program Requirement not found
680      * @throws InvalidParameterException invalid Program Requirement
681      * @throws MissingParameterException missing Program Requirement
682      * @throws VersionMismatchException The action was attempted on an out of
683      *             date version
684      * @throws OperationFailedException unable to complete request
685      * @throws PermissionDeniedException authorization failure
686      */
687     public ProgramRequirementInfo updateProgramRequirement(@WebParam(name = "programRequirementId") String programRequirementId,
688             @WebParam(name = "programRequirementTypeKey") String programRequirementTypeKey, @WebParam(name = "programRequirementInfo") ProgramRequirementInfo programRequirementInfo,
689             @WebParam(name = "contextInfo") ContextInfo contextInfo) throws DataValidationErrorException, DoesNotExistException, InvalidParameterException, MissingParameterException,
690             VersionMismatchException, OperationFailedException, PermissionDeniedException;
691 
692     /**
693      * Deletes a Program Requirement
694      * 
695      * @param programRequirementId identifier for programRequirementId.Maps to
696      *            cluId
697      * @return status of the operation (success or failure)
698      * @throws DoesNotExistException Program Requirement does not exist
699      * @throws InvalidParameterException invalid programRequirementId
700      * @throws MissingParameterException invalid programRequirementId
701      * @throws OperationFailedException unable to complete request
702      * @throws PermissionDeniedException authorization failure
703      */
704     public StatusInfo deleteProgramRequirement(@WebParam(name = "programRequirementId") String programRequirementId, @WebParam(name = "contextInfo") ContextInfo contextInfo)
705             throws DoesNotExistException, InvalidParameterException, MissingParameterException, OperationFailedException, PermissionDeniedException;
706 
707     /**
708      * Sets a specific version of the Major as current. The sequence number must
709      * be greater than the existing current Major version. This will truncate
710      * the current version's end date to the currentVersionStart param. If a
711      * Major exists which is set to become current in the future, that Major's
712      * currentVersionStart and CurrentVersionEnd will be nullified. The
713      * currentVersionStart must be in the future to prevent changing historic
714      * data.
715      * 
716      * @param majorDisciplineId Version Specific Id of the Major Discipline
717      * @param currentVersionStart Date when this Major becomes current. Must be
718      *            in the future and be after the most current major's start
719      *            date.
720      * @return status of the operation (success or failure)
721      * @throws DoesNotExistException Major for majorVersionId does not exist
722      * @throws InvalidParameterException invalid majorVersionId,
723      *             currentVersionStart
724      * @throws MissingParameterException invalid majorVersionId
725      * @throws IllegalVersionSequencingException a Major with higher sequence
726      *             number from the one provided is marked current
727      * @throws OperationFailedException unable to complete request
728      * @throws PermissionDeniedException authorization failure
729      * @throws DataValidationErrorException 
730      */
731     public StatusInfo setCurrentMajorDisciplineVersion(@WebParam(name = "majorDisciplineId") String majorDisciplineId, @WebParam(name = "currentVersionStart") Date currentVersionStart,
732             @WebParam(name = "contextInfo") ContextInfo contextInfo) throws DoesNotExistException, InvalidParameterException, MissingParameterException, IllegalVersionSequencingException,
733             OperationFailedException, PermissionDeniedException, DataValidationErrorException;
734 
735     /**
736      * Retrieves a MinorDiscipline
737      * 
738      * @param minorDisciplineId Unique Id of the MinorDiscipline. Maps to cluId
739      * @return the created MinorDiscipline
740      * @throws DoesNotExistException MinorDiscipline does not exist
741      * @throws InvalidParameterException invalid MinorDiscipline
742      * @throws MissingParameterException missing MinorDiscipline
743      * @throws OperationFailedException unable to complete request
744      * @throws PermissionDeniedException authorization failure
745      */
746     public MinorDisciplineInfo getMinorDiscipline(@WebParam(name = "minorDisciplineId") String minorDisciplineId, @WebParam(name = "contextInfo") ContextInfo contextInfo)
747             throws DoesNotExistException, InvalidParameterException, MissingParameterException, OperationFailedException, PermissionDeniedException;
748 
749     /**
750      * Retrieves the list of Minor Discipline Program a given Credential Program
751      * Type.
752      * 
753      * @param programType Type of Credential Program
754      * @return List of Minor Disciplines for the given Credential Program Type
755      * @throws DoesNotExistException program type not found
756      * @throws InvalidParameterException invalid program type
757      * @throws MissingParameterException program type is not specified
758      * @throws OperationFailedException unable to complete request
759      */
760     public List<String> getMinorsByCredentialProgramType(@WebParam(name = "programType") String programType, @WebParam(name = "contextInfo") ContextInfo contextInfo) throws DoesNotExistException,
761             InvalidParameterException, MissingParameterException, OperationFailedException;
762 
763     /**
764      * Validates a Minor discipline against its data dictionary
765      * 
766      * @param validationType identifier of the extent of validation
767      * @param minorDisciplineInfo Minor discipline information to be tested
768      * @return results from performing the validation
769      * @throws InvalidParameterException invalid validationTypeKey, cluInfo
770      * @throws MissingParameterException missing validationTypeKey, cluInfo
771      * @throws OperationFailedException unable to complete request
772      */
773     public List<ValidationResultInfo> validateMinorDiscipline(@WebParam(name = "validationType") String validationType,
774             @WebParam(name = "minorDisciplineInfo") MinorDisciplineInfo minorDisciplineInfo, @WebParam(name = "contextInfo") ContextInfo contextInfo) throws InvalidParameterException,
775             MissingParameterException, OperationFailedException;
776 
777     /**
778      * Creates a Minor Discipline Program
779      * 
780      * @param minorDisciplineInfo minorDisciplineInfo
781      * @return the created Minor Discipline
782      * @throws AlreadyExistsException The Minor already exists
783      * @throws DataValidationErrorException One or more values invalid for this
784      *             operation
785      * @throws InvalidParameterException invalid Minor
786      * @throws MissingParameterException missing Minor
787      * @throws OperationFailedException unable to complete request
788      * @throws PermissionDeniedException authorization failure
789      */
790     public MinorDisciplineInfo createMinorDiscipline(@WebParam(name = "minorDisciplineTypeKey") String minorDisciplineTypeKey,
791             @WebParam(name = "minorDisciplineInfo") MinorDisciplineInfo minorDisciplineInfo, @WebParam(name = "contextInfo") ContextInfo contextInfo) throws AlreadyExistsException,
792             DataValidationErrorException, InvalidParameterException, MissingParameterException, OperationFailedException, PermissionDeniedException;
793 
794     /**
795      * Updates a Minor Discipline
796      * 
797      * @param minorDisciplineInfo minorDisciplineInfo
798      * @return updated Minor Discipline
799      * @throws DataValidationErrorException One or more values invalid for this
800      *             operation
801      * @throws DoesNotExistException Minor not found
802      * @throws InvalidParameterException invalid Minor
803      * @throws MissingParameterException missing Minor
804      * @throws VersionMismatchException The action was attempted on an out of
805      *             date version
806      * @throws OperationFailedException unable to complete request
807      * @throws PermissionDeniedException authorization failure
808      */
809     public MinorDisciplineInfo updateMinorDiscipline(@WebParam(name = "minorDisciplineId") String minorDisciplineId, @WebParam(name = "minorDisciplineTypeKey") String minorDisciplineTypeKey,
810             @WebParam(name = "minorDisciplineInfo") MinorDisciplineInfo minorDisciplineInfo, @WebParam(name = "contextInfo") ContextInfo contextInfo) throws DataValidationErrorException,
811             DoesNotExistException, InvalidParameterException, MissingParameterException, VersionMismatchException, OperationFailedException, PermissionDeniedException;
812 
813     /**
814      * Deletes a Minor Discipline
815      * 
816      * @param minorDisciplineId identifier for minorDisciplineId.Maps to cluId
817      * @return status of the operation (success or failure)
818      * @throws DoesNotExistException Minor does not exist
819      * @throws InvalidParameterException invalid minorDisciplineId
820      * @throws MissingParameterException invalid minorDisciplineId
821      * @throws OperationFailedException unable to complete request
822      * @throws PermissionDeniedException authorization failure
823      */
824     public StatusInfo deleteMinorDiscipline(@WebParam(name = "minorDisciplineId") String minorDisciplineId, @WebParam(name = "contextInfo") ContextInfo contextInfo) throws DoesNotExistException,
825             InvalidParameterException, MissingParameterException, OperationFailedException, PermissionDeniedException;
826 
827     @Deprecated
828     /**
829      * 
830      * This method ...
831      * 
832      * @param majorDisciplineId
833      * @param contextInfo
834      * @return
835      * @throws DoesNotExistException
836      * @throws InvalidParameterException
837      * @throws MissingParameterException
838      * @throws OperationFailedException
839      */
840 	public List<ProgramVariationInfo> getVariationsByMajorDisciplineId(@WebParam(name="majorDisciplineId") String majorDisciplineId, @WebParam(name="contextInfo") ContextInfo contextInfo)
841 			throws DoesNotExistException, InvalidParameterException,
842 			MissingParameterException, OperationFailedException;
843 
844 }