001    /*
002     * Copyright 2009 The Kuali Foundation Licensed under the Educational Community License, Version 1.0 (the "License"); you may
003     * not use this file except in compliance with the License. You may obtain a copy of the License at
004     * http://www.opensource.org/licenses/ecl1.php Unless required by applicable law or agreed to in writing, software
005     * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
006     * express or implied. See the License for the specific language governing permissions and limitations under the License.
007     */
008    package org.kuali.student.lum.course.service;
009    
010    import java.util.Date;
011    import java.util.List;
012    
013    import javax.jws.WebParam;
014    import javax.jws.WebService;
015    import javax.jws.soap.SOAPBinding;
016    
017    import org.kuali.student.common.dictionary.service.DictionaryService;
018    import org.kuali.student.common.dto.StatusInfo;
019    import org.kuali.student.common.exceptions.AlreadyExistsException;
020    import org.kuali.student.common.exceptions.CircularReferenceException;
021    import org.kuali.student.common.exceptions.CircularRelationshipException;
022    import org.kuali.student.common.exceptions.DataValidationErrorException;
023    import org.kuali.student.common.exceptions.DependentObjectsExistException;
024    import org.kuali.student.common.exceptions.DoesNotExistException;
025    import org.kuali.student.common.exceptions.IllegalVersionSequencingException;
026    import org.kuali.student.common.exceptions.InvalidParameterException;
027    import org.kuali.student.common.exceptions.MissingParameterException;
028    import org.kuali.student.common.exceptions.OperationFailedException;
029    import org.kuali.student.common.exceptions.PermissionDeniedException;
030    import org.kuali.student.common.exceptions.UnsupportedActionException;
031    import org.kuali.student.common.exceptions.VersionMismatchException;
032    import org.kuali.student.common.validation.dto.ValidationResultInfo;
033    import org.kuali.student.common.versionmanagement.service.VersionManagementService;
034    import org.kuali.student.core.statement.dto.StatementTreeViewInfo;
035    import org.kuali.student.lum.course.dto.ActivityInfo;
036    import org.kuali.student.lum.course.dto.CourseInfo;
037    import org.kuali.student.lum.course.dto.FormatInfo;
038    import org.kuali.student.lum.course.dto.LoDisplayInfo;
039    
040    /**
041     * @Author KSContractMojo
042     * @Author Kamal
043     * @Since Tue May 18 11:30:50 PDT 2010
044     * @See <a href="https://test.kuali.org/confluence/display/KULSTU/Course+Service">CourseService</>
045     */
046    @WebService(name = "CourseService", targetNamespace = CourseServiceConstants.COURSE_NAMESPACE)
047    @SOAPBinding(style = SOAPBinding.Style.DOCUMENT, use = SOAPBinding.Use.LITERAL, parameterStyle = SOAPBinding.ParameterStyle.WRAPPED)
048    public interface CourseService extends DictionaryService, VersionManagementService {
049        /**
050         * Retrieves a Course
051         *
052         * @param courseId
053         *            Unique Id of the Course. Maps to cluId
054         * @return the created course
055         * @throws DoesNotExistException
056         *             Course does not exist
057         * @throws InvalidParameterException
058         *             invalid course
059         * @throws MissingParameterException
060         *             missing Course
061         * @throws OperationFailedException
062         *             unable to complete request
063         * @throws PermissionDeniedException
064         *             authorization failure
065         */
066        public CourseInfo getCourse(@WebParam(name = "courseId") String courseId) throws DoesNotExistException, InvalidParameterException, MissingParameterException, OperationFailedException, PermissionDeniedException;
067    
068        /**
069         * Retrieves the formats for a Course.
070         *
071         * @param courseId
072         *            Unique Id of the Course. Maps to cluId
073         * @return a list of format info Structures
074         * @throws DoesNotExistException
075         *             Course does not exist
076         * @throws InvalidParameterException
077         *             invalid courseId
078         * @throws MissingParameterException
079         *             invalid courseId
080         * @throws OperationFailedException
081         *             unable to complete request
082         * @throws PermissionDeniedException
083         *             authorization failure
084         */
085        public List<FormatInfo> getCourseFormats(@WebParam(name = "courseId") String courseId) throws DoesNotExistException, InvalidParameterException, MissingParameterException, OperationFailedException, PermissionDeniedException;
086    
087        /**
088         * Retrieves the Activities for a Course.
089         *
090         * @param formatId
091         *            Unique Id of the Format. Maps to cluId
092         * @return a list of activity info Structures
093         * @throws DoesNotExistException
094         *             Format does not exist
095         * @throws InvalidParameterException
096         *             invalid format
097         * @throws MissingParameterException
098         *             missing Format
099         * @throws OperationFailedException
100         *             unable to complete request
101         * @throws PermissionDeniedException
102         *             authorization failure
103         */
104        public List<ActivityInfo> getCourseActivities(@WebParam(name = "formatId") String formatId) throws DoesNotExistException, InvalidParameterException, MissingParameterException, OperationFailedException, PermissionDeniedException;
105    
106        /**
107         * Retrieves the Los for a Course.
108         *
109         * @param courseId
110         *            Unique Id of the Course. Maps to cluId
111         * @return a list of LoDisplay info Structures
112         * @throws DoesNotExistException
113         *             Course does not exist
114         * @throws InvalidParameterException
115         *             invalid courseId
116         * @throws MissingParameterException
117         *             invalid courseId
118         * @throws OperationFailedException
119         *             unable to complete request
120         * @throws PermissionDeniedException
121         *             authorization failure
122         */
123        public List<LoDisplayInfo> getCourseLos(@WebParam(name = "courseId") String courseId) throws DoesNotExistException, InvalidParameterException, MissingParameterException, OperationFailedException, PermissionDeniedException;
124    
125        /**
126         * Retrieves the Statements of a Course.
127         *
128         * @param courseId
129         *            Unique Id of the Course. Maps to cluId
130         * @param nlUsageTypeKey Natural language usage type key (context)
131         * @param language Translation language e.g en, es, gr
132         * @return a list of Statementree Structures
133         * @throws DoesNotExistException
134         *             Course does not exist
135         * @throws InvalidParameterException
136         *             invalid courseId
137         * @throws MissingParameterException
138         *             invalid courseId
139         * @throws OperationFailedException
140         *             unable to complete request
141         * @throws PermissionDeniedException
142         *             authorization failure
143         */
144        public List<StatementTreeViewInfo> getCourseStatements(@WebParam(name = "courseId") String courseId, @WebParam(name="nlUsageTypeKey")String nlUsageTypeKey, @WebParam(name="language")String language) throws DoesNotExistException, InvalidParameterException, MissingParameterException, OperationFailedException, PermissionDeniedException;
145    
146        /**
147         * Creates a Course
148         *
149         * @param courseInfo
150         *            courseInfo
151         * @return the created course
152         * @throws AlreadyExistsException
153         *             The Course already exists
154         * @throws DataValidationErrorException
155         *             One or more values invalid for this operation
156         * @throws InvalidParameterException
157         *             invalid course
158         * @throws MissingParameterException
159         *             missing Course
160         * @throws OperationFailedException
161         *             unable to complete request
162         * @throws PermissionDeniedException
163         *             authorization failure
164         * @throws VersionMismatchException
165         * @throws DependentObjectsExistException
166         * @throws CircularRelationshipException
167         * @throws DoesNotExistException
168         * @throws UnsupportedActionException
169         */
170        public CourseInfo createCourse(@WebParam(name = "courseInfo") CourseInfo courseInfo) throws AlreadyExistsException, DataValidationErrorException, InvalidParameterException, MissingParameterException, OperationFailedException, PermissionDeniedException, VersionMismatchException, DoesNotExistException, CircularRelationshipException, DependentObjectsExistException, UnsupportedActionException;
171    
172        /**
173         * Updates a Course.
174         *
175         * @param courseInfo
176         *            courseInfo
177         * @return updated Course
178         * @throws DataValidationErrorException
179         *             One or more values invalid for this operation
180         * @throws DoesNotExistException
181         *             course not found
182         * @throws InvalidParameterException
183         *             invalid course
184         * @throws MissingParameterException
185         *             missing course
186         * @throws VersionMismatchException
187         *             The action was attempted on an out of date version.
188         * @throws OperationFailedException
189         *             unable to complete request
190         * @throws PermissionDeniedException
191         *             authorization failure
192         * @throws DependentObjectsExistException
193         * @throws CircularRelationshipException
194         * @throws AlreadyExistsException
195         * @throws UnsupportedActionException
196         * @throws CircularReferenceException
197         * @throws UnsupportedOperationException
198         */
199        public CourseInfo updateCourse(@WebParam(name = "courseInfo") CourseInfo courseInfo) throws DataValidationErrorException, DoesNotExistException, InvalidParameterException, MissingParameterException, VersionMismatchException, OperationFailedException, PermissionDeniedException, AlreadyExistsException, CircularRelationshipException, DependentObjectsExistException, UnsupportedActionException, UnsupportedOperationException, CircularReferenceException;
200    
201        /**
202         * Deletes a Course.
203         *
204         * @param courseId
205         *            identifier for Course.Maps to cluId
206         * @return status of the operation (success or failure)
207         * @throws DoesNotExistException
208         *             Course does not exist
209         * @throws InvalidParameterException
210         *             invalid courseId
211         * @throws MissingParameterException
212         *             invalid courseId
213         * @throws OperationFailedException
214         *             unable to complete request
215         * @throws PermissionDeniedException
216         *             authorization failure
217         * @throws VersionMismatchException
218         * @throws DependentObjectsExistException
219         * @throws CircularRelationshipException
220         * @throws AlreadyExistsException
221         * @throws DataValidationErrorException
222         * @throws UnsupportedActionException
223         * @throws CircularReferenceException
224         * @throws UnsupportedOperationException
225         */
226        public StatusInfo deleteCourse(@WebParam(name = "courseId") String courseId) throws DoesNotExistException, InvalidParameterException, MissingParameterException, OperationFailedException, PermissionDeniedException, VersionMismatchException, DataValidationErrorException, AlreadyExistsException, CircularRelationshipException, DependentObjectsExistException, UnsupportedActionException, UnsupportedOperationException, CircularReferenceException;
227    
228        /**
229         * Creates the Statement for a Course.
230         *
231         * @param courseId
232         *            Unique Id of the Course. Maps to cluId
233         * @param statementTreeViewInfoList
234         *            a Statementree Structures
235         * @return created Statementree Structures
236         * @throws DoesNotExistException
237         *             Course does not exist
238         * @throws InvalidParameterException
239         *             invalid courseId
240         * @throws MissingParameterException
241         *             invalid courseId
242         * @throws OperationFailedException
243         *             unable to complete request
244         * @throws PermissionDeniedException
245         *             authorization failure
246         * @throws DataValidationErrorException
247         */
248        public StatementTreeViewInfo createCourseStatement(@WebParam(name = "courseId") String courseId, @WebParam(name = "statementTreeViewInfo") StatementTreeViewInfo statementTreeViewInfo) throws DoesNotExistException, InvalidParameterException, MissingParameterException, OperationFailedException, PermissionDeniedException, DataValidationErrorException;
249    
250        /**
251         * Updates the Statement for a Course.
252         *
253         * @param courseId
254         *            Unique Id of the Course. Maps to cluId
255         * @param statementTreeViewInfoList
256         *            a Statementree Structures
257         * @return updated Statementree Structures
258         * @throws DoesNotExistException
259         *             Course does not exist
260         * @throws InvalidParameterException
261         *             invalid courseId
262         * @throws MissingParameterException
263         *             invalid courseId
264         * @throws OperationFailedException
265         *             unable to complete request
266         * @throws PermissionDeniedException
267         *             authorization failure
268         * @throws VersionMismatchException
269         * @throws CircularReferenceException
270         * @throws DataValidationErrorException
271         */
272        public StatementTreeViewInfo updateCourseStatement(@WebParam(name = "courseId") String courseId, @WebParam(name = "statementTreeViewInfo") StatementTreeViewInfo statementTreeViewInfo) throws DoesNotExistException, InvalidParameterException, MissingParameterException, OperationFailedException, PermissionDeniedException, DataValidationErrorException, CircularReferenceException, VersionMismatchException;
273    
274        /**
275         * Delete the Statement for a Course.
276         *
277         * @param courseId
278         *            Unique Id of the Course. Maps to cluId
279         * @param statementTreeViewInfoList
280         *            a Statementree Structures
281         * @return status of the operation (success or failure)
282         * @throws DoesNotExistException
283         *             Course does not exist
284         * @throws InvalidParameterException
285         *             invalid courseId
286         * @throws MissingParameterException
287         *             invalid courseId
288         * @throws OperationFailedException
289         *             unable to complete request
290         * @throws PermissionDeniedException
291         *             authorization failure
292         */
293        public StatusInfo deleteCourseStatement(@WebParam(name = "courseId") String courseId, @WebParam(name = "statementTreeViewInfo") StatementTreeViewInfo statementTreeViewInfo) throws DoesNotExistException, InvalidParameterException, MissingParameterException, OperationFailedException, PermissionDeniedException;
294    
295    
296        /**
297         * Validates a course based on its dictionary
298         *
299         * @param validationType
300         *            identifier of the extent of validation
301         * @param courseInfo
302         *            Course to be validated
303         * @return results from performing the validation
304         * @throws DoesNotExistException
305         *             Course does not exist
306         * @throws InvalidParameterException
307         *             invalid courseId
308         * @throws MissingParameterException
309         *             invalid courseId
310         * @throws OperationFailedException
311         *             unable to complete request
312         */
313        public List<ValidationResultInfo> validateCourse(String validationType, CourseInfo courseInfo) throws InvalidParameterException, MissingParameterException, OperationFailedException;
314    
315    
316        /**
317         * Validates the Statement for a Course.
318         *
319         * @param courseId
320         *            Unique Id of the Course. Maps to cluId
321         * @param statementTreeViewInfoList
322         *            a Statementree Structures
323         * @return results from performing the validation
324         * @throws DoesNotExistException
325         *             Course or StementTreeView does not exist
326         * @throws InvalidParameterException
327         *             invalid courseId or stratement tree view Id
328         * @throws MissingParameterException
329         *             invalid courseId or statement tree view Id
330         * @throws OperationFailedException
331         *             unable to complete request
332         */
333            public List<ValidationResultInfo> validateCourseStatement(@WebParam(name = "courseId") String courseId, @WebParam(name = "statementTreeViewInfo") StatementTreeViewInfo statementTreeViewInfo)  throws InvalidParameterException, MissingParameterException, OperationFailedException;
334    
335    
336        /**
337         * Creates a new Course version based on the current course
338         * @param courseId identifier for the Course to be versioned
339         * @param versionComment comment for the current version
340         * @return the new versioned Course information
341         * @throws DataValidationErrorException One or more values invalid for this operation
342         * @throws DoesNotExistException courseId not found
343         * @throws InvalidParameterException invalid courseId
344         * @throws MissingParameterException missing courseId
345         * @throws OperationFailedException unable to complete request
346         * @throws PermissionDeniedException authorization failure
347         * @throws VersionMismatchException The action was attempted on an out of date version
348         */
349        public CourseInfo createNewCourseVersion(@WebParam(name="courseId")String courseId, @WebParam(name="versionComment")String versionComment) throws DataValidationErrorException, DoesNotExistException, InvalidParameterException, MissingParameterException, OperationFailedException, PermissionDeniedException, VersionMismatchException;
350    
351    
352        /**
353         * Sets a specific version of the Course as current. The sequence number must be greater than the existing current Course version.
354         * This will truncate the current version's end date to the currentVersionStart param.
355         * If a Course exists which is set to become current in the future, that course's currentVersionStart and CurrentVersionEnd will be nullified.
356         * The currentVersionStart must be in the future to prevent changing historic data.
357         * @param courseVersionId Version Specific Id of the Course
358         * @param currentVersionStart Date when this course becomes current. Must be in the future and be after the most current course's start date.
359         * @return status of the operation
360         * @throws DoesNotExistException courseVersionId not found
361         * @throws InvalidParameterException invalid courseVersionId, previousState, newState
362         * @throws MissingParameterException missing courseVersionId, previousState, newState
363         * @throws IllegalVersionSequencingException a Course with higher sequence number from the one provided is marked current
364         * @throws OperationFailedException unable to complete request
365         * @throws PermissionDeniedException authorization failure
366         */
367        public StatusInfo setCurrentCourseVersion(@WebParam(name="courseVersionId")String courseVersionId, @WebParam(name="currentVersionStart")Date currentVersionStart) throws DoesNotExistException, InvalidParameterException, MissingParameterException, IllegalVersionSequencingException, OperationFailedException, PermissionDeniedException;
368    
369    }