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.entity; 017 018 import java.util.Date; 019 import java.util.List; 020 021 import javax.persistence.AttributeOverride; 022 import javax.persistence.AttributeOverrides; 023 import javax.persistence.CascadeType; 024 import javax.persistence.Column; 025 import javax.persistence.Embedded; 026 import javax.persistence.Entity; 027 import javax.persistence.JoinColumn; 028 import javax.persistence.JoinTable; 029 import javax.persistence.ManyToOne; 030 import javax.persistence.NamedQueries; 031 import javax.persistence.NamedQuery; 032 import javax.persistence.OneToMany; 033 import javax.persistence.OneToOne; 034 import javax.persistence.Table; 035 import javax.persistence.Temporal; 036 import javax.persistence.TemporalType; 037 import javax.persistence.UniqueConstraint; 038 039 import org.kuali.student.core.entity.Amount; 040 import org.kuali.student.core.entity.AttributeOwner; 041 import org.kuali.student.core.entity.TimeAmount; 042 import org.kuali.student.core.entity.VersionEntity; 043 044 @Entity 045 @Table(name = "KSLU_CLU", uniqueConstraints={@UniqueConstraint(columnNames={"VER_IND_ID", "SEQ_NUM"})} ) 046 @NamedQueries( { 047 //FIXME dates should be either set from the DB time as part of the insert statement, or set from the application. 048 //DB timestamp (CURRENT_TIMESTAMP) is preferred 049 @NamedQuery(name = "Clu.findCurrentVersionInfo", query = "SELECT " + 050 "NEW org.kuali.student.core.versionmanagement.dto.VersionDisplayInfo(c.id, c.version.versionIndId, c.version.sequenceNumber, c.version.currentVersionStart, c.version.currentVersionEnd, c.version.versionComment, c.version.versionedFromId) " + 051 "FROM Clu c " + 052 "WHERE c.version.versionIndId = :versionIndId " + 053 "AND c.version.currentVersionStart <= :currentTime AND (c.version.currentVersionEnd > :currentTime OR c.version.currentVersionEnd IS NULL)"), 054 @NamedQuery(name = "Clu.findCurrentVersionOnDate", query = "SELECT " + 055 "NEW org.kuali.student.core.versionmanagement.dto.VersionDisplayInfo(c.id, c.version.versionIndId, c.version.sequenceNumber, c.version.currentVersionStart, c.version.currentVersionEnd, c.version.versionComment, c.version.versionedFromId) " + 056 "FROM Clu c " + 057 "WHERE c.version.versionIndId = :versionIndId " + 058 "AND c.version.currentVersionStart <= :date AND (c.version.currentVersionEnd > :date OR c.version.currentVersionEnd IS NULL)"), 059 @NamedQuery(name = "Clu.findFirstVersion", query = "SELECT " + 060 "NEW org.kuali.student.core.versionmanagement.dto.VersionDisplayInfo(c.id, c.version.versionIndId, c.version.sequenceNumber, c.version.currentVersionStart, c.version.currentVersionEnd, c.version.versionComment, c.version.versionedFromId) " + 061 "FROM Clu c " + 062 "WHERE c.version.versionIndId = :versionIndId " + 063 "AND c.version.sequenceNumber IN (SELECT MIN(nc.version.sequenceNumber) FROM Clu nc WHERE nc.version.versionIndId = :versionIndId)"), 064 @NamedQuery(name = "Clu.findLatestVersion", query = "SELECT " + 065 "NEW org.kuali.student.core.versionmanagement.dto.VersionDisplayInfo(c.id, c.version.versionIndId, c.version.sequenceNumber, c.version.currentVersionStart, c.version.currentVersionEnd, c.version.versionComment, c.version.versionedFromId) " + 066 "FROM Clu c " + 067 "WHERE c.version.versionIndId = :versionIndId " + 068 "AND c.version.sequenceNumber IN (SELECT MAX(nc.version.sequenceNumber) FROM Clu nc WHERE nc.version.versionIndId = :versionIndId)"), 069 @NamedQuery(name = "Clu.findVersionBySequence", query = "SELECT " + 070 "NEW org.kuali.student.core.versionmanagement.dto.VersionDisplayInfo(c.id, c.version.versionIndId, c.version.sequenceNumber, c.version.currentVersionStart, c.version.currentVersionEnd, c.version.versionComment, c.version.versionedFromId) " + 071 "FROM Clu c " + 072 "WHERE c.version.versionIndId = :versionIndId " + 073 "AND c.version.sequenceNumber = :sequenceNumber"), 074 @NamedQuery(name = "Clu.findVersions", query = "SELECT " + 075 "NEW org.kuali.student.core.versionmanagement.dto.VersionDisplayInfo(c.id, c.version.versionIndId, c.version.sequenceNumber, c.version.currentVersionStart, c.version.currentVersionEnd, c.version.versionComment, c.version.versionedFromId) " + 076 "FROM Clu c " + 077 "WHERE c.version.versionIndId = :versionIndId"), 078 @NamedQuery(name = "Clu.findVersionsInDateRange", query = "SELECT " + 079 "NEW org.kuali.student.core.versionmanagement.dto.VersionDisplayInfo(c.id, c.version.versionIndId, c.version.sequenceNumber, c.version.currentVersionStart, c.version.currentVersionEnd, c.version.versionComment, c.version.versionedFromId) " + 080 "FROM Clu c " + 081 "WHERE c.version.versionIndId = :versionIndId " + 082 "AND ( (c.version.currentVersionStart >= :from AND c.version.currentVersionStart < :to)" + 083 " OR (c.version.currentVersionStart < :from AND c.version.currentVersionEnd > :from) )"), 084 @NamedQuery(name = "Clu.findVersionsBeforeDate", query = "SELECT " + 085 "NEW org.kuali.student.core.versionmanagement.dto.VersionDisplayInfo(c.id, c.version.versionIndId, c.version.sequenceNumber, c.version.currentVersionStart, c.version.currentVersionEnd, c.version.versionComment, c.version.versionedFromId) " + 086 "FROM Clu c " + 087 "WHERE c.version.versionIndId = :versionIndId " + 088 "AND c.version.currentVersionStart <= :date"), 089 @NamedQuery(name = "Clu.findVersionsAfterDate", query = "SELECT " + 090 "NEW org.kuali.student.core.versionmanagement.dto.VersionDisplayInfo(c.id, c.version.versionIndId, c.version.sequenceNumber, c.version.currentVersionStart, c.version.currentVersionEnd, c.version.versionComment, c.version.versionedFromId) " + 091 "FROM Clu c " + 092 "WHERE c.version.versionIndId = :versionIndId " + 093 "AND c.version.currentVersionStart >= :date"), 094 @NamedQuery(name = "Clu.findLatestClu", query = "SELECT c FROM Clu c WHERE c.version.versionIndId = :versionIndId AND c.version.sequenceNumber IN (SELECT MAX(nc.version.sequenceNumber) FROM Clu nc WHERE nc.version.versionIndId = :versionIndId)"), 095 @NamedQuery(name = "Clu.findCurrentClu", query = "SELECT c FROM Clu c WHERE c.version.versionIndId = :versionIndId AND c.version.currentVersionStart <= :currentTime AND (c.version.currentVersionEnd > :currentTime OR c.version.currentVersionEnd IS NULL)"), 096 @NamedQuery(name = "Clu.findClusByIdList", query = "SELECT c FROM Clu c WHERE c.id IN (:idList)"), 097 @NamedQuery(name = "Clu.getClusByLuType", query = "SELECT c FROM Clu c WHERE c.state = :luState AND c.luType.id = :luTypeKey"), 098 @NamedQuery(name = "Clu.getClusByRelation", query = "SELECT c FROM Clu c WHERE c.id IN (SELECT ccr.relatedClu.id FROM CluCluRelation ccr WHERE ccr.clu.id = :parentCluId AND ccr.luLuRelationType.id = :luLuRelationTypeKey)") 099 }) 100 public class Clu extends VersionEntity implements AttributeOwner<CluAttribute> { 101 102 @OneToOne(cascade=CascadeType.ALL) 103 @JoinColumn(name = "OFFIC_CLU_ID") 104 private CluIdentifier officialIdentifier; 105 106 @OneToMany(cascade=CascadeType.ALL) 107 @JoinTable(name = "KSLU_CLU_JN_CLU_IDENT", joinColumns = @JoinColumn(name = "CLU_ID"), inverseJoinColumns = @JoinColumn(name = "ALT_CLU_ID")) 108 private List<CluIdentifier> alternateIdentifiers; 109 110 @Column(name = "STDY_SUBJ_AREA") 111 private String studySubjectArea; 112 113 @ManyToOne(cascade=CascadeType.ALL) 114 @JoinColumn(name = "RT_DESCR_ID") 115 private LuRichText descr; 116 117 @OneToMany(cascade=CascadeType.ALL, mappedBy = "clu") 118 private List<CluCampusLocation> campusLocations; 119 120 @OneToMany(cascade=CascadeType.ALL) 121 @JoinTable(name = "KSLU_CLU_JN_ACCRED", joinColumns = @JoinColumn(name = "CLU_ID"), inverseJoinColumns = @JoinColumn(name = "CLU_ACCRED_ID")) 122 private List<CluAccreditation> accreditations; 123 124 @OneToMany(cascade = CascadeType.ALL, mappedBy = "clu") 125 private List<CluAdminOrg> adminOrgs; 126 127 @ManyToOne(cascade=CascadeType.ALL) 128 @JoinColumn(name="PRI_INSTR_ID") 129 private CluInstructor primaryInstructor; 130 131 @OneToMany(cascade=CascadeType.ALL) 132 @JoinTable(name = "KSLU_CLU_JN_CLU_INSTR", joinColumns = @JoinColumn(name = "CLU_ID"), inverseJoinColumns = @JoinColumn(name = "CLU_INSTR_ID")) 133 private List<CluInstructor> instructors; 134 135 @Column(name = "EXP_FIRST_ATP") 136 private String expectedFirstAtp; 137 138 @Column(name = "LAST_ATP") 139 private String lastAtp; 140 141 @Column(name = "LAST_ADMIT_ATP") 142 private String lastAdmitAtp; 143 144 @Temporal(TemporalType.TIMESTAMP) 145 @Column(name = "EFF_DT") 146 private Date effectiveDate; 147 148 @Temporal(TemporalType.TIMESTAMP) 149 @Column(name = "EXPIR_DT") 150 private Date expirationDate; 151 152 @Embedded 153 @AttributeOverrides({ 154 @AttributeOverride(name="unitType", column=@Column(name="CLU_INTSTY_TYPE")), 155 @AttributeOverride(name="unitQuantity", column=@Column(name="CLU_INTSTY_QTY") 156 )}) 157 private Amount intensity; 158 159 @Embedded 160 @Column(name = "STD_DUR") 161 private TimeAmount stdDuration; 162 163 @Column(name = "CAN_CREATE_LUI") 164 private boolean canCreateLui; 165 166 @Column(name = "REF_URL") 167 private String referenceURL; 168 169 @OneToMany(cascade = CascadeType.ALL, mappedBy="clu") 170 private List<LuCode> luCodes; 171 172 @Column(name = "NEXT_REVIEW_PRD") 173 private String nextReviewPeriod; 174 175 @Column(name = "IS_ENRL") 176 private boolean enrollable; 177 178 @OneToMany(cascade=CascadeType.ALL, mappedBy="clu") 179 private List<CluAtpTypeKey> offeredAtpTypes; 180 181 @Column(name = "HAS_EARLY_DROP_DEDLN") 182 private boolean hasEarlyDropDeadline; 183 184 @Column(name = "DEF_ENRL_EST") 185 private int defaultEnrollmentEstimate; 186 187 @Column(name = "DEF_MAX_ENRL") 188 private int defaultMaximumEnrollment; 189 190 @Column(name = "IS_HAZR_DISBLD_STU") 191 private boolean hazardousForDisabledStudents; 192 193 @OneToOne(cascade=CascadeType.ALL) 194 @JoinColumn(name = "FEE_ID") 195 private CluFee fee; 196 197 @OneToOne(cascade=CascadeType.ALL) 198 @JoinColumn(name = "ACCT_ID") 199 private CluAccounting accounting; 200 201 @OneToMany(cascade = CascadeType.ALL, mappedBy = "owner") 202 private List<CluAttribute> attributes; 203 204 @ManyToOne 205 @JoinColumn(name = "LUTYPE_ID") 206 private LuType luType; 207 208 @Column(name = "ST") 209 private String state; 210 211 public LuType getLuType() { 212 return luType; 213 } 214 215 public void setLuType(LuType luType) { 216 this.luType = luType; 217 } 218 219 @Override 220 public List<CluAttribute> getAttributes() { 221 return attributes; 222 } 223 224 @Override 225 public void setAttributes(List<CluAttribute> attributes) { 226 this.attributes = attributes; 227 } 228 229 public CluIdentifier getOfficialIdentifier() { 230 return officialIdentifier; 231 } 232 233 public void setOfficialIdentifier(CluIdentifier officialIdentifier) { 234 this.officialIdentifier = officialIdentifier; 235 } 236 237 public List<CluIdentifier> getAlternateIdentifiers() { 238 return alternateIdentifiers; 239 } 240 241 public void setAlternateIdentifiers(List<CluIdentifier> alternateIdentifiers) { 242 this.alternateIdentifiers = alternateIdentifiers; 243 } 244 245 public String getStudySubjectArea() { 246 return studySubjectArea; 247 } 248 249 public void setStudySubjectArea(String studySubjectArea) { 250 this.studySubjectArea = studySubjectArea; 251 } 252 253 public LuRichText getDescr() { 254 return descr; 255 } 256 257 public void setDescr(LuRichText descr) { 258 this.descr = descr; 259 } 260 261 public List<CluInstructor> getInstructors() { 262 return instructors; 263 } 264 265 public void setInstructors(List<CluInstructor> instructors) { 266 this.instructors = instructors; 267 } 268 269 public Date getEffectiveDate() { 270 return effectiveDate; 271 } 272 273 public void setEffectiveDate(Date effectiveDate) { 274 this.effectiveDate = effectiveDate; 275 } 276 277 public Date getExpirationDate() { 278 return expirationDate; 279 } 280 281 public void setExpirationDate(Date expirationDate) { 282 this.expirationDate = expirationDate; 283 } 284 285 public TimeAmount getStdDuration() { 286 return stdDuration; 287 } 288 289 public void setStdDuration(TimeAmount stdDuration) { 290 this.stdDuration = stdDuration; 291 } 292 293 public boolean isCanCreateLui() { 294 return canCreateLui; 295 } 296 297 public void setCanCreateLui(boolean canCreateLui) { 298 this.canCreateLui = canCreateLui; 299 } 300 301 public String getReferenceURL() { 302 return referenceURL; 303 } 304 305 public void setReferenceURL(String referenceURL) { 306 this.referenceURL = referenceURL; 307 } 308 309 public List<LuCode> getLuCodes() { 310 return luCodes; 311 } 312 313 public void setLuCodes(List<LuCode> luCodes) { 314 this.luCodes = luCodes; 315 } 316 317 public String getNextReviewPeriod() { 318 return nextReviewPeriod; 319 } 320 321 public void setNextReviewPeriod(String nextReviewPeriod) { 322 this.nextReviewPeriod = nextReviewPeriod; 323 } 324 325 public boolean isEnrollable() { 326 return enrollable; 327 } 328 329 public void setEnrollable(boolean enrollable) { 330 this.enrollable = enrollable; 331 } 332 333 public List<CluAtpTypeKey> getOfferedAtpTypes() { 334 return offeredAtpTypes; 335 } 336 337 public void setOfferedAtpTypes(List<CluAtpTypeKey> offeredAtpTypes) { 338 this.offeredAtpTypes = offeredAtpTypes; 339 } 340 341 public boolean isHasEarlyDropDeadline() { 342 return hasEarlyDropDeadline; 343 } 344 345 public void setHasEarlyDropDeadline(boolean hasEarlyDropDeadline) { 346 this.hasEarlyDropDeadline = hasEarlyDropDeadline; 347 } 348 349 public int getDefaultEnrollmentEstimate() { 350 return defaultEnrollmentEstimate; 351 } 352 353 public void setDefaultEnrollmentEstimate(int defaultEnrollmentEstimate) { 354 this.defaultEnrollmentEstimate = defaultEnrollmentEstimate; 355 } 356 357 public int getDefaultMaximumEnrollment() { 358 return defaultMaximumEnrollment; 359 } 360 361 public void setDefaultMaximumEnrollment(int defaultMaximumEnrollment) { 362 this.defaultMaximumEnrollment = defaultMaximumEnrollment; 363 } 364 365 public boolean isHazardousForDisabledStudents() { 366 return hazardousForDisabledStudents; 367 } 368 369 public void setHazardousForDisabledStudents( 370 boolean hazardousForDisabledStudents) { 371 this.hazardousForDisabledStudents = hazardousForDisabledStudents; 372 } 373 374 public CluFee getFee() { 375 return fee; 376 } 377 378 public void setFee(CluFee fee) { 379 this.fee = fee; 380 } 381 382 public CluAccounting getAccounting() { 383 return accounting; 384 } 385 386 public void setAccounting(CluAccounting accounting) { 387 this.accounting = accounting; 388 } 389 390 public String getState() { 391 return state; 392 } 393 394 public void setState(String state) { 395 this.state = state; 396 } 397 398 public CluInstructor getPrimaryInstructor() { 399 return primaryInstructor; 400 } 401 402 public void setPrimaryInstructor(CluInstructor primaryInstructor) { 403 this.primaryInstructor = primaryInstructor; 404 } 405 406 public List<CluCampusLocation> getCampusLocations() { 407 return campusLocations; 408 } 409 410 public void setCampusLocations(List<CluCampusLocation> campusLocationList) { 411 this.campusLocations = campusLocationList; 412 } 413 414 public Amount getIntensity() { 415 return intensity; 416 } 417 418 public void setIntensity(Amount intensity) { 419 this.intensity = intensity; 420 } 421 422 public List<CluAccreditation> getAccreditations() { 423 return accreditations; 424 } 425 426 public void setAccreditations(List<CluAccreditation> accreditations) { 427 this.accreditations = accreditations; 428 } 429 430 431 public List<CluAdminOrg> getAdminOrgs() { 432 return adminOrgs; 433 } 434 435 public void setAdminOrgs(List<CluAdminOrg> adminOrgs) { 436 this.adminOrgs = adminOrgs; 437 } 438 439 public String getExpectedFirstAtp() { 440 return expectedFirstAtp; 441 } 442 443 public void setExpectedFirstAtp(String expectedFirstAtp) { 444 this.expectedFirstAtp = expectedFirstAtp; 445 } 446 447 public String getLastAtp() { 448 return lastAtp; 449 } 450 451 public void setLastAtp(String lastAtp) { 452 this.lastAtp = lastAtp; 453 } 454 455 public String getLastAdmitAtp() { 456 return lastAdmitAtp; 457 } 458 459 public void setLastAdmitAtp(String lastAdmitAtp) { 460 this.lastAdmitAtp = lastAdmitAtp; 461 } 462 }