001    /**
002     * Copyright (c) 2000-present Liferay, Inc. All rights reserved.
003     *
004     * This library is free software; you can redistribute it and/or modify it under
005     * the terms of the GNU Lesser General Public License as published by the Free
006     * Software Foundation; either version 2.1 of the License, or (at your option)
007     * any later version.
008     *
009     * This library is distributed in the hope that it will be useful, but WITHOUT
010     * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
011     * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
012     * details.
013     */
014    
015    package com.liferay.portlet.calendar.util;
016    
017    import com.liferay.portal.kernel.cal.TZSRecurrence;
018    import com.liferay.portal.kernel.util.CalendarFactoryUtil;
019    import com.liferay.portal.kernel.util.GetterUtil;
020    import com.liferay.portal.kernel.util.PropsKeys;
021    import com.liferay.portal.kernel.util.StringBundler;
022    import com.liferay.portal.kernel.util.StringPool;
023    import com.liferay.portal.kernel.util.StringUtil;
024    import com.liferay.portal.kernel.util.Time;
025    import com.liferay.portal.kernel.util.Validator;
026    import com.liferay.portal.util.PortalUtil;
027    import com.liferay.portal.util.PropsUtil;
028    import com.liferay.portal.util.PropsValues;
029    import com.liferay.portlet.calendar.model.CalEvent;
030    import com.liferay.util.ContentUtil;
031    
032    import java.util.Calendar;
033    import java.util.Date;
034    import java.util.Locale;
035    import java.util.TimeZone;
036    
037    import javax.portlet.PortletPreferences;
038    
039    /**
040     * @author Brian Wing Shun Chan
041     */
042    public class CalUtil {
043    
044            public static Date getDaylightSavingTimeOffsetDate(
045                    CalEvent event, TimeZone userTimeZone, Calendar cal, Date date) {
046    
047                    TZSRecurrence recurrence = event.getRecurrenceObj();
048    
049                    TimeZone eventTimeZone = recurrence.getTimeZone();
050    
051                    if (eventTimeZone.inDaylightTime(cal.getTime()) ==
052                                    userTimeZone.inDaylightTime(cal.getTime())) {
053    
054                            return date;
055                    }
056    
057                    Calendar calendar = Calendar.getInstance();
058    
059                    calendar.setTime(date);
060    
061                    if (eventTimeZone.inDaylightTime(cal.getTime())) {
062                            calendar.add(Calendar.HOUR_OF_DAY, -1);
063                    }
064                    else {
065                            calendar.add(Calendar.HOUR_OF_DAY, 1);
066                    }
067    
068                    return calendar.getTime();
069            }
070    
071            public static String getEmailEventReminderBody(
072                    PortletPreferences preferences) {
073    
074                    String emailEventReminderBody = preferences.getValue(
075                            "emailEventReminderBody", StringPool.BLANK);
076    
077                    if (Validator.isNotNull(emailEventReminderBody)) {
078                            return emailEventReminderBody;
079                    }
080                    else {
081                            return ContentUtil.get(
082                                    PropsUtil.get(PropsKeys.CALENDAR_EMAIL_EVENT_REMINDER_BODY));
083                    }
084            }
085    
086            public static boolean getEmailEventReminderEnabled(
087                    PortletPreferences preferences) {
088    
089                    String emailEventReminderEnabled = preferences.getValue(
090                            "emailEventReminderEnabled", StringPool.BLANK);
091    
092                    if (Validator.isNotNull(emailEventReminderEnabled)) {
093                            return GetterUtil.getBoolean(emailEventReminderEnabled);
094                    }
095                    else {
096                            return GetterUtil.getBoolean(
097                                    PropsUtil.get(PropsKeys.CALENDAR_EMAIL_EVENT_REMINDER_ENABLED));
098                    }
099            }
100    
101            public static String getEmailEventReminderSubject(
102                    PortletPreferences preferences) {
103    
104                    String emailEventReminderSubject = preferences.getValue(
105                            "emailEventReminderSubject", StringPool.BLANK);
106    
107                    if (Validator.isNotNull(emailEventReminderSubject)) {
108                            return emailEventReminderSubject;
109                    }
110                    else {
111                            return ContentUtil.get(
112                                    PropsUtil.get(PropsKeys.CALENDAR_EMAIL_EVENT_REMINDER_SUBJECT));
113                    }
114            }
115    
116            public static String getEmailFromAddress(
117                    PortletPreferences preferences, long companyId) {
118    
119                    return PortalUtil.getEmailFromAddress(
120                            preferences, companyId, PropsValues.CALENDAR_EMAIL_FROM_ADDRESS);
121            }
122    
123            public static String getEmailFromName(
124                    PortletPreferences preferences, long companyId) {
125    
126                    return PortalUtil.getEmailFromName(
127                            preferences, companyId, PropsValues.CALENDAR_EMAIL_FROM_NAME);
128            }
129    
130            public static Date getEndTime(CalEvent event) {
131                    long startTime = event.getStartDate().getTime();
132    
133                    long endTime =
134                            startTime + (Time.HOUR * event.getDurationHour()) +
135                                    (Time.MINUTE * event.getDurationMinute());
136    
137                    return new Date(endTime);
138            }
139    
140            public static boolean isAllDay(
141                    CalEvent event, TimeZone timeZone, Locale locale) {
142    
143                    if (event.isAllDay()) {
144                            return true;
145                    }
146    
147                    Calendar cal = null;
148    
149                    if (event.getTimeZoneSensitive()) {
150                            cal = CalendarFactoryUtil.getCalendar(timeZone, locale);
151                    }
152                    else {
153                            cal = CalendarFactoryUtil.getCalendar();
154                    }
155    
156                    cal.setTime(event.getStartDate());
157    
158                    int hour = cal.get(Calendar.HOUR_OF_DAY);
159                    int minute = cal.get(Calendar.MINUTE);
160                    int second = cal.get(Calendar.SECOND);
161                    int millisecond = cal.get(Calendar.MILLISECOND);
162    
163                    int dHour = event.getDurationHour();
164                    int dMinute = event.getDurationMinute();
165    
166                    if ((hour == 0) && (minute == 0) && (second == 0) &&
167                            (millisecond == 0) && (dHour == 24) && (dMinute == 0)) {
168    
169                            return true;
170                    }
171    
172                    return false;
173            }
174    
175            public static String toString(Calendar cal, String[] types) {
176                    StringBundler sb = new StringBundler(9);
177    
178                    if (cal != null) {
179                            sb.append(cal.get(Calendar.YEAR));
180                            sb.append(StringPool.PERIOD);
181                            sb.append(cal.get(Calendar.MONTH));
182                            sb.append(StringPool.PERIOD);
183                            sb.append(cal.get(Calendar.DATE));
184                            sb.append(StringPool.PERIOD);
185                            sb.append(cal.getTimeZone().getRawOffset());
186                    }
187    
188                    if ((types != null) && (types.length > 0) &&
189                            ((types.length > 1) || Validator.isNotNull(types[0]))) {
190    
191                            sb.append(StringPool.PERIOD);
192                            sb.append(StringUtil.merge(types, StringPool.PERIOD));
193                    }
194    
195                    return sb.toString();
196            }
197    
198    }