| Classes in this File | Line Coverage | Branch Coverage | Complexity | ||||
| CourseOffering |
|
| 1.0;1 |
| 1 | /* | |
| 2 | * Copyright 2010 The Kuali Foundation | |
| 3 | * | |
| 4 | * Licensed under the Educational Community License, Version 2.0 (the | |
| 5 | * "License"); you may not use this file except in compliance with the | |
| 6 | * License. You may obtain a copy of the License at | |
| 7 | * | |
| 8 | * http://www.osedu.org/licenses/ECL-2.0 | |
| 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 | |
| 13 | * implied. See the License for the specific language governing | |
| 14 | * permissions and limitations under the License. | |
| 15 | */ | |
| 16 | ||
| 17 | package org.kuali.student.enrollment.courseoffering.infc; | |
| 18 | ||
| 19 | import org.kuali.student.r2.common.infc.IdNamelessEntity; | |
| 20 | import org.kuali.student.r2.common.infc.RichText; | |
| 21 | ||
| 22 | import java.util.List; | |
| 23 | ||
| 24 | /** | |
| 25 | * @author Kamal | |
| 26 | */ | |
| 27 | ||
| 28 | public interface CourseOffering extends IdNamelessEntity{ | |
| 29 | ||
| 30 | /** | |
| 31 | * A unique identifier assigned to all approved courses that exist | |
| 32 | * in the catalog This is not updatable once initialized. | |
| 33 | * | |
| 34 | * @name Course Id | |
| 35 | * @readOnly | |
| 36 | * @required | |
| 37 | * @impl this maps the the version dependent id as the offering | |
| 38 | * must point to one and only one version of the | |
| 39 | * course. Maps to cluId in Lui. | |
| 40 | */ | |
| 41 | public String getCourseId(); | |
| 42 | ||
| 43 | /** | |
| 44 | * Academic term of course offering | |
| 45 | * | |
| 46 | * @name Term Id | |
| 47 | * @readOnly on updates | |
| 48 | * @required | |
| 49 | * @impl set during the #createCourseOffering and then maps to | |
| 50 | * the aptKey on the Lui | |
| 51 | */ | |
| 52 | public String getTermId(); | |
| 53 | ||
| 54 | /** | |
| 55 | * Custom Description for the course Offering. | |
| 56 | * | |
| 57 | * @name Course Offering Description | |
| 58 | */ | |
| 59 | public RichText getDescr(); | |
| 60 | ||
| 61 | /** | |
| 62 | * Identifies the number of a course as reflected in the course catalog. | |
| 63 | * This typically must be unique across all courses offered during that | |
| 64 | * term. If the user wants to create two separate offerings for the same | |
| 65 | * course they must modify this code to make it unique. For example: An | |
| 66 | * on-line offering of the course might have an "O" appended to it to | |
| 67 | * distinguish it from the face to face offering, i.e. ENG101 and ENG101O | |
| 68 | * Initially copied from the course catalog but then, depending on the | |
| 69 | * configuration it may be updatable. Often this field is configured so that | |
| 70 | * it is not not directly updatable but rather is calculated from it's two | |
| 71 | * constituent parts, the subject area and the course number suffix. For | |
| 72 | * example: Subject Area = "ENG" and Suffix = "101" then code = "ENG101" | |
| 73 | * | |
| 74 | * @name Course Offering Code | |
| 75 | * @impl initialially this is copied from the course catalog code but then | |
| 76 | * is subsequently stored in the lui as lui.officialIdentifier.code | |
| 77 | */ | |
| 78 | public String getCourseOfferingCode(); | |
| 79 | ||
| 80 | /** | |
| 81 | * Identifies the department and/subject code of the course as reflected in | |
| 82 | * the course catalog. Initially copied from the course catalog but then, | |
| 83 | * depending on the configuration it may be updatable. In most | |
| 84 | * configurations this should not be updatable. Often used in the | |
| 85 | * calculation of the courseCode | |
| 86 | * | |
| 87 | * @name Subject Area | |
| 88 | * @impl initially copied from the canonical course but then stored in the | |
| 89 | * Lui as lui.officialIdentifier.division | |
| 90 | */ | |
| 91 | public String getSubjectArea(); | |
| 92 | ||
| 93 | /** | |
| 94 | * A suffix of the course number as reflected in the college catalog. This | |
| 95 | * is the "number" portion of the course code. Initially copied from the | |
| 96 | * course catalog but then, depending on the configuration it may be | |
| 97 | * updatable. This field is often configured to be updatable but the updates | |
| 98 | * typically simply append something like an "O" for on-line to it to | |
| 99 | * differentiate multiple course offerings for the same course. Often used | |
| 100 | * in the calculation of the courseCode. | |
| 101 | * | |
| 102 | * @name Course Number Suffix | |
| 103 | * @impl initially copied from the canonical course but then stored in the | |
| 104 | * Lui as lui.officialIdentifier.suffixCode | |
| 105 | */ | |
| 106 | public String getCourseNumberSuffix(); | |
| 107 | ||
| 108 | /** | |
| 109 | * Name of the course used in the college catalog. Initially copied from the | |
| 110 | * course catalog but then, depending on the configuration it may be | |
| 111 | * updatable. For regular courses this is not generally allowed to be | |
| 112 | * updated on the offering, but for special topics courses this is often | |
| 113 | * overridden to capture the particular topic being taught offered this | |
| 114 | * term. Note: the configuration of the validation for titles is typically | |
| 115 | * restricted to exclude line breaks. This may have to be loosened as some | |
| 116 | * schools may want the particular topic to appear on a 2nd line. For | |
| 117 | * example: SPECIAL TOPICS: AN EXPLORATION OF DEEP SPACE ARTIFACTS | |
| 118 | * l | |
| 119 | * @name Course Title | |
| 120 | * @impl initially copied from the canonical course but then stored in the | |
| 121 | * Lui as lui.officialIdentifier.longName | |
| 122 | */ | |
| 123 | public String getCourseOfferingTitle(); | |
| 124 | ||
| 125 | /** | |
| 126 | * Indicates that the entire course offering is an Honors Course ??? Is this | |
| 127 | * an enrollment restriction rule or a flag or both? | |
| 128 | * | |
| 129 | * @name Is Honors Offering | |
| 130 | * @impl store in a generic lui luCodes type of field? | |
| 131 | */ | |
| 132 | public Boolean getIsHonorsOffering(); | |
| 133 | ||
| 134 | /** | |
| 135 | * Total maximum number of "seats" or enrollment slots that can be filled | |
| 136 | * for the offering. Calculated based on sum of all the maximum seats of | |
| 137 | * primary activity type offerings. | |
| 138 | * | |
| 139 | * @name Maximum Enrollment | |
| 140 | * @impl maps to Lui.maximumEnrollment | |
| 141 | */ | |
| 142 | public Integer getMaximumEnrollment(); | |
| 143 | ||
| 144 | /** | |
| 145 | * Total minimum number of seats that must be filled for the offering not to | |
| 146 | * be canceled. Calculated based on sum of all the minimum seats of primary | |
| 147 | * activity type offerings | |
| 148 | * | |
| 149 | * @name Minimum Enrollment | |
| 150 | * @impl maps to Lui.minimumEnrollment | |
| 151 | */ | |
| 152 | public Integer getMinimumEnrollment(); | |
| 153 | ||
| 154 | /** | |
| 155 | * The unique identifier of the other course offerings with which this | |
| 156 | * offering is joint-listed | |
| 157 | * | |
| 158 | * @name Joint Offering Ids | |
| 159 | * @readOnly I think? | |
| 160 | * @impl Canonical might suggest offerings that can be jointly offered. This | |
| 161 | * is stored as a luiluirelation of joint type | |
| 162 | */ | |
| 163 | public List<String> getJointOfferingIds(); | |
| 164 | ||
| 165 | /******** Assessment Information ***************/ | |
| 166 | /** | |
| 167 | * The options/scales that indicate the allowable grades that can be | |
| 168 | * awarded. Typically the values here are constrained by the values on the | |
| 169 | * canonical course. If the value is set here then the Clu must have a | |
| 170 | * grading option set on the canonical activity. For example: an id might | |
| 171 | * point to Pass/Fail or Letter Graded option. | |
| 172 | * | |
| 173 | * @name: Grading Option Ids | |
| 174 | * @impl these are actually Ids to ResultValuesGroup. Lui.resultOptionIds | |
| 175 | * returns a list of resultOptions. Filter options with grading type | |
| 176 | * and those should give the resultValueGroupIds | |
| 177 | */ | |
| 178 | public List<String> getGradingOptionIds(); | |
| 179 | ||
| 180 | /** | |
| 181 | * Type of credit of course offering. This field is initially copied from | |
| 182 | * the canonical course but then, depending on configuration, it may be | |
| 183 | * updated. TODO: figure out which of the credit options will be copied down | |
| 184 | * because the canonical has more than one! Often it is just a fixed single | |
| 185 | * value but a ResultValuesGroup could contain a range (with increments) or | |
| 186 | * even a discrete list of possible credit values. | |
| 187 | * | |
| 188 | * @name Credit Options | |
| 189 | * @impl Lui.resultOptionIds returns a list of resultOptions. Filter option | |
| 190 | * with credit type and that should give the resultValueGroup | |
| 191 | */ | |
| 192 | public List<String> getCreditOptionIds(); | |
| 193 | ||
| 194 | ||
| 195 | ||
| 196 | /******** Personnel Information *****************/ | |
| 197 | ||
| 198 | /** | |
| 199 | * Instructors for this course offering TODO: find out if the canonical | |
| 200 | * instructors should be copied down | |
| 201 | * | |
| 202 | * @name Instructors | |
| 203 | * @impl These are derived from Lui Person relations with instructor type | |
| 204 | */ | |
| 205 | public List<? extends OfferingInstructor> getInstructors(); | |
| 206 | ||
| 207 | /********* Organization Information **************/ | |
| 208 | ||
| 209 | /** | |
| 210 | * Organization(s) that is responsible for administering the course delivery | |
| 211 | * - and all associated logistics - of the course Initially copied from the | |
| 212 | * canonical course then, depending on the configuration, updated This is | |
| 213 | * typically an academic department but could be for example the extended | |
| 214 | * studies office that is responsible for delivering the course even though | |
| 215 | * it's content is managed by an academic department. | |
| 216 | * | |
| 217 | * @name Units Deployment | |
| 218 | * @impl initalized from canonical course units deployment but then stored | |
| 219 | * in lui.unitsDeployment | |
| 220 | */ | |
| 221 | public List<String> getUnitsDeploymentOrgIds(); | |
| 222 | ||
| 223 | /** | |
| 224 | * Organization(s) that is responsible for the academic content of the | |
| 225 | * course as approved in its canonical form. This is the organization that | |
| 226 | * has oversight of the curriculum. This is typically an academic | |
| 227 | * department. | |
| 228 | * | |
| 229 | * @name Units Content Owner | |
| 230 | * @readOnly on updates | |
| 231 | * @impl this is never updatable so it should just be grabbed from the | |
| 232 | * canonical course and then stored in lui.unitsContentOwner | |
| 233 | */ | |
| 234 | public List<String> getUnitsContentOwnerOrgIds(); | |
| 235 | ||
| 236 | ||
| 237 | ||
| 238 | /*********** Waitlist *****************************/ | |
| 239 | ||
| 240 | /* | |
| 241 | * TODO: Skip this section for core slice development | |
| 242 | */ | |
| 243 | ||
| 244 | /** | |
| 245 | * Indicates whether a RegistrationGroup has a waitlist TODO: figure out how | |
| 246 | * to store this TODO: make sure we are consistent on how we spell Waitlist, | |
| 247 | * should be spelled Waitlist, or Wait List or Wait-List (as the | |
| 248 | * merriam-webster has it) | |
| 249 | * | |
| 250 | * @name Has Waitlist | |
| 251 | * @impl not sure how to store this, it depends on how we end up | |
| 252 | * implementing waitlists. | |
| 253 | */ | |
| 254 | public Boolean getHasWaitlist(); | |
| 255 | ||
| 256 | /** | |
| 257 | * Indicates the type of waitlist as it relates to processing students on | |
| 258 | * and off The three types predefined in kuali are Automatic, Semi-Automatic | |
| 259 | * and Manual TODO: Right not Waitlist types are not tied to any Waitlist | |
| 260 | * object so we need to define an "other key" to get the list of valid | |
| 261 | * values from the type service. TODO: Decide if we need a separate | |
| 262 | * getHasWaitList, perhaps no value in this field means no waitlist. TODO: | |
| 263 | * Cross validate with hasWaitlist | |
| 264 | * | |
| 265 | * @name Waitlist Type Key | |
| 266 | * @impl TODO: decide if this this should be stored on the Lui or on a | |
| 267 | * waitlist object? | |
| 268 | */ | |
| 269 | public String getWaitlistTypeKey(); | |
| 270 | ||
| 271 | /** | |
| 272 | * Indicates the waitlist level, i.e., CourseOffering or ActivityOffering | |
| 273 | * | |
| 274 | * @name Waitlist Level Type Key | |
| 275 | */ | |
| 276 | ||
| 277 | public String getWaitlistLevelTypeKey(); | |
| 278 | ||
| 279 | /************* Finances ***************************/ | |
| 280 | ||
| 281 | /** | |
| 282 | * The primary source of funding for the offering. | |
| 283 | * | |
| 284 | * @name Funding Source | |
| 285 | * @impl fyi "funding source" is an enumeration values are state support, | |
| 286 | * self-support, contract funding | |
| 287 | */ | |
| 288 | public String getFundingSource(); | |
| 289 | ||
| 290 | /** | |
| 291 | * Flag indicating whether a course is eligible for Financial Aid. Derived | |
| 292 | * from course catalog (canonical) TODO: find a place to store this on the | |
| 293 | * canonical course because it does not currently exist there TODO: Decide | |
| 294 | * if this is really a rule or a CluSet or what? | |
| 295 | * | |
| 296 | * @name Is Financial Aid Eligible | |
| 297 | * @impl TODO: decide where to store | |
| 298 | */ | |
| 299 | public Boolean getIsFinancialAidEligible(); | |
| 300 | ||
| 301 | /** | |
| 302 | * Is this Course Offering Financial aid eligible. (why is this | |
| 303 | * here?) use getIsFinancialAidEligible(). | |
| 304 | * | |
| 305 | * @name Financial Aid Eligible Flag | |
| 306 | */ | |
| 307 | @Deprecated | |
| 308 | public Boolean getFinancialAidEligible(); | |
| 309 | ||
| 310 | /** | |
| 311 | * Places where this Course offering is offered. | |
| 312 | * | |
| 313 | * @name Campus Locations | |
| 314 | */ | |
| 315 | public List<String> getCampusLocations(); | |
| 316 | ||
| 317 | /** | |
| 318 | * Is this a Honors Course offering | |
| 319 | * | |
| 320 | * @name Honors Flag | |
| 321 | */ | |
| 322 | public Boolean getHonorsOffering(); | |
| 323 | ||
| 324 | /** | |
| 325 | * Indicates the type of final exam ('STANDARD', 'ALTERNATE', 'NONE') to be given for this format Offering, if any | |
| 326 | * | |
| 327 | * @name Final Exam Type | |
| 328 | */ | |
| 329 | public String getFinalExamType(); | |
| 330 | ||
| 331 | /** | |
| 332 | * Indicates whether the fee is at activity offering level or | |
| 333 | * course offering level. If true its at Activity Offering level, | |
| 334 | * if false its at CourseOffering level. | |
| 335 | * | |
| 336 | * @name Is Fee at Activity Offering | |
| 337 | */ | |
| 338 | public Boolean getIsFeeAtActivityOffering(); | |
| 339 | ||
| 340 | /** | |
| 341 | * Indicates whether the course offering has an evaluation. | |
| 342 | * | |
| 343 | * @name Is Evaluated | |
| 344 | */ | |
| 345 | public Boolean getIsEvaluated(); | |
| 346 | ||
| 347 | /** | |
| 348 | * Gets the Course Offering URL. | |
| 349 | * | |
| 350 | * @name Course Offering URL | |
| 351 | */ | |
| 352 | public String getCourseOfferingURL(); | |
| 353 | } |