View Javadoc

1   /*
2    * Copyright 2009 The Kuali Foundation
3    *
4    * Licensed under the Educational Community License, Version 1.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *
8    * http://www.opensource.org/licenses/ecl1.php
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   */
16  package org.kuali.student.lum.course.dto;
17  
18  import java.io.Serializable;
19  import java.util.ArrayList;
20  import java.util.Date;
21  import java.util.HashMap;
22  import java.util.List;
23  import java.util.Map;
24  
25  import javax.xml.bind.annotation.XmlAccessType;
26  import javax.xml.bind.annotation.XmlAccessorType;
27  import javax.xml.bind.annotation.XmlAttribute;
28  import javax.xml.bind.annotation.XmlElement;
29  import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
30  
31  import org.kuali.student.core.dto.AmountInfo;
32  import org.kuali.student.core.dto.HasAttributes;
33  import org.kuali.student.core.dto.HasTypeState;
34  import org.kuali.student.core.dto.Idable;
35  import org.kuali.student.core.dto.MetaInfo;
36  import org.kuali.student.core.dto.RichTextInfo;
37  import org.kuali.student.core.dto.TimeAmountInfo;
38  import org.kuali.student.core.versionmanagement.dto.VersionInfo;
39  import org.kuali.student.core.ws.binding.JaxbAttributeMapListAdapter;
40  import org.kuali.student.lum.lrc.dto.ResultComponentInfo;
41  import org.kuali.student.lum.lu.dto.CluInstructorInfo;
42  
43  /**
44   * Detailed information about a single course.
45   * For specific usage, check the specific service(s) implementation(s)
46   *
47   * @Author KSContractMojo
48   * @Author Daniel Epstein
49   * @Since Mon Jul 26 14:12:05 EDT 2010
50   * @See <a href="https://test.kuali.org/confluence/display/KULSTU/courseInfo+Structure">CourseInfo</>
51   *
52   */
53  @XmlAccessorType(XmlAccessType.FIELD)
54  public class CourseInfo implements Serializable, Idable, HasTypeState, HasAttributes {
55  
56      private static final long serialVersionUID = 1L;
57  
58      @XmlElement
59      private String code;
60  
61      @XmlElement
62      private String courseNumberSuffix;
63  
64      @XmlElement
65      private String level;
66  
67      @XmlElement
68      private String courseTitle;
69  
70      @XmlElement
71      private String transcriptTitle;
72  
73      @XmlElement
74      private RichTextInfo descr;
75  
76      @XmlElement
77      private List<FormatInfo> formats;
78  
79      @XmlElement
80      private List<String> termsOffered;
81  
82      @XmlElement
83      private TimeAmountInfo duration;
84  
85      @XmlElement
86      private List<CourseJointInfo> joints;
87  
88      @XmlElement
89      private List<CourseCrossListingInfo> crossListings;
90  
91      @XmlElement
92      private List<CourseVariationInfo> variations;
93  
94      @XmlElement
95      private String subjectArea;
96  
97      @XmlElement
98      private List<String> campusLocations;
99  
100     @XmlElement
101     private AmountInfo outOfClassHours;
102 
103     @XmlElement
104     private CluInstructorInfo primaryInstructor;
105 
106     @XmlElement
107     private List<CluInstructorInfo> instructors;
108 
109     @XmlElement
110 
111     private List<String> unitsDeployment;  
112 
113     private RichTextInfo feeJustification;
114 
115 
116     @XmlElement
117     private List<String> unitsContentOwner; 
118 
119     private List<CourseFeeInfo> fees;
120 
121 
122     @XmlElement
123     private List<CourseRevenueInfo> revenues;
124 
125     @XmlElement
126     private CourseExpenditureInfo expenditure;
127 
128     @XmlElement
129     private List<LoDisplayInfo> courseSpecificLOs;
130 
131     @XmlElement
132     private List<String> gradingOptions;
133 
134     @XmlElement
135     private List<ResultComponentInfo> creditOptions;
136 
137     @XmlElement
138     private boolean specialTopicsCourse;
139 
140     @XmlElement
141     private boolean pilotCourse;
142 
143     @XmlElement
144     private String startTerm;
145 
146     @XmlElement
147     private String endTerm;
148 
149     @XmlElement
150     private Date effectiveDate;
151 
152     @XmlElement
153     private Date expirationDate;
154 
155     @XmlElement
156     @XmlJavaTypeAdapter(JaxbAttributeMapListAdapter.class)
157     private Map<String, String> attributes;
158 
159     @XmlElement
160     private MetaInfo metaInfo;
161     
162     @XmlElement
163     private VersionInfo versionInfo;
164     
165 	@XmlAttribute
166     private String type;
167 
168     @XmlAttribute
169     private String state;
170 
171     @XmlAttribute
172     private String id;
173 
174     /**
175      * The composite string that is used to officially reference or publish the CLU. Note it may have an internal structure that each Institution may want to enforce. This structure may be composed from the other parts of the structure such as Level amp; Division, but may include items such as cluType.
176      */
177     public String getCode() {
178         return code;
179     }
180 
181     public void setCode(String code) {
182         this.code = code;
183     }
184 
185     /**
186      * The "extra" portion of the code, which usually corresponds with the most detailed part of the number. Ex. at MIT we might map Division to subject area(Ex:6) but overall we need to say the code is 6.120. This field would represent the 120 part.
187      */
188     public String getCourseNumberSuffix() {
189         return courseNumberSuffix;
190     }
191 
192     public void setCourseNumberSuffix(String courseNumberSuffix) {
193         this.courseNumberSuffix = courseNumberSuffix;
194     }
195 
196     /**
197      * 
198      * A code that indicates what level 100, 200 or upper division, lower division etc
199      * 
200      * @return
201      */
202     public String getLevel() {
203         return level;
204     }
205 
206     public void setLevel(String level) {
207         this.level = level;
208     }
209 
210     /**
211      * Abbreviated name of the Course
212      */
213     public String getCourseTitle() {
214         return courseTitle;
215     }
216 
217     public void setCourseTitle(String courseTitle) {
218         this.courseTitle = courseTitle;
219     }
220 
221     /**
222      * Information related to the official identification of the credit course, typically in human readable form. Used to officially reference or publish.
223      */
224     public String getTranscriptTitle() {
225         return transcriptTitle;
226     }
227 
228     public void setTranscriptTitle(String transcriptTitle) {
229         this.transcriptTitle = transcriptTitle;
230     }
231 
232     /**
233      * Narrative description of the Course.
234      */
235     public RichTextInfo getDescr() {
236         return descr;
237     }
238 
239     public void setDescr(RichTextInfo descr) {
240         this.descr = descr;
241     }
242 
243     /**
244      * 
245      */
246     public List<FormatInfo> getFormats() {
247         if (formats == null) {
248             formats = new ArrayList<FormatInfo>(0);
249         }
250         return formats;
251     }
252 
253     public void setFormats(List<FormatInfo> formats) {
254         this.formats = formats;
255     }
256 
257     /**
258      * Terms in which this Course is typically offered.
259      */
260     public List<String> getTermsOffered() {
261         if (termsOffered == null) {
262             termsOffered = new ArrayList<String>(0);
263         }
264         return termsOffered;
265     }
266 
267     public void setTermsOffered(List<String> termsOffered) {
268         this.termsOffered = termsOffered;
269     }
270 
271     /**
272      * The standard duration of the Course.
273      */
274     public TimeAmountInfo getDuration() {
275         return duration;
276     }
277 
278     public void setDuration(TimeAmountInfo duration) {
279         this.duration = duration;
280     }
281 
282     /**
283      * 
284      */
285     public List<CourseJointInfo> getJoints() {
286         if (joints == null) {
287             joints = new ArrayList<CourseJointInfo>(0);
288         }
289         return joints;
290     }
291 
292     public void setJoints(List<CourseJointInfo> joints) {
293         this.joints = joints;
294     }
295 
296     /**
297      * 
298      */
299     public List<CourseCrossListingInfo> getCrossListings() {
300         if (crossListings == null) {
301             crossListings = new ArrayList<CourseCrossListingInfo>(0);
302         }
303         return crossListings;
304     }
305 
306     public void setCrossListings(List<CourseCrossListingInfo> crossListings) {
307         this.crossListings = crossListings;
308     }
309 
310     /**
311      * 
312      */
313     public List<CourseVariationInfo> getVariations() {
314         if (variations == null) {
315             variations = new ArrayList<CourseVariationInfo>(0);
316         }
317         return variations;
318     }
319 
320     public void setVariations(List<CourseVariationInfo> variations) {
321         this.variations = variations;
322     }
323 
324     /**
325      * The Study Subject Area is used to identify the area of study associated with the course. It may be a general study area (e.g. Chemistry) or very specific (e.g. Naval Architecture).
326      */
327     public String getSubjectArea() {
328         return subjectArea;
329     }
330 
331     public void setSubjectArea(String subjectArea) {
332         this.subjectArea = subjectArea;
333     }
334 
335     /**
336      * Places where this course might be offered
337      */
338     public List<String> getCampusLocations() {
339         if (campusLocations == null) {
340             campusLocations = new ArrayList<String>(0);
341         }
342         return campusLocations;
343     }
344 
345     public void setCampusLocations(List<String> campusLocations) {
346         this.campusLocations = campusLocations;
347     }
348 
349     /**
350      * The expected level of out of class time commitment between the student and the course.
351      */
352     public AmountInfo getOutOfClassHours() {
353         return outOfClassHours;
354     }
355 
356     public void setOutOfClassHours(AmountInfo outOfClassHours) {
357         this.outOfClassHours = outOfClassHours;
358     }
359 
360     /**
361      * Primary potential instructor for the clu. This is primarily for use in advertising the course and may not be the actual instructor.
362      */
363     public CluInstructorInfo getPrimaryInstructor() {
364         return primaryInstructor;
365     }
366 
367     public void setPrimaryInstructor(CluInstructorInfo primaryInstructor) {
368         this.primaryInstructor = primaryInstructor;
369     }
370 
371     /**
372      * Instructors associated with this course.
373      */
374     public List<CluInstructorInfo> getInstructors() {
375         if (instructors == null) {
376             instructors = new ArrayList<CluInstructorInfo>(0);
377         }
378         return instructors;
379     }
380 
381     public void setInstructors(List<CluInstructorInfo> instructors) {
382         this.instructors = instructors;
383     }
384 
385 
386     public List<String> getUnitsDeployment() {
387     	if(unitsDeployment == null){
388     		unitsDeployment = new ArrayList<String>(0);
389     	}
390         return unitsDeployment;
391     }
392     
393     /**
394      * Narrative description of overall course fee justification.
395      */
396     public RichTextInfo getFeeJustification() {
397        return feeJustification;
398 
399     }
400 
401 
402     public void setUnitsDeployment(List<String> unitsDeployment) {
403         this.unitsDeployment = unitsDeployment;
404     }
405     
406     public void setFeeJustification(RichTextInfo feeJustification) {
407         this.feeJustification = feeJustification;
408 
409     }
410 
411     public List<String> getUnitsContentOwner() {
412     	if(unitsContentOwner == null){
413     		unitsContentOwner = new ArrayList<String>(0);
414     	}
415     	return unitsContentOwner;
416     }
417     
418     /**
419      * Fees information associated with this Course.
420      */
421     public List<CourseFeeInfo> getFees() {
422         if (fees == null) {
423             fees = new ArrayList<CourseFeeInfo>(0);
424         }
425         return fees;
426 
427     }
428 
429     public void setUnitsContentOwner(List<String> unitsContentOwner) {
430         this.unitsContentOwner = unitsContentOwner;
431     }
432     
433     public void setFees(List<CourseFeeInfo> fees) {
434         this.fees = fees;
435     }
436 
437     /**
438      * Revenue information associated with this Course.
439      */
440     public List<CourseRevenueInfo> getRevenues() {
441         if (revenues == null) {
442             revenues = new ArrayList<CourseRevenueInfo>(0);
443         }
444         return revenues;
445     }
446 
447     public void setRevenues(List<CourseRevenueInfo> revenues) {
448         this.revenues = revenues;
449     }
450 
451     /**
452      * Expenditure information associated with this Course.
453      */
454     public CourseExpenditureInfo getExpenditure() {
455         return expenditure;
456     }
457 
458     public void setExpenditure(CourseExpenditureInfo expenditure) {
459         this.expenditure = expenditure;
460     }
461 
462     /**
463      * Learning Objectives associated with this Course.
464      */
465     public List<LoDisplayInfo> getCourseSpecificLOs() {
466         if (courseSpecificLOs == null) {
467             courseSpecificLOs = new ArrayList<LoDisplayInfo>(0);
468         }
469         return courseSpecificLOs;
470     }
471 
472     public void setCourseSpecificLOs(List<LoDisplayInfo> courseSpecificLOs) {
473         this.courseSpecificLOs = courseSpecificLOs;
474     }
475 
476     /**
477      * Grading opitons available for the course
478      */
479     public List<String> getGradingOptions() {
480         if (gradingOptions == null) {
481             gradingOptions = new ArrayList<String>(0);
482         }
483         return gradingOptions;
484     }
485 
486     public void setGradingOptions(List<String> gradingOptions) {
487         this.gradingOptions = gradingOptions;
488     }
489 
490     /**
491      * Credit outcomes from taking the course
492      */
493     public List<ResultComponentInfo> getCreditOptions() {
494         if (creditOptions == null) {
495             creditOptions = new ArrayList<ResultComponentInfo>(0);
496         }
497         return creditOptions;
498     }
499 
500     public void setCreditOptions(List<ResultComponentInfo> creditOptions) {
501         this.creditOptions = creditOptions;
502     }
503 
504     /**
505      * Flag to indicate the course as a special topics course
506      */
507     public boolean isSpecialTopicsCourse() {
508         return specialTopicsCourse;
509     }
510 
511     public void setSpecialTopicsCourse(boolean specialTopicsCourse) {
512         this.specialTopicsCourse = specialTopicsCourse;
513     }
514 
515     /**
516      * Flag to indicate a one-time or pilot course, which is likely to have expedited approval process
517      */
518     public boolean isPilotCourse() {
519         return pilotCourse;
520     }
521 
522     public void setPilotCourse(boolean pilotCourse) {
523         this.pilotCourse = pilotCourse;
524     }
525 
526     /**
527      * The first academic time period that this Course would be effective.
528      */
529     public String getStartTerm() {
530         return startTerm;
531     }
532 
533     public void setStartTerm(String startTerm) {
534         this.startTerm = startTerm;
535     }
536 
537     /**
538      * The last academic time period that this Course would be effective.
539      */
540     public String getEndTerm() {
541         return endTerm;
542     }
543 
544     public void setEndTerm(String endTerm) {
545         this.endTerm = endTerm;
546     }
547 
548     /**
549      * Date and time the Course became effective. This is a similar concept to the effective date on enumerated values. When an expiration date has been specified, this field must be less than or equal to the expiration date.
550      */
551     public Date getEffectiveDate() {
552         return effectiveDate;
553     }
554 
555     public void setEffectiveDate(Date effectiveDate) {
556         this.effectiveDate = effectiveDate;
557     }
558 
559     /**
560      * Date and time that this Course expires. This is a similar concept to the expiration date on enumerated values. If specified, this should be greater than or equal to the effective date. If this field is not specified, then no expiration date has been currently defined and should automatically be considered greater than the effective date.
561      */
562     public Date getExpirationDate() {
563         return expirationDate;
564     }
565 
566     public void setExpirationDate(Date expirationDate) {
567         this.expirationDate = expirationDate;
568     }
569 
570     /**
571      * List of key/value pairs, typically used for dynamic attributes.
572      */
573     public Map<String, String> getAttributes() {
574         if (attributes == null) {
575             attributes = new HashMap<String, String>();
576         }
577         return attributes;
578     }
579 
580     public void setAttributes(Map<String, String> attributes) {
581         this.attributes = attributes;
582     }
583 
584     /**
585      * Create and last update info for the structure. This is optional and treated as read only since the data is set by the internals of the service during maintenance operations.
586      */
587     public MetaInfo getMetaInfo() {
588         return metaInfo;
589     }
590 
591     public void setMetaInfo(MetaInfo metaInfo) {
592         this.metaInfo = metaInfo;
593     }
594 
595     /**
596      * Unique identifier for a learning unit type. Once set at create time, this field may not be updated.
597      */
598     public String getType() {
599         return type;
600     }
601 
602     public void setType(String type) {
603         this.type = type;
604     }
605 
606     /**
607      * The current status of the course. The values for this field are constrained to those in the luState enumeration. A separate setup operation does not exist for retrieval of the meta data around this value. This field may not be updated through updating this structure and must instead be updated through a dedicated operation.
608      */
609     public String getState() {
610         return state;
611     }
612 
613     public void setState(String state) {
614         this.state = state;
615     }
616 
617     /**
618      * Unique identifier for a Course. This is optional, due to the identifier being set at the time of creation. Once the Course has been created, this should be seen as required.
619      */
620     public String getId() {
621         return id;
622     }
623 
624     public void setId(String id) {
625         this.id = id;
626     }
627 
628     public VersionInfo getVersionInfo() {
629 		return versionInfo;
630 	}
631 
632 	public void setVersionInfo(VersionInfo versionInfo) {
633 		this.versionInfo = versionInfo;
634 	}    
635 }