001    /*
002     * Copyright 2009 The Kuali Foundation Licensed under the Educational Community
003     * License, Version 1.0 (the "License"); you may not use this file except in
004     * compliance with the License. You may obtain a copy of the License at
005     * http://www.opensource.org/licenses/ecl1.php Unless required by applicable law
006     * or agreed to in writing, software distributed under the License is
007     * distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
008     * KIND, either express or implied. See the License for the specific language
009     * governing permissions and limitations under the License.
010     */
011    package org.kuali.student.r2.lum.program.service;
012    
013    import java.util.Date;
014    import java.util.List;
015    
016    import javax.jws.WebParam;
017    import javax.jws.WebService;
018    import javax.jws.soap.SOAPBinding;
019    
020    
021    import org.kuali.student.r1.common.dictionary.service.DictionaryService;
022    import org.kuali.student.r1.common.search.service.SearchService;
023    import org.kuali.student.r2.common.dto.ContextInfo;
024    import org.kuali.student.r2.common.dto.StatusInfo;
025    import org.kuali.student.r2.common.dto.ValidationResultInfo;
026    import org.kuali.student.r2.common.exceptions.AlreadyExistsException;
027    import org.kuali.student.r2.common.exceptions.DataValidationErrorException;
028    import org.kuali.student.r2.common.exceptions.DoesNotExistException;
029    import org.kuali.student.r2.common.exceptions.IllegalVersionSequencingException;
030    import org.kuali.student.r2.common.exceptions.InvalidParameterException;
031    import org.kuali.student.r2.common.exceptions.MissingParameterException;
032    import org.kuali.student.r2.common.exceptions.OperationFailedException;
033    import org.kuali.student.r2.common.exceptions.PermissionDeniedException;
034    import org.kuali.student.r2.common.exceptions.ReadOnlyException;
035    import org.kuali.student.r2.common.exceptions.VersionMismatchException;
036    
037    import org.kuali.student.r2.common.util.constants.ProgramServiceConstants;
038    import org.kuali.student.r2.core.versionmanagement.service.VersionManagementService;
039    import org.kuali.student.r2.lum.program.dto.CredentialProgramInfo;
040    import org.kuali.student.r2.lum.program.dto.HonorsProgramInfo;
041    import org.kuali.student.r2.lum.program.dto.MajorDisciplineInfo;
042    import org.kuali.student.r2.lum.program.dto.MinorDisciplineInfo;
043    
044    import org.kuali.student.r2.lum.program.dto.CoreProgramInfo;
045    import org.kuali.student.r2.lum.program.dto.ProgramRequirementInfo;
046    import org.kuali.student.r2.lum.program.dto.ProgramVariationInfo;
047    
048    /**
049     * The Program Service allows for the creation and management of programs.
050     * 
051     * @Version 2.0
052     * @Author sambitpa@usc.edu
053     */
054    @WebService(name = "ProgramService", targetNamespace = ProgramServiceConstants.PROGRAM_NAMESPACE)
055    // TODO CHECK THESE VALUES
056    @SOAPBinding(style = SOAPBinding.Style.DOCUMENT, use = SOAPBinding.Use.LITERAL, parameterStyle = SOAPBinding.ParameterStyle.WRAPPED)
057    public interface ProgramService extends  SearchService,  VersionManagementService, DictionaryService
058    {
059    
060        /**
061         * Retrieves a CredentialProgram
062         * 
063         * @param credentialProgramId Unique Id of the CredentialProgram. Maps to
064         *            cluId
065         * @return the created Credential Program
066         * @throws DoesNotExistException CredentialProgram does not exist
067         * @throws InvalidParameterException invalid Credential Program
068         * @throws MissingParameterException missing Credential Program
069         * @throws OperationFailedException unable to complete request
070         * @throws PermissionDeniedException authorization failure
071         * @throws org.kuali.student.r2.common.exceptions.OperationFailedException
072         * @throws org.kuali.student.r2.common.exceptions.PermissionDeniedException
073         */
074        public CredentialProgramInfo getCredentialProgram(@WebParam(name = "credentialProgramId") String credentialProgramId, @WebParam(name = "contextInfo") ContextInfo contextInfo)
075                throws DoesNotExistException, InvalidParameterException, MissingParameterException, OperationFailedException, PermissionDeniedException;
076    
077        /**
078         * Retrieves a list of CredentialPrograms corresponding to the given list of
079         * CredentialProgram Ids
080         * 
081         * @param CredentialProgram Ids list of CredentialPrograms to be retrieved
082         * @param contextInfo Context information containing the principalId and
083         *            locale information about the caller of service operation
084         * @return list of CredentialProgram
085         * @throws DoesNotExistException an commentKey in list not found
086         * @throws InvalidParameterException invalid commentKey
087         * @throws MissingParameterException commentIds, contextInfo not specified
088         * @throws OperationFailedException unable to complete request
089         * @throws PermissionDeniedException authorization failure
090         */
091        public List<CredentialProgramInfo> getCredentialProgramsByIds(@WebParam(name = "credentialProgramIds") List<String> credentialProgramIds, @WebParam(name = "contextInfo") ContextInfo contextInfo)
092                throws DoesNotExistException, InvalidParameterException, MissingParameterException, OperationFailedException, PermissionDeniedException;
093    
094        /**
095         * Validates a Credential Program against its data dictionary
096         * 
097         * @param validationType identifier of the extent of validation
098         * @param credentialProgramInfo Credential Program information to be tested
099         * @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 MajorDiscipline Ids 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    }