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 }