/**
* Copyright (c) 2000-present Liferay, Inc. All rights reserved.
*
* This library is free software; you can redistribute it and/or modify it under
* the terms of the GNU Lesser General Public License as published by the Free
* Software Foundation; either version 2.1 of the License, or (at your option)
* any later version.
*
* This library is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
* details.
*/
package com.liferay.calendar.notification.impl;
import com.liferay.calendar.constants.CalendarPortletKeys;
import com.liferay.calendar.model.Calendar;
import com.liferay.calendar.model.CalendarBooking;
import com.liferay.calendar.model.CalendarNotificationTemplate;
import com.liferay.calendar.notification.NotificationTemplateType;
import com.liferay.calendar.notification.NotificationType;
import com.liferay.calendar.service.CalendarNotificationTemplateLocalServiceUtil;
import com.liferay.calendar.util.CalendarUtil;
import com.liferay.portal.kernel.exception.PortalException;
import com.liferay.portal.kernel.language.LanguageUtil;
import com.liferay.portal.kernel.model.Company;
import com.liferay.portal.kernel.model.Group;
import com.liferay.portal.kernel.model.GroupConstants;
import com.liferay.portal.kernel.model.Layout;
import com.liferay.portal.kernel.model.User;
import com.liferay.portal.kernel.service.CompanyLocalServiceUtil;
import com.liferay.portal.kernel.service.GroupLocalServiceUtil;
import com.liferay.portal.kernel.service.LayoutLocalServiceUtil;
import com.liferay.portal.kernel.util.FastDateFormatFactoryUtil;
import com.liferay.portal.kernel.util.HttpUtil;
import com.liferay.portal.kernel.util.PortalUtil;
import com.liferay.portal.kernel.util.StringPool;
import java.io.Serializable;
import java.text.Format;
import java.util.HashMap;
import java.util.Map;
import java.util.ResourceBundle;
import java.util.TimeZone;
import javax.portlet.PortletConfig;
import javax.portlet.WindowState;
/**
* @author Eduardo Lundgren
*/
public class NotificationTemplateContextFactory {
public static NotificationTemplateContext getInstance(
NotificationType notificationType,
NotificationTemplateType notificationTemplateType,
CalendarBooking calendarBooking, User user)
throws Exception {
CalendarBooking parentCalendarBooking =
calendarBooking.getParentCalendarBooking();
Calendar calendar = parentCalendarBooking.getCalendar();
NotificationTemplateContext notificationTemplateContext =
new NotificationTemplateContext();
CalendarNotificationTemplate calendarNotificationTemplate =
CalendarNotificationTemplateLocalServiceUtil.
fetchCalendarNotificationTemplate(
calendar.getCalendarId(), notificationType,
notificationTemplateType);
notificationTemplateContext.setCalendarNotificationTemplate(
calendarNotificationTemplate);
notificationTemplateContext.setCompanyId(
calendarBooking.getCompanyId());
notificationTemplateContext.setGroupId(calendarBooking.getGroupId());
notificationTemplateContext.setCalendarId(calendar.getCalendarId());
notificationTemplateContext.setNotificationTemplateType(
notificationTemplateType);
notificationTemplateContext.setNotificationType(notificationType);
// Attributes
Map<String, Serializable> attributes = new HashMap<>();
TimeZone userTimezone = user.getTimeZone();
Format dateFormatDateTime = FastDateFormatFactoryUtil.getDateTime(
user.getLocale(),
CalendarUtil.getCalendarBookingDisplayTimeZone(
calendarBooking, userTimezone));
String userTimezoneDisplayName = userTimezone.getDisplayName(
false, TimeZone.SHORT, user.getLocale());
String endTime =
dateFormatDateTime.format(calendarBooking.getEndTime()) +
StringPool.SPACE + userTimezoneDisplayName;
attributes.put("endTime", endTime);
attributes.put("location", calendarBooking.getLocation());
Group group = GroupLocalServiceUtil.getGroup(
user.getCompanyId(), GroupConstants.GUEST);
String portalURL = _getPortalURL(
group.getCompanyId(), group.getGroupId());
attributes.put("portalURL", portalURL);
PortletConfig portletConfig = getPortletConfig();
ResourceBundle resourceBundle = portletConfig.getResourceBundle(
user.getLocale());
attributes.put(
"portletName",
LanguageUtil.get(
resourceBundle,
"javax.portlet.title.".concat(CalendarPortletKeys.CALENDAR)));
String startTime =
dateFormatDateTime.format(calendarBooking.getStartTime()) +
StringPool.SPACE + userTimezoneDisplayName;
attributes.put("startTime", startTime);
attributes.put("title", calendarBooking.getTitle(user.getLocale()));
String calendarBookingURL = _getCalendarBookingURL(
user, calendarBooking.getCalendarBookingId());
attributes.put("url", calendarBookingURL);
notificationTemplateContext.setAttributes(attributes);
return notificationTemplateContext;
}
public static PortletConfig getPortletConfig() {
return _portletConfig;
}
public static void setPortletConfig(PortletConfig portletConfig) {
_portletConfig = portletConfig;
}
private static String _getCalendarBookingURL(
User user, long calendarBookingId)
throws PortalException {
Group group = GroupLocalServiceUtil.getGroup(
user.getCompanyId(), GroupConstants.GUEST);
Layout layout = LayoutLocalServiceUtil.fetchLayout(
group.getDefaultPublicPlid());
String portalURL = _getPortalURL(
group.getCompanyId(), group.getGroupId());
String layoutActualURL = PortalUtil.getLayoutActualURL(layout);
String url = portalURL + layoutActualURL;
String namespace = PortalUtil.getPortletNamespace(
CalendarPortletKeys.CALENDAR);
url = HttpUtil.addParameter(
url, namespace + "mvcPath", "/view_calendar_booking.jsp");
url = HttpUtil.addParameter(
url, "p_p_id", CalendarPortletKeys.CALENDAR);
url = HttpUtil.addParameter(url, "p_p_lifecycle", "0");
url = HttpUtil.addParameter(
url, "p_p_state", WindowState.MAXIMIZED.toString());
url = HttpUtil.addParameter(
url, namespace + "calendarBookingId", calendarBookingId);
return url;
}
private static String _getPortalURL(long companyId, long groupId)
throws PortalException {
Company company = CompanyLocalServiceUtil.getCompany(companyId);
return company.getPortalURL(groupId);
}
private static PortletConfig _portletConfig;
}