1 package org.kuali.student.r2.lum.course.infc;
2
3 import java.util.Date;
4 import java.util.List;
5
6 import org.kuali.student.r2.common.infc.Amount;
7 import org.kuali.student.r2.common.infc.IdEntity;
8 import org.kuali.student.r2.common.infc.RichText;
9 import org.kuali.student.r2.common.infc.TimeAmount;
10 import org.kuali.student.r2.core.versionmanagement.infc.Version;
11 import org.kuali.student.r2.lum.clu.infc.CluInstructor;
12 import org.kuali.student.r2.lum.lrc.dto.ResultValuesGroupInfo;
13
14
15 /**
16 * Detailed information about a single course. For specific usage, check the
17 * specific service(s) implementation(s)
18 **/
19
20 public interface Course extends IdEntity {
21
22 /**
23 * Identifier used to officially reference or publish the
24 * course.
25 *
26 * The code is typically unique within a specified context or time period but
27 * it is not intended as a database key or id.
28 *
29 * It may have an internal structure that each Institution may
30 * want to enforce. This structure may be composed from the other parts of
31 * the structure such as Level amp; Division, but may include items such as
32 * the type of the course and whether it has a lab or not.
33 *
34 * @name code
35 */
36 public String getCode();
37
38 /**
39 * The "extra" portion of the code, which usually corresponds with the most
40 * detailed part of the number. Ex. at MIT we might map Division to subject
41 * area(Ex:6) but overall we need to say the code is 6.120. This field would
42 * represent the 120 part.
43 *
44 * @name Course Number Suffix
45 */
46 public String getCourseNumberSuffix();
47
48 /**
49 * A code that indicates what level 100, 200 or upper division, lower
50 * division etc
51 *
52 * @name Level
53 */
54 public String getLevel();
55
56 /**
57 * Abbreviated name of the Course
58 *
59 * @name Course Title
60 */
61 public String getCourseTitle();
62
63 /**
64 * Information related to the official identification of the credit course,
65 * typically in human readable form. Used to officially reference or
66 * publish.
67 *
68 * @name Transcript Title
69 */
70 public String getTranscriptTitle();
71
72 /**
73 * Course Formats
74 *
75 * @name Formats
76 */
77 public List<? extends Format> getFormats();
78
79 /**
80 * Terms in which this Course is typically offered.
81 *
82 * @name Terms Offered
83 */
84 public List<String> getTermsOffered();
85
86 /**
87 * The standard duration of the Course.
88 *
89 * @name Duration
90 */
91 public TimeAmount getDuration();
92
93 /**
94 * Joint Courses
95 *
96 * @name Joints
97 */
98 public List<? extends CourseJoint> getJoints();
99
100 /**
101 * Cross Listed Courses
102 *
103 * @name Cross Listings
104 */
105 public List<? extends CourseCrossListing> getCrossListings();
106
107 /**
108 * Variations
109 *
110 * @name Variations
111 */
112 public List<? extends CourseVariation> getVariations();
113
114 /**
115 * The Study Subject Area is used to identify the area of study associated
116 * with the course. It may be a general study area (e.g. Chemistry) or very
117 * specific (e.g. Naval Architecture).
118 *
119 * @name Subject Area
120 */
121 public String getSubjectArea();
122
123 /**
124 * Places where this course might be offered
125 *
126 * @name Campus Locations
127 */
128 public List<String> getCampusLocations();
129
130 /**
131 * The expected level of out of class time commitment between the student
132 * and the course.
133 *
134 * @name Out of Class Hours
135 */
136 public Amount getOutOfClassHours();
137
138 /**
139 * Primary potential instructor for the course. This is primarily for use in
140 * advertising the course and may not be the actual instructor.
141 *
142 * @name Primary Instructor
143 */
144 public CluInstructor getPrimaryInstructor();
145
146 /**
147 * Instructors associated with this course.
148 *
149 * @name Instructors
150 */
151 public List<? extends CluInstructor> getInstructors();
152
153 /**
154 * Units Responsible for Deploying this course
155 * @name Units Deployment
156 */
157 public List<String> getUnitsDeployment();
158
159 /**
160 * Narrative description of overall course fee justification.
161 *
162 * @name Fee Justification
163 */
164 public RichText getFeeJustification();
165
166 /**
167 * Units Responsible for overseeing the content of this course
168 * @name Units Content Owner
169 */
170 public List<String> getUnitsContentOwner();
171
172 /**
173 * Fees information associated with this Course.
174 *
175 * @name Fees
176 */
177 public List<? extends CourseFee> getFees();
178
179 /**
180 * Revenue information associated with this Course.
181 *
182 * @name Revenues
183 */
184 public List<? extends CourseRevenue> getRevenues();
185
186 /**
187 * Expenditure information associated with this Course.
188 *
189 * @name Expenditure
190 */
191 public CourseExpenditure getExpenditure();
192
193 /**
194 * Learning Objectives associated with this Course.
195 *
196 * @name Course Specific Learning Objectives
197 */
198 public List<? extends LoDisplay> getCourseSpecificLOs();
199
200 /**
201 * Grading options available for the course
202 *
203 * @name Grading Options
204 */
205 public List<String> getGradingOptions();
206
207 /**
208 * Credit outcomes from taking the course
209 *
210 * @name Credit Options
211 */
212 public List<ResultValuesGroupInfo> getCreditOptions();
213
214 /**
215 * Flag to indicate the course as a special topics course
216 *
217 * @name Special Topics Course?
218 */
219 public boolean isSpecialTopicsCourse();
220
221 /**
222 * Flag to indicate a one-time or pilot course, which is likely to have
223 * expedited approval process
224 *
225 * @name Pilot Course?
226 */
227 public boolean isPilotCourse();
228
229 /**
230 * The first academic time period that this Course would be effective.
231 *
232 * @name Start Term
233 */
234 public String getStartTerm();
235
236 /**
237 * The last academic time period that this Course would be effective.
238 *
239 * @name End Term
240 */
241 public String getEndTerm();
242
243 /**
244 * Date and time the Course became effective. This is a similar concept to
245 * the effective date on enumerated values. When an expiration date has been
246 * specified, this field must be less than or equal to the expiration date.
247 *
248 * @name Effective Date
249 */
250 public Date getEffectiveDate();
251
252 /**
253 * Date and time that this Course expires. This is a similar concept to the
254 * expiration date on enumerated values. If specified, this should be
255 * greater than or equal to the effective date. If this field is not
256 * specified, then no expiration date has been currently defined and should
257 * automatically be considered greater than the effective date.
258 *
259 * @name Expiration Date
260 */
261 public Date getExpirationDate();
262
263 /**
264 * Version of this course
265 *
266 * @name Version
267 */
268 public Version getVersion();
269 }