001    /**
002     * Copyright 2004-2013 The Kuali Foundation
003     *
004     * Licensed under the Educational Community License, Version 2.0 (the "License");
005     * you may not use this file except in compliance with the License.
006     * You may obtain a copy of the License at
007     *
008     * http://www.opensource.org/licenses/ecl2.php
009     *
010     * Unless required by applicable law or agreed to in writing, software
011     * distributed under the License is distributed on an "AS IS" BASIS,
012     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013     * See the License for the specific language governing permissions and
014     * limitations under the License.
015     */
016    package org.kuali.hr.time.calendar;
017    
018    import org.joda.time.DateTime;
019    import org.kuali.hr.time.service.base.TkServiceLocator;
020    
021    import java.io.Serializable;
022    import java.util.ArrayList;
023    import java.util.List;
024    
025    public abstract class CalendarParent implements Serializable {
026        private List<CalendarWeek> weeks = new ArrayList<CalendarWeek>();
027        private CalendarEntries calendarEntry;
028        private DateTime beginDateTime;
029        private DateTime endDateTime;
030    
031        public CalendarParent(CalendarEntries calendarEntry) {
032            this.calendarEntry = calendarEntry;
033            if (calendarEntry != null) {
034                this.beginDateTime = calendarEntry.getBeginLocalDateTime().toDateTime(TkServiceLocator.getTimezoneService().getUserTimezoneWithFallback());
035                this.endDateTime = calendarEntry.getEndLocalDateTime().toDateTime(TkServiceLocator.getTimezoneService().getUserTimezoneWithFallback());
036            }
037        }
038    
039        protected CalendarParent() {
040        }
041    
042    
043        public DateTime getBeginDateTime() {
044            return beginDateTime;
045        }
046    
047        public void setBeginDateTime(DateTime beginDateTime) {
048            this.beginDateTime = beginDateTime;
049        }
050    
051        public DateTime getEndDateTime() {
052            return endDateTime;
053        }
054    
055        public void setEndDateTime(DateTime endDateTime) {
056            this.endDateTime = endDateTime;
057        }
058    
059        public CalendarEntries getCalendarEntry() {
060            return calendarEntry;
061        }
062    
063        public void setCalendarEntry(CalendarEntries calendarEntry) {
064            this.calendarEntry = calendarEntry;
065        }
066    
067        public List<CalendarWeek> getWeeks() {
068            return weeks;
069        }
070    
071        public void setWeeks(List<CalendarWeek> weeks) {
072            this.weeks = weeks;
073        }
074    
075        /**
076         * Provides the calendar title / heading. If the Pay Calendar entry spans
077         * multiple months, you get Abbreviated Month name + year of both the
078         * beginning month and the ending month.
079         *
080         * @return String for calendar title use.
081         */
082        public String getCalendarTitle() {
083            StringBuilder sb = new StringBuilder();
084    
085            if (getBeginDateTime().getMonthOfYear() == getEndDateTime().getMonthOfYear() ||
086                    (getBeginDateTime().getMonthOfYear() != getEndDateTime().getMonthOfYear()
087                            && getEndDateTime().getDayOfMonth() == 1 && getEndDateTime().getSecondOfDay() == 0)) {
088                sb.append(getBeginDateTime().toString("MMMM y"));
089            } else {
090                sb.append(getBeginDateTime().toString("MMM y"));
091                sb.append(" - ");
092                sb.append(getEndDateTime().toString("MMM y"));
093            }
094    
095            return sb.toString();
096        }
097    
098        /**
099         * Assumption of 7 "days" per week, or 7 "blocks" per row.
100         *
101         * @return A list of string titles for each row block (day)
102         */
103        public List<String> getCalendarDayHeadings() {
104            List<String> dayStrings = new ArrayList<String>(7);
105            // always render from Sunday
106            int firstDay = 0 - getBeginDateTime().getDayOfWeek();
107            int lastDay = firstDay + 7;
108    
109            if (getBeginDateTime().getMinuteOfDay() == 0) {
110                // "Standard" days.
111                for (int i = firstDay; i < lastDay; i++) {
112                    DateTime currDay = getBeginDateTime().plusDays(i);
113                    dayStrings.add(currDay.toString("E"));
114                }
115            } else {
116                // Day Split Strings
117                for (int i = firstDay; i < lastDay; i++) {
118                    StringBuilder builder = new StringBuilder("");
119                    DateTime currStart = getBeginDateTime().plusDays(i);
120                    DateTime currEnd = getBeginDateTime().plusDays(i);
121    
122                    builder.append(currStart.toString("E HH:mm"));
123                    builder.append(" - ");
124                    builder.append(currEnd.toString("E HH:mm"));
125    
126                    dayStrings.add(builder.toString());
127                }
128            }
129    
130            return dayStrings;
131        }
132    
133    }