001 /** 002 * Copyright 2010 The Kuali Foundation Licensed under the 003 * Educational Community License, Version 2.0 (the "License"); you may 004 * not use this file except in compliance with the License. You may 005 * obtain a copy of the License at 006 * 007 * http://www.osedu.org/licenses/ECL-2.0 008 * 009 * Unless required by applicable law or agreed to in writing, 010 * software distributed under the License is distributed on an "AS IS" 011 * BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express 012 * or implied. See the License for the specific language governing 013 * permissions and limitations under the License. 014 */ 015 016 package org.kuali.student.lum.lu.dto; 017 018 import java.io.Serializable; 019 import java.util.ArrayList; 020 import java.util.Date; 021 import java.util.HashMap; 022 import java.util.List; 023 import java.util.Map; 024 025 import javax.xml.bind.annotation.XmlAccessType; 026 import javax.xml.bind.annotation.XmlAccessorType; 027 import javax.xml.bind.annotation.XmlAttribute; 028 import javax.xml.bind.annotation.XmlElement; 029 import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; 030 031 import org.kuali.student.common.dto.AmountInfo; 032 import org.kuali.student.common.dto.HasAttributes; 033 import org.kuali.student.common.dto.HasTypeState; 034 import org.kuali.student.common.dto.Idable; 035 import org.kuali.student.common.dto.MetaInfo; 036 import org.kuali.student.common.dto.RichTextInfo; 037 import org.kuali.student.common.dto.TimeAmountInfo; 038 import org.kuali.student.common.versionmanagement.dto.VersionInfo; 039 import org.kuali.student.core.ws.binding.JaxbAttributeMapListAdapter; 040 041 /** 042 *Detailed information about a single CLU. 043 */ 044 @XmlAccessorType(XmlAccessType.FIELD) 045 public class CluInfo implements Serializable, Idable, HasTypeState, HasAttributes { 046 047 private static final long serialVersionUID = 1L; 048 049 @XmlElement 050 private CluIdentifierInfo officialIdentifier; 051 052 @XmlElement 053 private List<CluIdentifierInfo> alternateIdentifiers; 054 055 @XmlElement 056 private String studySubjectArea; 057 058 @XmlElement 059 private RichTextInfo descr; 060 061 @XmlElement 062 private List<String> campusLocations; 063 064 @XmlElement 065 private List<AccreditationInfo> accreditations; 066 067 @XmlElement 068 private List<AdminOrgInfo> adminOrgs; 069 070 @XmlElement 071 private CluInstructorInfo primaryInstructor; 072 073 @XmlElement 074 private List<CluInstructorInfo> instructors; 075 076 @XmlElement 077 private String expectedFirstAtp; 078 079 @XmlElement 080 private String lastAtp; 081 082 @XmlElement 083 private String lastAdmitAtp; 084 085 @XmlElement 086 private Date effectiveDate; 087 088 @XmlElement 089 private Date expirationDate; 090 091 @XmlElement 092 private AmountInfo intensity; 093 094 @XmlElement 095 private TimeAmountInfo stdDuration; 096 097 @XmlElement 098 private boolean canCreateLui; 099 100 @XmlElement 101 private String referenceURL; 102 103 @XmlElement 104 private List<LuCodeInfo> luCodes; 105 106 @XmlElement 107 private String nextReviewPeriod; 108 109 @XmlElement 110 private boolean isEnrollable; 111 112 @XmlElement 113 private List<String> offeredAtpTypes; 114 115 @XmlElement 116 private boolean hasEarlyDropDeadline; 117 118 @XmlElement 119 private int defaultEnrollmentEstimate; 120 121 @XmlElement 122 private int defaultMaximumEnrollment; 123 124 @XmlElement 125 private boolean isHazardousForDisabledStudents; 126 127 @XmlElement 128 private CluFeeInfo feeInfo; 129 130 @XmlElement 131 private CluAccountingInfo accountingInfo; 132 133 @XmlElement 134 @XmlJavaTypeAdapter(JaxbAttributeMapListAdapter.class) 135 private Map<String, String> attributes; 136 137 @XmlElement 138 private MetaInfo metaInfo; 139 140 @XmlElement 141 private VersionInfo versionInfo; 142 143 @XmlAttribute 144 private String type; 145 146 @XmlAttribute 147 private String state; 148 149 @XmlAttribute 150 private String id; 151 152 153 /** 154 * Information related to the official identification of the clu, typically in human readable form. Used to officially reference or publish. 155 */ 156 public CluIdentifierInfo getOfficialIdentifier() { 157 return officialIdentifier; 158 } 159 160 public void setOfficialIdentifier(CluIdentifierInfo officialIdentifier) { 161 this.officialIdentifier = officialIdentifier; 162 } 163 164 /** 165 * Information related to alternate identifications of the clu, typically in human readable form. Used to reference or publish. 166 */ 167 public List<CluIdentifierInfo> getAlternateIdentifiers() { 168 if (alternateIdentifiers == null) { 169 alternateIdentifiers = new ArrayList<CluIdentifierInfo>(); 170 } 171 return alternateIdentifiers; 172 } 173 174 public void setAlternateIdentifiers(List<CluIdentifierInfo> alternateIdentifiers) { 175 this.alternateIdentifiers = alternateIdentifiers; 176 } 177 178 179 /** 180 * The Study Subject Area is used to identify the area of study associated with the clu. It may be a general study area (e.g. Chemistry) or very specific (e.g. Naval Architecture) depending on the level of specificity of the clu. 181 */ 182 public String getStudySubjectArea() { 183 return studySubjectArea; 184 } 185 186 public void setStudySubjectArea(String studySubjectArea) { 187 this.studySubjectArea = studySubjectArea; 188 } 189 190 /** 191 * Narrative description of the CLU, used for the catalog. 192 */ 193 public RichTextInfo getDescr() { 194 return descr; 195 } 196 197 public void setDescr(RichTextInfo descr) { 198 this.descr = descr; 199 } 200 201 /* 202 * Information around the accreditation of the clu. 203 */ 204 public List<AccreditationInfo> getAccreditations() { 205 if (accreditations == null) { 206 accreditations = new ArrayList<AccreditationInfo>(); 207 } 208 return accreditations; 209 } 210 211 public void setAccreditations(List<AccreditationInfo> accreditations) { 212 this.accreditations = accreditations; 213 } 214 215 /* 216 * Places where this clu might be offered 217 */ 218 public List<String> getCampusLocations() { 219 if (campusLocations == null) { 220 campusLocations = new ArrayList<String>(); 221 } 222 return campusLocations; 223 } 224 225 public void setCampusLocations(List<String> campusLocations) { 226 this.campusLocations = campusLocations; 227 } 228 229 public List<AdminOrgInfo> getAdminOrgs() { 230 if (adminOrgs == null) { 231 adminOrgs = new ArrayList<AdminOrgInfo>(); 232 } 233 return adminOrgs; 234 } 235 236 public void setAdminOrgs(List<AdminOrgInfo> adminOrgs) { 237 this.adminOrgs = adminOrgs; 238 } 239 240 /** 241 * Primary potential instructor for the clu. This is primarily for use in advertising the clu and may not be the actual instructor. 242 */ 243 public CluInstructorInfo getPrimaryInstructor() { 244 return primaryInstructor; 245 } 246 247 public void setPrimaryInstructor(CluInstructorInfo primaryInstructor) { 248 this.primaryInstructor = primaryInstructor; 249 } 250 251 /** 252 * Instructors associated with this clu. This may not be an exhaustive list, and instead may only be used to indicate potential instructors in publication. 253 */ 254 public List<CluInstructorInfo> getInstructors() { 255 if (instructors == null) { 256 instructors = new ArrayList<CluInstructorInfo>(); 257 } 258 return instructors; 259 } 260 261 public void setInstructors(List<CluInstructorInfo> instructors) { 262 this.instructors = instructors; 263 } 264 265 /** 266 * Date and time the CLU 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. 267 */ 268 public Date getEffectiveDate() { 269 return effectiveDate; 270 } 271 272 public void setEffectiveDate(Date effectiveDate) { 273 this.effectiveDate = effectiveDate; 274 } 275 276 /** 277 * Date and time that this CLU 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. 278 */ 279 public Date getExpirationDate() { 280 return expirationDate; 281 } 282 283 public void setExpirationDate(Date expirationDate) { 284 this.expirationDate = expirationDate; 285 } 286 287 /* 288 * The expected level of time commitment between the student and the CLU meetings. 289 */ 290 public AmountInfo getIntensity() { 291 return intensity; 292 } 293 294 public void setIntensity(AmountInfo intensity) { 295 this.intensity = intensity; 296 } 297 298 /** 299 * The standard duration of the learning unit. 300 */ 301 public TimeAmountInfo getStdDuration() { 302 return stdDuration; 303 } 304 305 public void setStdDuration(TimeAmountInfo stdDuration) { 306 this.stdDuration = stdDuration; 307 } 308 309 /** 310 * Indicates if the CLU can be used to instantiate LUIs (offerings). 311 */ 312 public boolean isCanCreateLui() { 313 return canCreateLui; 314 } 315 316 public void setCanCreateLui(boolean canCreateLui) { 317 this.canCreateLui = canCreateLui; 318 } 319 320 /** 321 * An URL for additional information about the CLU. This could be a reference to a document which might in turn have references to other documents (e.g. course syllabus provided by the faculty or department, standard schedule of classes, etc.). 322 */ 323 public String getReferenceURL() { 324 return referenceURL; 325 } 326 327 public void setReferenceURL(String referenceURL) { 328 this.referenceURL = referenceURL; 329 } 330 331 /** 332 * List of LU code info structures. These are structures so that many different types of codes can be associated with the clu. This allows them to be put into categories. 333 */ 334 public List<LuCodeInfo> getLuCodes() { 335 if (luCodes == null) { 336 luCodes = new ArrayList<LuCodeInfo>(); 337 } 338 return luCodes; 339 } 340 341 public void setLuCodes(List<LuCodeInfo> luCodes) { 342 this.luCodes = luCodes; 343 } 344 345 /** 346 * When the next review should be 347 */ 348 public String getNextReviewPeriod() { 349 return nextReviewPeriod; 350 } 351 352 public void setNextReviewPeriod(String nextReviewPeriod) { 353 this.nextReviewPeriod = nextReviewPeriod; 354 } 355 356 /** 357 * Indicates if Luis generated from this Clu are intended to be enrolled in by Students directly 358 */ 359 public boolean isEnrollable() { 360 return isEnrollable; 361 } 362 363 public void setEnrollable(boolean isEnrollable) { 364 this.isEnrollable = isEnrollable; 365 } 366 367 /** 368 * The academic time period types in which this CLU is typically offered. Standard usage would equate to terms. 369 */ 370 public List<String> getOfferedAtpTypes() { 371 if (offeredAtpTypes == null) { 372 offeredAtpTypes = new ArrayList<String>(); 373 } 374 return offeredAtpTypes; 375 } 376 377 public void setOfferedAtpTypes(List<String> offeredAtpTypes) { 378 this.offeredAtpTypes = offeredAtpTypes; 379 } 380 381 /** 382 * Indicates if the CLU has an Early Drop Deadline (EDD). Certain courses are designated as such to maximize access to courses that have historically experienced high demand and high attrition. Default is "false". 383 */ 384 public boolean isHasEarlyDropDeadline() { 385 return hasEarlyDropDeadline; 386 } 387 388 public void setHasEarlyDropDeadline(boolean hasEarlyDropDeadline) { 389 this.hasEarlyDropDeadline = hasEarlyDropDeadline; 390 } 391 392 /** 393 * Default enrollment estimate for this CLU. 394 */ 395 public int getDefaultEnrollmentEstimate() { 396 return defaultEnrollmentEstimate; 397 } 398 399 public void setDefaultEnrollmentEstimate(int defaultEnrollmentEstimate) { 400 this.defaultEnrollmentEstimate = defaultEnrollmentEstimate; 401 } 402 403 /** 404 * Default maximum enrollment for this CLU. 405 */ 406 public int getDefaultMaximumEnrollment() { 407 return defaultMaximumEnrollment; 408 } 409 410 public void setDefaultMaximumEnrollment(int defaultMaximumEnrollment) { 411 this.defaultMaximumEnrollment = defaultMaximumEnrollment; 412 } 413 414 /** 415 * Indicates if the CLU may be hazardous for students with disabilities. Would default to "false". 416 */ 417 public boolean isHazardousForDisabledStudents() { 418 return isHazardousForDisabledStudents; 419 } 420 421 public void setHazardousForDisabledStudents(boolean isHazardousForDisabledStudents) { 422 this.isHazardousForDisabledStudents = isHazardousForDisabledStudents; 423 } 424 425 /** 426 * Fee information associated with this CLU. 427 */ 428 public CluFeeInfo getFeeInfo() { 429 return feeInfo; 430 } 431 432 public void setFeeInfo(CluFeeInfo feeInfo) { 433 this.feeInfo = feeInfo; 434 } 435 436 /** 437 * Accounting information associated with this CLU. 438 */ 439 public CluAccountingInfo getAccountingInfo() { 440 return accountingInfo; 441 } 442 443 public void setAccountingInfo(CluAccountingInfo accountingInfo) { 444 this.accountingInfo = accountingInfo; 445 } 446 447 /** 448 * List of key/value pairs, typically used for dynamic attributes. 449 */ 450 public Map<String, String> getAttributes() { 451 if (attributes == null) { 452 attributes = new HashMap<String, String>(); 453 } 454 return attributes; 455 } 456 457 public void setAttributes(Map<String, String> attributes) { 458 this.attributes = attributes; 459 } 460 461 /** 462 * 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. 463 */ 464 public MetaInfo getMetaInfo() { 465 return metaInfo; 466 } 467 468 public void setMetaInfo(MetaInfo metaInfo) { 469 this.metaInfo = metaInfo; 470 } 471 472 473 public VersionInfo getVersionInfo() { 474 return versionInfo; 475 } 476 477 public void setVersionInfo(VersionInfo versionInfo) { 478 this.versionInfo = versionInfo; 479 } 480 481 /** 482 * Unique identifier for a learning unit type. Once set at create time, this field may not be updated. 483 */ 484 public String getType() { 485 return type; 486 } 487 488 public void setType(String type) { 489 this.type = type; 490 } 491 492 /** 493 * The current status of the clu. 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. 494 */ 495 public String getState() { 496 return state; 497 } 498 499 public void setState(String state) { 500 this.state = state; 501 } 502 503 /** 504 * Unique identifier for a Canonical Learning Unit (CLU). This is optional, due to the identifier being set at the time of creation. Once the CLU has been created, this should be seen as required. 505 */ 506 public String getId() { 507 return id; 508 } 509 510 public void setId(String id) { 511 this.id = id; 512 } 513 514 public String getExpectedFirstAtp() { 515 return expectedFirstAtp; 516 } 517 518 public void setExpectedFirstAtp(String expectedFirstAtp) { 519 this.expectedFirstAtp = expectedFirstAtp; 520 } 521 522 public String getLastAtp() { 523 return lastAtp; 524 } 525 526 public void setLastAtp(String lastAtp) { 527 this.lastAtp = lastAtp; 528 } 529 530 public String getLastAdmitAtp() { 531 return lastAdmitAtp; 532 } 533 534 public void setLastAdmitAtp(String lastAdmitAtp) { 535 this.lastAdmitAtp = lastAdmitAtp; 536 } 537 538 @Override 539 public String toString() { 540 return "CluInfo[id=" + id + ", type=" + type + "]"; 541 } 542 543 }