View Javadoc

1   package org.kuali.student.enrollment.class2.courseoffering.dto;
2   
3   import org.apache.commons.lang.BooleanUtils;
4   import org.apache.commons.lang.StringUtils;
5   import org.kuali.rice.core.api.config.property.ConfigContext;
6   import org.kuali.rice.core.api.util.KeyValue;
7   import org.kuali.student.enrollment.class2.courseoffering.util.ActivityOfferingConstants;
8   import org.kuali.student.enrollment.class2.courseoffering.util.CourseOfferingConstants;
9   import org.kuali.student.enrollment.class2.courseoffering.util.CourseOfferingManagementUtil;
10  import org.kuali.student.enrollment.class2.scheduleofclasses.sort.ComparatorModel;
11  import org.kuali.student.enrollment.courseoffering.dto.ActivityOfferingInfo;
12  import org.kuali.student.enrollment.courseoffering.dto.FormatOfferingInfo;
13  import org.kuali.student.enrollment.courseoffering.dto.OfferingInstructorInfo;
14  import org.kuali.student.enrollment.courseofferingset.dto.SocInfo;
15  import org.kuali.student.enrollment.coursewaitlist.dto.CourseWaitListInfo;
16  import org.kuali.student.r2.common.dto.AttributeInfo;
17  import org.kuali.student.r2.common.util.constants.CourseOfferingSetServiceConstants;
18  import org.kuali.student.r2.common.util.constants.LuiServiceConstants;
19  import org.kuali.student.r2.core.acal.dto.TermInfo;
20  import org.kuali.student.r2.core.population.dto.PopulationInfo;
21  import org.kuali.student.r2.core.scheduling.dto.ScheduleRequestSetInfo;
22  import org.kuali.student.r2.lum.course.dto.CourseInfo;
23  import org.kuali.student.r2.lum.course.infc.CourseCrossListing;
24  
25  import java.io.Serializable;
26  import java.util.ArrayList;
27  import java.util.Date;
28  import java.util.HashMap;
29  import java.util.List;
30  
31  /**
32   * Main model object in Edit AO view.
33   *
34   * @see ColocatedActivity
35   *
36   */
37  public class ActivityOfferingWrapper implements Serializable, ComparatorModel{
38  
39      private String waitListType;
40      private String waitListTypeUI;
41  
42      private String aoClusterName;
43      private String aoClusterID;
44      private ActivityOfferingInfo aoInfo;
45      private FormatOfferingInfo formatOffering;
46      private List<OfferingInstructorWrapper> instructors;
47      private List<ScheduleComponentWrapper> scheduleComponentWrappers;
48      private List<SeatPoolWrapper> seatpools;
49      private List<PopulationInfo> populationsForSPValidation;
50      private boolean readOnlyView;
51      private boolean isChecked;
52      private boolean isCheckedByCluster;
53      private String courseOfferingId;
54      private String populationsJSONString;
55  
56      private String stateName;
57      private String typeName;
58      private String typeKey;
59  
60      private String formatOfferingName;
61  
62      private Date termRegStartDate;
63      private String waitListText = "";
64      private String toolTipText = "";
65  
66      private String instructorNameHighestPercentEffort = "";
67  
68      private String firstInstructorDisplayName;
69      private String instructorDisplayNames;
70  
71      private String courseOfferingCode = "";
72  
73      private List<ScheduleWrapper> actualScheduleComponents;
74      private List<ScheduleWrapper> requestedScheduleComponents;
75      private List<ScheduleWrapper> deletedScheduleComponents;
76      private ScheduleWrapper newScheduleRequest;
77  
78      private SocInfo socInfo;
79  
80      private String scheduledState = "";
81      private String startTimeDisplay = "";
82      private String endTimeDisplay = "";
83      private String daysDisplayName = "";
84      private String buildingName = "";
85      private String buildingCode = "";
86      private String bldgCodeSimple = "";
87      private String roomName = "";
88      private String tbaDisplayName = "";
89      private String colocatedAoInfo = "";
90  
91      private List<String> startTime;
92      private List<String> endTime;
93      private List<String> weekDays;
94  
95      private boolean schedulesModified;
96  
97      private String adminOrg;
98  
99        //hidden columns for toolbar
100     private boolean enableApproveButton = false;
101     private boolean enableDraftButton = false;
102     private boolean enableSuspendButton = false;
103     private boolean enableCancelButton = false;
104     private boolean enableReinstateButton = false;
105     private boolean enableMoveToButton = false;
106     private boolean enableDeleteButton = false;
107     private boolean enableCopyAOActionLink = false;
108     private boolean enableEditAOActionLink = false;
109 
110     private boolean colocatedAO;
111     private List<ColocatedActivity> colocatedActivities;
112     private boolean maxEnrollmentShared;
113     private boolean hiddenMaxEnrollmentShared;
114     private int sharedMaxEnrollment;
115     private boolean hasSeatpools;
116 
117     private ScheduleRequestSetInfo scheduleRequestSetInfo;
118 
119     private EditRenderHelper editRenderHelper;
120     private boolean isPartOfColoSetOnLoadAlready;
121     private boolean isColocatedOnLoadAlready;
122     private boolean isSendRDLsToSchedulerAfterMSE;
123     private boolean isRemovedFromColoSet;
124     private String reinstateStateName;
125 
126     protected String viewId;
127 
128     private CourseOfferingContextBar contextBar = CourseOfferingContextBar.NULL_SAFE_INSTANCE;
129 
130     //This is needed to display the cross listed courses
131     private CourseInfo course;
132 
133     /*
134     * Always carry the parent or the standard term if any -- Is this because
135     * manage COs/AOs only support search on TermCode but not on subterm?
136     */
137     private TermInfo term;
138     //for Term (name) field display of the parent/standard term on Edit AO page
139     private String termName;
140     //for Sub Term (name) field display on Edit AO page
141     private String subTermName = "";
142     //for Start/End field display on Edit AO page, if subTermId is not empty,
143     //display Start/End date info for the subterm
144     private String termDisplayString = "";
145     //for displaying subterm drop-down list when click change link on Edit AO page
146     //and hold the id value for the selected subterm
147     private String subTermId;
148     //use this boolean to decide if "Change" link should be rendered or not
149     private boolean hasSubTerms;
150     //would it be better to define 'TermInfo subTerm' instead of the following three strings
151     private String termStartEndDate = "";
152 
153     /*
154     This is a list of subTerm start/end date strings to support javascript update of the
155      displayed start/end when subterm is changed/choremoved
156      */
157     private String subTermDatesJsonString;
158 
159     //use this boolean to check if AO has any rule attached to it
160     private boolean hasRule;
161 
162     private SchOfClassesRenderHelper schOfClassesRenderHelper;
163 
164     private CourseWaitListInfo courseWaitListInfo;
165     //indicate at AO level, the state of the waitlist
166     private boolean hasWaitlist;
167     //indicate if wailtlist has been enabled in CO level
168     private boolean hasWaitlistCO;
169     //hold the checkbox value for Limit Waitlist Size
170     private boolean limitWaitlistSize;
171 
172     private String requisite;
173 
174     private boolean isCentralSchedulingCoOrdinator;
175 
176     private String timeSlotType;
177 
178     private String crossListedCourseCodes;
179 
180     /**
181      * Valid modes for creating non-standard timeslots
182      *
183      * The application supports three non-standard timeslot creation modes
184      * 1. Allows the user to create non-standard timeslots
185      * 2. Disallows the user to create non-standard timeslots
186      * 3. Allows the user to create non-standard timeslots, but only with prior approval
187      *
188      * By default, the creation of non-standard timeslots is allowed only with prior approval.  This can be configured via property
189      * kuali.ks.enrollment.timeslots.adhoc_creation_mode
190      */
191     public static enum NonStandardTimeslotCreationMode {
192 
193         ALLOWED,
194         NOT_ALLOWED,
195         NEEDS_APPROVAL;
196 
197         private NonStandardTimeslotCreationMode() { }
198 
199         /**
200          * Returns a value based on the string provided.  If the provided string is null or a match cannot be found,
201          * will return {@link org.kuali.student.enrollment.class2.courseoffering.dto.ActivityOfferingWrapper.NonStandardTimeslotCreationMode#NEEDS_APPROVAL}
202          *
203          * @param text
204          * @return {@link org.kuali.student.enrollment.class2.courseoffering.dto.ActivityOfferingWrapper.NonStandardTimeslotCreationMode}
205          */
206         public static NonStandardTimeslotCreationMode fromString( String text ) {
207             if( text != null ) {
208                 for( NonStandardTimeslotCreationMode m : NonStandardTimeslotCreationMode.values() ) {
209                     if( text.equalsIgnoreCase( m.name() ) ) {
210                         return m;
211                     }
212                 }
213             }
214             return NonStandardTimeslotCreationMode.NEEDS_APPROVAL;
215         }
216 
217     }
218 
219     public ActivityOfferingWrapper(){
220         aoInfo = new ActivityOfferingInfo();
221         instructors = new ArrayList<OfferingInstructorWrapper>();
222         OfferingInstructorWrapper instructorWrapper = new OfferingInstructorWrapper();
223         instructors.add(instructorWrapper);
224         seatpools = new ArrayList<SeatPoolWrapper>();
225         populationsForSPValidation = new ArrayList<PopulationInfo>();
226         aoInfo.setStateKey(LuiServiceConstants.LUI_AO_STATE_DRAFT_KEY);
227         aoInfo.setTypeKey(LuiServiceConstants.LECTURE_ACTIVITY_OFFERING_TYPE_KEY);
228         formatOffering = new FormatOfferingInfo();
229         term = new TermInfo();
230         scheduleComponentWrappers = new ArrayList<ScheduleComponentWrapper>();
231         this.setReadOnlyView(false);
232         this.setIsChecked(false);
233         actualScheduleComponents = new ArrayList<ScheduleWrapper>();
234         requestedScheduleComponents = new ArrayList<ScheduleWrapper>();
235         newScheduleRequest = new ScheduleWrapper();
236         colocatedActivities = new ArrayList<ColocatedActivity>();
237         maxEnrollmentShared = true;
238         editRenderHelper = new EditRenderHelper();
239         deletedScheduleComponents = new ArrayList<ScheduleWrapper>();
240         courseWaitListInfo = new CourseWaitListInfo();
241         hasWaitlist = false;
242         hasWaitlistCO = false;
243         limitWaitlistSize = false;
244         startTime = new ArrayList<String>();
245         endTime = new ArrayList<String>();
246         weekDays = new ArrayList<String>();
247     }
248 
249     public ActivityOfferingWrapper(ActivityOfferingInfo info){
250         this(info,false);
251     }
252 
253     public ActivityOfferingWrapper(ActivityOfferingInfo info,boolean isCentralSchedulingCoOrdinator){
254         this();
255         aoInfo = info;
256         instructors = new ArrayList<OfferingInstructorWrapper>();
257         if(info.getInstructors() == null || info.getInstructors().isEmpty()) {
258             OfferingInstructorWrapper instructorWrapper = new OfferingInstructorWrapper();
259             instructors.add(instructorWrapper);
260         } else if(info.getInstructors().size() > 0) {
261             for(OfferingInstructorInfo instructorInfo : info.getInstructors()) {
262                 OfferingInstructorWrapper instructorWrapper = new OfferingInstructorWrapper(instructorInfo);
263                 if (instructorInfo.getPercentageEffort() != null) {
264                     instructorWrapper.setsEffort(Integer.toString(instructorInfo.getPercentageEffort().intValue()));
265                 }
266                 instructors.add(instructorWrapper);
267             }
268         }
269         seatpools = new ArrayList<SeatPoolWrapper>();
270         populationsForSPValidation = new ArrayList<PopulationInfo>();
271         startTime = new ArrayList<String>();
272         endTime = new ArrayList<String>();
273         weekDays = new ArrayList<String>();
274         this.isCentralSchedulingCoOrdinator = isCentralSchedulingCoOrdinator;
275     }
276 
277     public String getAoClusterName() {
278         return aoClusterName;
279     }
280 
281     public void setAoClusterName(String aoClusterName) {
282         this.aoClusterName = aoClusterName;
283     }
284 
285     public String getAoClusterID() {
286         return aoClusterID;
287     }
288 
289     public void setAoClusterID(String aoClusterID) {
290         this.aoClusterID = aoClusterID;
291     }
292 
293     public boolean isEnableApproveButton() {
294         return enableApproveButton;
295     }
296 
297     public void setEnableApproveButton(boolean enableApproveButton) {
298         this.enableApproveButton = enableApproveButton;
299     }
300 
301     public boolean isEnableDraftButton() {
302         return enableDraftButton;
303     }
304 
305     public void setEnableDraftButton(boolean enableDraftButton) {
306         this.enableDraftButton = enableDraftButton;
307     }
308 
309     public boolean isEnableSuspendButton() {
310         return enableSuspendButton;
311     }
312 
313     public void setEnableSuspendButton(boolean enableSuspendButton) {
314         this.enableSuspendButton = enableSuspendButton;
315     }
316 
317     public boolean isEnableCancelButton() {
318         return enableCancelButton;
319     }
320 
321     public void setEnableCancelButton(boolean enableCancelButton) {
322         this.enableCancelButton = enableCancelButton;
323     }
324 
325     public boolean isEnableMoveToButton() {
326         return enableMoveToButton;
327     }
328 
329     public void setEnableMoveToButton(boolean enableMoveToButton) {
330         this.enableMoveToButton = enableMoveToButton;
331     }
332 
333     public boolean isEnableReinstateButton() {
334         return enableReinstateButton;
335     }
336 
337     public void setEnableReinstateButton(boolean enableReinstateButton) {
338         this.enableReinstateButton = enableReinstateButton;
339     }
340 
341     public boolean isEnableDeleteButton() {
342         return enableDeleteButton;
343     }
344 
345     public void setEnableDeleteButton(boolean enableDeleteButton) {
346         this.enableDeleteButton = enableDeleteButton;
347     }
348 
349     public boolean isEnableCopyAOActionLink() {
350         return enableCopyAOActionLink;
351     }
352 
353     public void setEnableCopyAOActionLink(boolean enableCopyAOActionLink) {
354         this.enableCopyAOActionLink = enableCopyAOActionLink;
355     }
356 
357     public boolean isEnableEditAOActionLink() {
358         return enableEditAOActionLink;
359     }
360 
361     public void setEnableEditAOActionLink(boolean enableEditAOActionLink) {
362         this.enableEditAOActionLink = enableEditAOActionLink;
363     }
364 
365     public String getCourseOfferingCode() {
366         return courseOfferingCode;
367     }
368 
369     public void setCourseOfferingCode(String courseOfferingCode) {
370         this.courseOfferingCode = courseOfferingCode;
371     }
372 
373     public String courseOfferingTitle;
374     public void setCourseOfferingTitle(String courseOfferingTitle) {
375         this.courseOfferingTitle = courseOfferingTitle;
376     }
377 
378     public String getCourseOfferingTitle() {
379         return courseOfferingTitle;
380     }
381 
382     private String credits = "";
383     public String getCredits() {
384         return credits;
385     }
386 
387     public void setCredits(String credits) {
388         this.credits = credits;
389     }
390 
391     private String activityCode = "";
392 
393     public String getActivityCode() {
394         return activityCode;
395     }
396 
397     public void setActivityCode(String activityCode) {
398         this.activityCode = activityCode;
399     }
400 
401     /**
402      * This method returns whether editing of the activity code is allowed or not.
403      * This method reads the configuration property <code>kuali.ks.enrollment.options.edit-activity-offering-code-allowed</code>
404      * and returns it's value (true/false). This is to allow the institutional configuration to decide whether the users
405      * should be allowed to edit the activity code.
406      *
407      * The default is to allow the user to edit the activity code.
408      *
409      * @return boolean based on the configured property
410      */
411     public boolean isEditActivityCodeAllowed() {
412         if( "false".equalsIgnoreCase( ConfigContext.getCurrentContextConfig().getProperty( CourseOfferingConstants.CONFIG_PARAM_KEY_EDIT_ACTIVITY_CODE ) ) ) {
413             return false;
414         }
415 
416         return true;
417     }
418 
419     /**
420      * This method returns the allowed creation-mode of non-standard time-slots.
421      * This method reads the configuration property <code>kuali.ks.enrollment.timeslots.adhoc_creation_mode</code> and
422      * returns it's value (ALLOWED, NOT_ALLOWED, NEEDS_APPROVAL).  This is to allow the institutional configuration to
423      * decide whether or not users should be allowed to create non-standard time-slots.
424      *
425      * The default is to allow the user to create non-standard time-slots, but only with prior approval.
426      *
427      * @return {@link org.kuali.student.enrollment.class2.courseoffering.dto.ActivityOfferingWrapper.NonStandardTimeslotCreationMode}
428      */
429     public NonStandardTimeslotCreationMode getNonStandardTimeslotCreationMode() {
430         String contextConfigProp = ConfigContext.getCurrentContextConfig().getProperty( ActivityOfferingConstants.ConfigProperties.NON_STANDARD_TIMESLOT_CREATION_MODE);
431         return NonStandardTimeslotCreationMode.fromString(contextConfigProp);
432     }
433 
434     public boolean getCanNonStandardTimeslotsBeApproved() {
435         switch( getNonStandardTimeslotCreationMode() ) {
436             case NEEDS_APPROVAL:
437                 return true;
438             default:
439                 return false;
440 
441         }
442     }
443 
444     private String abbreviatedCourseType = "";
445 
446     public String getAbbreviatedCourseType() {
447         return abbreviatedCourseType;
448     }
449 
450     public void setAbbreviatedCourseType(String abbreviatedCourseType) {
451         this.abbreviatedCourseType= abbreviatedCourseType;
452     }
453 
454     public String getTermDisplayString() {
455         return termDisplayString;
456     }
457 
458     public void setTermDisplayString(String termDisplayString) {
459         this.termDisplayString = termDisplayString;
460     }
461 
462     public String getToolTipText() {
463         return toolTipText;
464     }
465 
466     public void setToolTipText(String toolTipText) {
467         this.toolTipText = toolTipText;
468     }
469 
470     public String getWaitListText() {
471         return waitListText;
472     }
473 
474     public void setWaitListText(String waitListText) {
475         this.waitListText = waitListText;
476     }
477 
478     public String getTbaDisplayName() {
479         return tbaDisplayName;
480     }
481 
482     public void setTbaDisplayName(boolean tba,boolean appendForDisplay) {
483         if (appendForDisplay){
484             tbaDisplayName =  tbaDisplayName + "<br>" + (tba ? "TBA" : StringUtils.EMPTY);
485         } else {
486             tbaDisplayName = StringUtils.EMPTY;
487             if (tba){
488                 tbaDisplayName =  "TBA";
489             }
490         }
491     }
492 
493     public FormatOfferingInfo getFormatOffering() {
494         return formatOffering;
495     }
496 
497     public void setFormatOffering(FormatOfferingInfo formatOffering) {
498         this.formatOffering = formatOffering;
499     }
500 
501     public TermInfo getTerm() {
502         return term;
503     }
504 
505     public void setTerm(TermInfo term) {
506         this.term = term;
507     }
508 
509     public String getTermId(){
510         if (term != null){
511             return term.getId();
512         }
513         return StringUtils.EMPTY;
514     }
515 
516     public ActivityOfferingInfo getAoInfo() {
517         return aoInfo;
518     }
519 
520     public void setAoInfo(ActivityOfferingInfo aoInfo) {
521         this.aoInfo = aoInfo;
522     }
523 
524     public List<ScheduleComponentWrapper> getScheduleComponentWrappers() {
525         return scheduleComponentWrappers;
526     }
527 
528     public void setScheduleComponentWrappers(List<ScheduleComponentWrapper> scheduleComponentWrappers) {
529         this.scheduleComponentWrappers = scheduleComponentWrappers;
530     }
531 
532     public boolean getReadOnlyView() {
533         return readOnlyView;
534     }
535 
536     public void setReadOnlyView(boolean readOnlyView) {
537         this.readOnlyView = readOnlyView;
538     }
539 
540     public boolean getIsChecked() {
541         return isChecked;
542     }
543 
544     public void setIsChecked(boolean checked) {
545         this.isChecked = checked;
546     }
547 
548     public boolean getIsCheckedByCluster() {
549         return isCheckedByCluster;
550     }
551 
552     public void setIsCheckedByCluster(boolean checkedByCluster) {
553         isCheckedByCluster = checkedByCluster;
554     }
555 
556     public String getScheduledState() {
557         return scheduledState;
558     }
559 
560     public void setScheduledState(String scheduledState) {
561         this.scheduledState = scheduledState;
562     }
563 
564     public void setScheduledState(String scheduledState,boolean appendForDisplay) {
565         if (appendForDisplay){
566             this.scheduledState = this.scheduledState + "<br>" + StringUtils.defaultString(scheduledState);
567         }else{
568             this.scheduledState = StringUtils.defaultString(scheduledState);
569         }
570     }
571     public void setScheduledState(String scheduledState,boolean appendForDisplay, String dlTypeClass) {
572         String cssClass = "";
573         if(!StringUtils.isEmpty(dlTypeClass)){
574             cssClass = "class=\"" + dlTypeClass + "\"";
575         }
576         if(StringUtils.isEmpty(this.scheduledState)){
577             appendForDisplay = false;
578         }
579         if (appendForDisplay){
580             this.scheduledState = this.scheduledState + "<br><span " + cssClass + " >" + scheduledState + "</span>";
581         }else{
582             this.scheduledState = "<span " + cssClass + " >" + scheduledState + "</span>";
583         }
584     }
585 
586     public String getStateName() {
587         return stateName;
588     }
589 
590     public void setStateName(String stateName) {
591         this.stateName = stateName;
592     }
593 
594     public String getTypeName() {
595         return typeName;
596     }
597 
598     public void setTypeName(String typeName) {
599         this.typeName = typeName;
600     }
601 
602     public String getCourseOfferingId() {
603         return courseOfferingId;
604     }
605 
606     public void setCourseOfferingId(String courseOfferingId) {
607         this.courseOfferingId = courseOfferingId;
608     }
609 
610     public List<OfferingInstructorWrapper> getInstructors() {
611         return instructors;
612     }
613 
614     public void setInstructors(List<OfferingInstructorWrapper> instructors) {
615         this.instructors = instructors;
616     }
617 
618     public List<SeatPoolWrapper> getSeatpools() {
619         return seatpools;
620     }
621 
622     public void setSeatpools(List<SeatPoolWrapper> seatpools) {
623         this.seatpools = seatpools;
624     }
625 
626     public List<PopulationInfo> getPopulationsForSPValidation() {
627         return populationsForSPValidation;
628     }
629 
630     public void setPopulationsForSPValidation(List<PopulationInfo> populationsForSPValidation) {
631         this.populationsForSPValidation = populationsForSPValidation;
632     }
633 
634     public String getFirstInstructorDisplayName() {
635         return firstInstructorDisplayName;
636     }
637 
638     public void setFirstInstructorDisplayName(String firstInstructorDisplayName) {
639         this.firstInstructorDisplayName = firstInstructorDisplayName;
640     }
641 
642     public String getId() {
643         return aoInfo.getId();
644     }
645 
646     public void setId(String id) {
647         aoInfo.setId(id);
648     }
649 
650     public String getTermName() {
651         return termName;
652     }
653 
654     public void setTermName(String termName) {
655         this.termName = termName;
656     }
657 
658     public String getFormatOfferingName() {
659         return formatOfferingName;
660     }
661 
662     public void setFormatOfferingName(String formatOfferingName) {
663         this.formatOfferingName = formatOfferingName;
664     }
665 
666     public String getIsMaxEnrollmentEstimateUI(){
667         return StringUtils.capitalize(BooleanUtils.toStringYesNo(aoInfo.getIsMaxEnrollmentEstimate()));
668     }
669 
670     public String getIsEvaluatedUI(){
671         return StringUtils.capitalize(BooleanUtils.toStringYesNo(aoInfo.getIsEvaluated()));
672     }
673 
674     public String getIsHonorsOfferingUI(){
675         return StringUtils.capitalize(BooleanUtils.toStringYesNo(aoInfo.getIsHonorsOffering()));
676     }
677 
678     public String getInstructorNameHighestPercentEffort() {
679         return instructorNameHighestPercentEffort;
680     }
681 
682     public void setInstructorNameHighestPercentEffort(String instructorNameHighestPercentEffort) {
683         this.instructorNameHighestPercentEffort = instructorNameHighestPercentEffort;
684     }
685 
686     public boolean isLegalToDelete() {
687         if (StringUtils.equals(aoInfo.getStateKey(), LuiServiceConstants.LUI_AO_STATE_DRAFT_KEY) ||
688                 StringUtils.equals(aoInfo.getStateKey(), LuiServiceConstants.LUI_AO_STATE_APPROVED_KEY) ||
689                 StringUtils.equals(aoInfo.getStateKey(), LuiServiceConstants.LUI_AO_STATE_SUBMITTED_KEY) ||
690                 StringUtils.equals(aoInfo.getStateKey(), LuiServiceConstants.LUI_AO_STATE_OFFERED_KEY) ||
691                 StringUtils.equals(aoInfo.getStateKey(), LuiServiceConstants.LUI_CO_STATE_OFFERED_KEY) ) {
692             return true;
693         }
694         return false;
695     }
696 
697     public List<ScheduleWrapper> getActualScheduleComponents() {
698         if (actualScheduleComponents == null){
699             actualScheduleComponents = new ArrayList<ScheduleWrapper>();
700         }
701         return actualScheduleComponents;
702     }
703 
704     public void setActualScheduleComponents(List<ScheduleWrapper> actualScheduleComponents) {
705         this.actualScheduleComponents = actualScheduleComponents;
706     }
707 
708     public List<ScheduleWrapper> getRequestedScheduleComponents() {
709         if (requestedScheduleComponents == null){
710             requestedScheduleComponents = new ArrayList<ScheduleWrapper>();
711         }
712         return requestedScheduleComponents;
713     }
714 
715     public void setRequestedScheduleComponents(List<ScheduleWrapper> requestedScheduleComponents) {
716         this.requestedScheduleComponents = requestedScheduleComponents;
717     }
718 
719     public ScheduleWrapper getNewScheduleRequest() {
720         return newScheduleRequest;
721     }
722 
723     public void setNewScheduleRequest(ScheduleWrapper newScheduleRequest) {
724         this.newScheduleRequest = newScheduleRequest;
725     }
726 
727     public String getStartTimeDisplay() {
728         return startTimeDisplay;
729     }
730 
731     public void setStartTimeDisplay(String startTimeDisplay,boolean appendForDisplay) {
732         if (appendForDisplay){
733             this.startTimeDisplay = this.startTimeDisplay + "<br>" + StringUtils.defaultString(startTimeDisplay);
734         }else{
735             this.startTimeDisplay = StringUtils.defaultString(startTimeDisplay);
736         }
737 
738     }
739 
740     public void setStartTimeDisplay(String startTimeDisplay, boolean appendForDisplay, String dlTypeClass) {
741         String cssClass = "";
742         if(!StringUtils.isEmpty(dlTypeClass)){
743             cssClass = "class=\"" + dlTypeClass + "\"";
744         }
745         if(StringUtils.isEmpty(this.startTimeDisplay)){
746             appendForDisplay = false;
747         }
748         if (appendForDisplay){
749             this.startTimeDisplay = this.startTimeDisplay + "<br><span " + cssClass + " >" + startTimeDisplay + "</span>";
750         }else{
751             this.startTimeDisplay = "<span " + cssClass + " >" + startTimeDisplay + "</span>";
752         }
753     }
754 
755     public String getInstructorDisplayNames() {
756         return instructorDisplayNames;
757     }
758 
759     public void setInstructorDisplayNames(String instructorDisplayNames) {
760         this.instructorDisplayNames = instructorDisplayNames;
761     }
762 
763     public void setInstructorDisplayNames(String instructorDisplayNames,boolean appendForDisplay) {
764         if (appendForDisplay && this.instructorDisplayNames!=null){
765             this.instructorDisplayNames = this.instructorDisplayNames + "<br>" + StringUtils.defaultString(instructorDisplayNames);
766         }else{
767             this.instructorDisplayNames = StringUtils.defaultString(instructorDisplayNames);
768         }
769 
770     }
771 
772     public String getEndTimeDisplay() {
773         return endTimeDisplay;
774     }
775 
776     public void setEndTimeDisplay(String endTimeDisplay,boolean appendForDisplay) {
777         if (appendForDisplay){
778             this.endTimeDisplay = this.endTimeDisplay + "<br>" + StringUtils.defaultString(endTimeDisplay);
779         }else{
780             this.endTimeDisplay = StringUtils.defaultString(endTimeDisplay);
781         }
782     }
783 
784     public void setEndTimeDisplay(String endTimeDisplay,boolean appendForDisplay, String dlTypeClass) {
785         String cssClass = "";
786         if(!StringUtils.isEmpty(dlTypeClass)){
787             cssClass = "class=\"" + dlTypeClass + "\"";
788         }
789         if(StringUtils.isEmpty(this.endTimeDisplay)){
790             appendForDisplay = false;
791         }
792         if (appendForDisplay){
793             this.endTimeDisplay = this.endTimeDisplay + "<br><span " + cssClass + " >" + endTimeDisplay + "</span>";
794         }else{
795             this.endTimeDisplay = "<span " + cssClass + " >" + endTimeDisplay + "</span>";
796         }
797     }
798 
799     public String getDaysDisplayName() {
800         return daysDisplayName;
801     }
802 
803     public void setDaysDisplayName(String daysDisplayName,boolean appendForDisplay) {
804         if (appendForDisplay){
805             this.daysDisplayName = this.daysDisplayName + "<br>" + StringUtils.defaultString(daysDisplayName);
806         }else{
807             this.daysDisplayName = StringUtils.defaultString(daysDisplayName);
808         }
809     }
810 
811     public void setDaysDisplayName(String daysDisplayName,boolean appendForDisplay, String dlTypeClass) {
812         String cssClass = "";
813         if(!StringUtils.isEmpty(dlTypeClass)){
814             cssClass = "class=\"" + dlTypeClass + "\"";
815         }
816         if(StringUtils.isEmpty(this.daysDisplayName)){
817             appendForDisplay = false;
818         }
819         if (appendForDisplay){
820             this.daysDisplayName = this.daysDisplayName + "<br><span " + cssClass + " >" + daysDisplayName + "</span>";
821         }else{
822             this.daysDisplayName = "<span " + cssClass + " >" + daysDisplayName + "</span>";
823         }
824     }
825 
826     public List<String> getStartTime() {
827         return startTime;
828     }
829 
830     public void setStartTime(List<String> startTime) {
831         this.startTime = startTime;
832     }
833 
834     public List<String> getEndTime() {
835         return endTime;
836     }
837 
838     public void setEndTime(List<String> endTime) {
839         this.endTime = endTime;
840     }
841 
842     public List<String> getWeekDays() {
843         return weekDays;
844     }
845 
846     public void setWeekDays(List<String> weekDays) {
847         this.weekDays = weekDays;
848     }
849 
850     public String getBuildingName() {
851         return buildingName;
852     }
853 
854     public void setBuildingName(String buildingName,boolean appendForDisplay) {
855         if (appendForDisplay){
856             this.buildingName = this.buildingName + "<br>" + StringUtils.defaultString(buildingName);
857         }else{
858             this.buildingName = StringUtils.defaultString(buildingName);
859         }
860     }
861     public void setBuildingName(String buildingName,boolean appendForDisplay, String dlTypeClass) {
862         String cssClass = "";
863         if(!StringUtils.isEmpty(dlTypeClass)){
864             cssClass = "class=\"" + dlTypeClass + "\"";
865         }
866         if(StringUtils.isEmpty(this.buildingName)){
867             appendForDisplay = false;
868         }
869         if (appendForDisplay){
870             this.buildingName = this.buildingName + "<br><span " + cssClass + " >" + buildingName + "</span>";
871         }else{
872             this.buildingName = "<span " + cssClass + " >" + buildingName + "</span>";
873         }
874     }
875 
876     public String getBldgCodeSimple() {
877         return bldgCodeSimple;
878     }
879 
880     public void setBldgCodeSimple(String bldgCodeSimple) {
881         this.bldgCodeSimple = bldgCodeSimple;
882     }
883 
884     public String getBuildingCode() {
885         return buildingCode;
886     }
887 
888     public void setBuildingCode(String buildingCode, boolean appendForDisplay) {
889         String cssClass = "style=\"border-bottom: 1px dotted;\"";
890         if (appendForDisplay){
891             this.buildingCode = this.buildingCode + "<br><span " + cssClass + " >" + StringUtils.defaultString(buildingCode) + "</span>";
892         }else{
893             this.buildingCode = "<span " + cssClass + " >" + StringUtils.defaultString(buildingCode) + "</span>";
894         }
895     }
896 
897     public void setBuildingCode(String buildingCode, boolean appendForDisplay, String dlTypeClass) {
898         String cssClass = "";
899         if(!StringUtils.isEmpty(dlTypeClass)){
900             cssClass = "style=\"border-bottom: 1px dotted;\"";
901         }
902         if(StringUtils.isEmpty(this.buildingCode)){
903             appendForDisplay = false;
904         }
905         if (appendForDisplay){
906             this.buildingCode = this.buildingCode + "<br><span " + cssClass + " >" + buildingCode + "</span>";
907         }else{
908             this.buildingCode = "<span " + cssClass + " >" + buildingCode + "</span>";
909         }
910     }
911 
912     public String getRoomName() {
913         return roomName;
914     }
915 
916     public void setRoomName(String roomName,boolean appendForDisplay) {
917         if (appendForDisplay){
918             this.roomName = this.roomName + "<br>" + StringUtils.defaultString(roomName);
919         }else{
920             this.roomName = StringUtils.defaultString(roomName);
921         }
922     }
923     public void setRoomName(String roomName,boolean appendForDisplay, String dlTypeClass) {
924         String cssClass = "";
925         if(!StringUtils.isEmpty(dlTypeClass)){
926             cssClass = "class=\"" + dlTypeClass + "\"";
927         }
928         if(StringUtils.isEmpty(this.roomName)){
929             appendForDisplay = false;
930         }
931         if (appendForDisplay){
932             this.roomName = this.roomName + "<br><span " + cssClass + " >" + roomName + "</span>";
933         }else{
934             this.roomName = "<span " + cssClass + " >" + roomName + "</span>";
935         }
936     }
937 
938     public List<ScheduleWrapper> getDeletedScheduleComponents() {
939         return deletedScheduleComponents;
940     }
941 
942     public void setDeletedScheduleComponents(List<ScheduleWrapper> deletedScheduleComponents) {
943         this.deletedScheduleComponents = deletedScheduleComponents;
944     }
945 
946     public String getTypeKey() {
947         return typeKey;
948     }
949 
950     public void setTypeKey(String typeKey) {
951         this.typeKey = typeKey;
952     }
953 
954     public boolean isSendRDLsToSchedulerAfterMSE() {
955         return isSendRDLsToSchedulerAfterMSE;
956     }
957 
958     public void setSendRDLsToSchedulerAfterMSE(boolean sendRDLsToSchedulerAfterMSE) {
959         isSendRDLsToSchedulerAfterMSE = sendRDLsToSchedulerAfterMSE;
960     }
961 
962     public boolean isSchedulesModified() {
963        return schedulesModified;
964     }
965 
966     public void setSchedulesModified(boolean schedulesModified) {
967        this.schedulesModified = schedulesModified;
968     }
969 
970     public SocInfo getSocInfo() {
971         return socInfo;
972     }
973 
974     public void setSocInfo(SocInfo socInfo) {
975         this.socInfo = socInfo;
976     }
977 
978     public String getAdminOrg(){
979         return adminOrg;
980     }
981     public void setAdminOrg(String adminOrg){
982         this.adminOrg=adminOrg;
983     }
984 
985     public Date getTermRegStartDate() {
986         return termRegStartDate;
987     }
988 
989     public void setTermRegStartDate(Date termRegStartDate) {
990         this.termRegStartDate = termRegStartDate;
991     }
992 
993     public CourseInfo getCourse() {
994         return course;
995     }
996 
997     public void setCourse(CourseInfo course) {
998         this.course = course;
999     }
1000 
1001     public String getColocatedAoInfo() {
1002         return colocatedAoInfo;
1003     }
1004 
1005     public void setColocatedAoInfo(String colocatedAoInfo) {
1006         this.colocatedAoInfo = colocatedAoInfo;
1007     }
1008 
1009     public String getPopulationsJSONString() {
1010         return populationsJSONString;
1011     }
1012 
1013     public void setPopulationsJSONString(String populationsJSONString) {
1014         this.populationsJSONString = populationsJSONString;
1015     }
1016 
1017     /**
1018      * This method returns a list of comma seperated alternate course codes.
1019      * This is used in create and edit course offerings screen.
1020      * @return
1021      */
1022     public String getCrossListedCourseCodes(){
1023         return crossListedCourseCodes;
1024     }
1025 
1026     public void setCrossListedCourseCodes(String crossListedCourseCodes) {
1027         this.crossListedCourseCodes = crossListedCourseCodes;
1028     }
1029 
1030     /**
1031      * @see #setColocatedAO(boolean)
1032      * @return
1033      */
1034     public boolean isColocatedAO() {
1035         return colocatedAO;
1036     }
1037 
1038     /**
1039      * Whether this AO is part of a colocated set
1040      *
1041      * @param colocatedAO
1042      */
1043     public void setColocatedAO(boolean colocatedAO) {
1044         this.colocatedAO = colocatedAO;
1045     }
1046 
1047     public List<ColocatedActivity> getColocatedActivities() {
1048         return colocatedActivities;
1049     }
1050 
1051     public void setColocatedActivities(List<ColocatedActivity> colocatedActivities) {
1052         this.colocatedActivities = colocatedActivities;
1053     }
1054 
1055     public boolean isMaxEnrollmentShared() {
1056         return maxEnrollmentShared;
1057     }
1058 
1059     public void setMaxEnrollmentShared(boolean maxEnrollmentShared) {
1060         this.maxEnrollmentShared = maxEnrollmentShared;
1061     }
1062 
1063     public boolean getHiddenMaxEnrollmentShared(){
1064         return maxEnrollmentShared;
1065     }
1066 
1067     public int getSharedMaxEnrollment() {
1068         return sharedMaxEnrollment;
1069     }
1070 
1071     public void setSharedMaxEnrollment(int sharedMaxEnrollment) {
1072         this.sharedMaxEnrollment = sharedMaxEnrollment;
1073     }
1074 
1075     public boolean getHasSeatpools() {
1076         return hasSeatpools;
1077     }
1078 
1079     public void setHasSeatpools(boolean hasSeatpools) {
1080         this.hasSeatpools = hasSeatpools;
1081     }
1082 
1083     public ScheduleRequestSetInfo getScheduleRequestSetInfo() {
1084         return scheduleRequestSetInfo;
1085     }
1086 
1087     public void setScheduleRequestSetInfo(ScheduleRequestSetInfo scheduleRequestSetInfo) {
1088         this.scheduleRequestSetInfo = scheduleRequestSetInfo;
1089     }
1090 
1091     /**
1092      * This method return a colocated AO code for current course. This will
1093      * be displayed as the tooltip (if colocated AO exists) at manage and delete AO screen.
1094      *
1095      * @return
1096      */
1097     @SuppressWarnings("unused")
1098     public String getColocatedAoInfoUI(){
1099         //JIRA FIX : KSENROLL-8731 - Replaced StringBuffer with StringBuilder
1100         StringBuilder sb = new StringBuilder();
1101         sb.append("This activity is colocated with:<br>");
1102         sb.append(colocatedAoInfo + "<br>");
1103 
1104         return StringUtils.removeEnd(sb.toString(),"<br>");
1105     }
1106 
1107     public boolean isPartOfColoSetOnLoadAlready() {
1108         return isPartOfColoSetOnLoadAlready;
1109     }
1110 
1111     public void setPartOfColoSetOnLoadAlready(boolean isPartOfColoSetOnLoadAlready) {
1112         this.isPartOfColoSetOnLoadAlready = isPartOfColoSetOnLoadAlready;
1113     }
1114 
1115     public boolean isColocatedOnLoadAlready() {
1116         return isColocatedOnLoadAlready;
1117     }
1118 
1119     public void setColocatedOnLoadAlready(boolean colocatedOnLoadAlready) {
1120         isColocatedOnLoadAlready = colocatedOnLoadAlready;
1121     }
1122 
1123     public boolean isSchedulingCompleted(){
1124         if (getSocInfo() != null){
1125             if (StringUtils.equals(CourseOfferingSetServiceConstants.SOC_SCHEDULING_STATE_COMPLETED,getSocInfo().getSchedulingStateKey())){
1126                 return true;
1127             }
1128         }
1129         return false;
1130     }
1131 
1132     public CourseOfferingContextBar getContextBar() {
1133         return contextBar;
1134     }
1135 
1136     public void setContextBar(CourseOfferingContextBar contextBar) {
1137         this.contextBar = contextBar;
1138     }
1139 
1140     /**
1141      * Returns the Edit Helper.
1142      *
1143      * @return
1144      */
1145     public EditRenderHelper getEditRenderHelper() {
1146         return editRenderHelper;
1147     }
1148 
1149     public SchOfClassesRenderHelper getSchOfClassesRenderHelper() {
1150         return schOfClassesRenderHelper;
1151     }
1152 
1153     public void setSchOfClassesRenderHelper(SchOfClassesRenderHelper schOfClassesRenderHelper) {
1154         this.schOfClassesRenderHelper = schOfClassesRenderHelper;
1155     }
1156 
1157     /**
1158      * Helper to render the colocated activites in Edit AO screen.
1159      */
1160     public class EditRenderHelper implements Serializable {
1161 
1162         private List<ColocatedActivity> manageSeperateEnrollmentList;
1163 
1164         private boolean scheduleEditInProgress;
1165         private boolean isPersistedRDLsExists;
1166         private String selectedAO;
1167 
1168         private String prevAOTypeName;
1169         private String nextAOTypeName;
1170 
1171         private ActivityOfferingInfo prevAO;
1172         private ActivityOfferingInfo nextAO;
1173 
1174         private List<KeyValue> aoCodes;
1175 
1176         public EditRenderHelper(){
1177             manageSeperateEnrollmentList = new ArrayList<ColocatedActivity>();
1178             aoCodes = new ArrayList<KeyValue>();
1179         }
1180 
1181         /**
1182          * @see #setManageSeperateEnrollmentList(java.util.List)
1183          * @return
1184          */
1185         public List<ColocatedActivity> getManageSeperateEnrollmentList() {
1186             return manageSeperateEnrollmentList;
1187         }
1188 
1189         /**
1190          * If the user is going to manage the enrollment list seperately for each activity offerings in a
1191          * cross listed set, this list is used to display that section at the ui.
1192          *
1193          * It's just a seperate list but it holds the same reference elements from {@link #setColocatedActivities(java.util.List)} plus
1194          * the current AO.
1195          *
1196          * @param manageSeperateEnrollmentList
1197          */
1198         @SuppressWarnings("unused")
1199         public void setManageSeperateEnrollmentList(List<ColocatedActivity> manageSeperateEnrollmentList) {
1200             this.manageSeperateEnrollmentList = manageSeperateEnrollmentList;
1201         }
1202 
1203         public boolean isPersistedRDLsExists() {
1204             return isPersistedRDLsExists;
1205         }
1206 
1207         public void setPersistedRDLsExists(boolean persistedRDLsExists) {
1208             isPersistedRDLsExists = persistedRDLsExists;
1209         }
1210 
1211         public String getColocatedActivitiesAsString(){
1212             //JIRA FIX : KSENROLL-8731 - Replaced StringBuffer with StringBuilder
1213             StringBuilder sb = new StringBuilder();
1214             for (ColocatedActivity colo : getColocatedActivities()){
1215                 sb.append(colo.getEditRenderHelper().getCode() + ", ");
1216             }
1217             return StringUtils.stripEnd(sb.toString(),", ");
1218         }
1219 
1220         public boolean isScheduleEditInProgress() {
1221             return scheduleEditInProgress;
1222         }
1223 
1224         public void setScheduleEditInProgress(boolean scheduleEditInProgress) {
1225             this.scheduleEditInProgress = scheduleEditInProgress;
1226         }
1227 
1228         public String getSelectedAO() {
1229             return selectedAO;
1230         }
1231 
1232         public void setSelectedAO(String selectedAO) {
1233             this.selectedAO = selectedAO;
1234         }
1235 
1236 
1237         public List<KeyValue> getAoCodes() {
1238             return aoCodes;
1239         }
1240 
1241         public void setAoCodes(List<KeyValue> aoCodes) {
1242             this.aoCodes = aoCodes;
1243         }
1244 
1245         public ActivityOfferingInfo getPrevAO() {
1246             return prevAO;
1247         }
1248 
1249         public void setPrevAO(ActivityOfferingInfo prevAO) {
1250             this.prevAO = prevAO;
1251         }
1252 
1253         public ActivityOfferingInfo getNextAO() {
1254             return nextAO;
1255         }
1256 
1257         public void setNextAO(ActivityOfferingInfo nextAO) {
1258             this.nextAO = nextAO;
1259         }
1260 
1261         public String getPrevAOTypeName() {
1262             return prevAOTypeName;
1263         }
1264 
1265         public void setPrevAOTypeName(String prevAOTypeName) {
1266             this.prevAOTypeName = prevAOTypeName;
1267         }
1268 
1269         public String getNextAOTypeName() {
1270             return nextAOTypeName;
1271         }
1272 
1273         public void setNextAOTypeName(String nextAOTypeName) {
1274             this.nextAOTypeName = nextAOTypeName;
1275         }
1276 
1277     }
1278 
1279     /**
1280      * Model to handle all the ui elements needed at schedule of classes view
1281      */
1282     public class SchOfClassesRenderHelper implements Serializable {
1283 
1284         private String information;
1285 
1286         public SchOfClassesRenderHelper(){
1287 
1288         }
1289 
1290         public String getInformation() {
1291             return information;
1292         }
1293 
1294         public void setInformation(String information) {
1295             this.information = information;
1296         }
1297     }
1298 
1299     // subterms
1300     public String getSubTermName() {
1301         return subTermName;
1302     }
1303 
1304     public void setSubTermName(String subTermName) {
1305         this.subTermName = subTermName;
1306     }
1307 
1308     public boolean getHasSubTerms() {
1309         return hasSubTerms;
1310     }
1311 
1312     public void setHasSubTerms(boolean hasSubTerms) {
1313         this.hasSubTerms = hasSubTerms;
1314     }
1315 
1316     public String getSubTermId() {
1317         return subTermId;
1318     }
1319 
1320     public void setSubTermId(String subTermId) {
1321         this.subTermId = subTermId;
1322     }
1323 
1324     public String getTermStartEndDate() {
1325            return termStartEndDate;
1326     }
1327 
1328     public void setTermStartEndDate(String termStartEndDate) {
1329         this.termStartEndDate = termStartEndDate;
1330     }
1331 
1332     public String getSubTermDatesJsonString() {
1333         return subTermDatesJsonString;
1334     }
1335 
1336     public void setSubTermDatesJsonString(String subTermDatesJsonString) {
1337         this.subTermDatesJsonString = subTermDatesJsonString;
1338     }
1339 
1340     /**
1341      * @see #setRemovedFromColoSet(boolean)
1342      * @return true if the user breaks the colo set
1343      */
1344     public boolean isRemovedFromColoSet() {
1345         return isRemovedFromColoSet;
1346     }
1347 
1348     /**
1349      * This flag will be set when the user breaks the AO from the colo set.
1350      *
1351      * @param removedFromColoSet
1352      */
1353     public void setRemovedFromColoSet(boolean removedFromColoSet) {
1354         isRemovedFromColoSet = removedFromColoSet;
1355     }
1356 
1357     public boolean isHasRule() {
1358         return hasRule;
1359     }
1360 
1361     public void setHasRule(boolean hasRule) {
1362         this.hasRule = hasRule;
1363     }
1364 
1365     public CourseWaitListInfo getCourseWaitListInfo() {
1366         return courseWaitListInfo;
1367     }
1368 
1369     public void setCourseWaitListInfo(CourseWaitListInfo courseWaitListInfo) {
1370         this.courseWaitListInfo = courseWaitListInfo;
1371     }
1372 
1373     public boolean isHasWaitlist() {
1374         return hasWaitlist;
1375     }
1376 
1377     public void setHasWaitlist(boolean hasWaitlist) {
1378         this.hasWaitlist = hasWaitlist;
1379     }
1380 
1381     public boolean isHasWaitlistCO() {
1382         return hasWaitlistCO;
1383     }
1384 
1385     public void setHasWaitlistCO(boolean hasWaitlistCO) {
1386         this.hasWaitlistCO = hasWaitlistCO;
1387     }
1388 
1389     public String getReinstateStateName() {
1390         return reinstateStateName;
1391     }
1392 
1393     public void setReinstateStateName(String reinstateStateName) {
1394         this.reinstateStateName = reinstateStateName;
1395     }
1396 
1397     public boolean isLimitWaitlistSize() {
1398         return limitWaitlistSize;
1399     }
1400 
1401     public void setLimitWaitlistSize(boolean limitWaitlistSize) {
1402         this.limitWaitlistSize = limitWaitlistSize;
1403     }
1404 
1405     public String getWaitListType() {
1406         return waitListType;
1407     }
1408 
1409     public void setWaitListType(String waitListType) {
1410         this.waitListType = waitListType;
1411     }
1412 
1413     public String getWaitListTypeUI() {
1414         return waitListTypeUI;
1415     }
1416 
1417     public void setWaitListTypeUI(String waitListTypeUI) {
1418         this.waitListTypeUI = waitListTypeUI;
1419     }
1420 
1421     public String getRequisite() {
1422         return requisite;
1423     }
1424 
1425     public void setRequisite(String requisite) {
1426         this.requisite = requisite;
1427     }
1428 
1429     public String getViewId() {
1430         return viewId;
1431     }
1432 
1433     public void setViewId(String viewId) {
1434         this.viewId = viewId;
1435     }
1436 
1437     public HashMap getSchedulingStateHash() {
1438         try {
1439             return CourseOfferingManagementUtil.getSchedulingStateAndNameHash();
1440         } catch (Exception e) {
1441             throw new RuntimeException(e);
1442         }
1443     }
1444 
1445     /**
1446      *   This method will update waitListType depending on automaticallyProcessed and confirmationRequired boolean
1447      *
1448      *   automatic -> automaticallyProcessed = true, confirmationRequired = false
1449      *   Confirmation (semi-automatic) -> automaticallyProcessed = true, confirmationRequired = true
1450      *   manual -> automaticallyProcessed = false, confirmationRequired = false
1451      *
1452      */
1453     public void updateWaitListType(){
1454 
1455         Boolean automaticallyProcessed = courseWaitListInfo.getAutomaticallyProcessed();
1456         Boolean confirmationRequired   = courseWaitListInfo.getConfirmationRequired();
1457         //default value is automatic
1458         if((null == automaticallyProcessed) || (null == confirmationRequired)) {
1459                waitListType = LuiServiceConstants.AUTOMATIC_WAITLIST_TYPE_KEY ;
1460                waitListTypeUI = "Automatic";
1461         }
1462 
1463         if(automaticallyProcessed && !(confirmationRequired)){
1464             waitListType = LuiServiceConstants.AUTOMATIC_WAITLIST_TYPE_KEY ;
1465             waitListTypeUI = "Automatic";
1466         } else if(automaticallyProcessed && confirmationRequired ) {
1467             waitListType = LuiServiceConstants.CONFIRMATION_WAITLIST_TYPE_KEY;
1468             waitListTypeUI = "Confirmation";
1469         } else if(!(automaticallyProcessed) &&  !(confirmationRequired)) {
1470             waitListType = LuiServiceConstants.MANUAL_WAITLIST_TYPE_KEY;
1471             waitListTypeUI = "Manual";
1472         }
1473     }
1474 
1475     public boolean isAuthorizedToModifyEndTimeTS() {
1476         if (isCentralSchedulingCoOrdinator){
1477             return true;
1478         } else {
1479             if (getNonStandardTimeslotCreationMode() == ActivityOfferingWrapper.NonStandardTimeslotCreationMode.ALLOWED){
1480                 return true;
1481             } else if (getNonStandardTimeslotCreationMode() == ActivityOfferingWrapper.NonStandardTimeslotCreationMode.NOT_ALLOWED){
1482                 return false;
1483             } else if (getNonStandardTimeslotCreationMode() == ActivityOfferingWrapper.NonStandardTimeslotCreationMode.NEEDS_APPROVAL){
1484                 return aoInfo.getIsApprovedForNonStandardTimeSlots();
1485             }
1486         }
1487 
1488         return false;
1489 
1490     }
1491 
1492     public String getTimeSlotType() {
1493         return timeSlotType;
1494     }
1495 
1496     public void setTimeSlotType(String timeSlotType) {
1497         this.timeSlotType = timeSlotType;
1498     }
1499 }