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    }