001/* 002 * Copyright 2016 Anyware Services 003 * 004 * Licensed under the Apache 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.apache.org/licenses/LICENSE-2.0 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 */ 016package org.ametys.plugins.workspaces.events.calendars; 017 018import java.util.ArrayList; 019import java.util.HashMap; 020import java.util.List; 021import java.util.Map; 022 023import javax.jcr.Node; 024import javax.jcr.RepositoryException; 025 026import org.apache.avalon.framework.service.ServiceException; 027import org.apache.avalon.framework.service.ServiceManager; 028 029import org.ametys.plugins.explorer.ObservationConstants; 030import org.ametys.plugins.explorer.calendars.Calendar; 031import org.ametys.plugins.explorer.calendars.CalendarEvent; 032import org.ametys.plugins.repository.RepositoryConstants; 033import org.ametys.plugins.repository.UnknownAmetysObjectException; 034import org.ametys.plugins.repository.events.EventType; 035import org.ametys.plugins.workspaces.calendars.CalendarWorkspaceModule; 036import org.ametys.plugins.workspaces.project.modules.WorkspaceModuleExtensionPoint; 037import org.ametys.plugins.workspaces.project.objects.Project; 038 039/** 040 * {@link EventType} implementation for the creation of a calendar event 041 */ 042public class CalendarEventCreatedOrUpdatedEventType extends CalendarsEventType 043{ 044 /** Constant for calendar event's title */ 045 public static final String EVENT_CALENDAR_EVENT_TITLE_PROPERTY = RepositoryConstants.NAMESPACE_PREFIX + ":eventTitle"; 046 /** Constant for calendar event's id */ 047 public static final String EVENT_CALENDAR_EVENT_ID_PROPERTY = RepositoryConstants.NAMESPACE_PREFIX + ":eventId"; 048 049 private CalendarWorkspaceModule _calendarModule; 050 051 @Override 052 public void service(ServiceManager serviceManager) throws ServiceException 053 { 054 super.service(serviceManager); 055 WorkspaceModuleExtensionPoint moduleManagerEP = (WorkspaceModuleExtensionPoint) serviceManager.lookup(WorkspaceModuleExtensionPoint.ROLE); 056 _calendarModule = moduleManagerEP.getModule(CalendarWorkspaceModule.CALENDAR_MODULE_ID); 057 } 058 059 @Override 060 protected void storeAdditionalEventData(Node eventNode, Map<String, Object> parameters) throws RepositoryException 061 { 062 super.storeAdditionalEventData(eventNode, parameters); 063 064 Calendar calendar = (Calendar) parameters.get(ObservationConstants.ARGS_CALENDAR); 065 CalendarEvent calendarEvent = (CalendarEvent) parameters.get(ObservationConstants.ARGS_CALENDAR_EVENT); 066 067 // Calendar 068 eventNode.setProperty(EVENT_CALENDAR_TITLE_PROPERTY, calendar.getName()); 069 eventNode.setProperty(EVENT_CALENDAR_ID_PROPERTY, calendar.getId()); 070 071 // Event 072 eventNode.setProperty(EVENT_CALENDAR_EVENT_TITLE_PROPERTY, calendarEvent.getTitle()); 073 eventNode.setProperty(EVENT_CALENDAR_EVENT_ID_PROPERTY, calendarEvent.getId()); 074 } 075 076 @Override 077 public Map<String, Object> event2JSON(Node eventNode) throws RepositoryException 078 { 079 Map<String, Object> event = super.event2JSON(eventNode); 080 081 String calendarId = eventNode.getProperty(EVENT_CALENDAR_ID_PROPERTY).getString(); 082 event.put("calendarId", calendarId); 083 event.put("calendarTitle", eventNode.getProperty(EVENT_CALENDAR_TITLE_PROPERTY).getString()); 084 085 String eventId = eventNode.getProperty(EVENT_CALENDAR_EVENT_ID_PROPERTY).getString(); 086 event.put("eventId", eventId); 087 event.put("eventTitle", eventNode.getProperty(EVENT_CALENDAR_EVENT_TITLE_PROPERTY).getString()); 088 089 String projectName = eventNode.getProperty(EVENT_PROJECT_NAME_PROPERTY).getString(); 090 Project project = _projectManager.getProject(projectName); 091 if (project == null) 092 { 093 throw new UnknownAmetysObjectException("The project of event node " + eventNode.getIdentifier() + " does not exist"); 094 } 095 event.put("eventUrl", _calendarModule.getEventUri(project, calendarId, eventId)); 096 097 return event; 098 } 099 100 @Override 101 public boolean isMergeable(Map<String, Object> event1, Map<String, Object> event2) 102 { 103 if (!super.isMergeable(event1, event2)) 104 { 105 return false; 106 } 107 108 String calendar1 = (String) event1.get("calendarId"); 109 String calendar2 = (String) event1.get("calendarId"); 110 111 return calendar1 != null && calendar2 != null && calendar1.equals(calendar2); 112 } 113 114 @Override 115 public Map<String, Object> mergeEvents(List<Map<String, Object>> events) 116 { 117 Map<String, Object> mergedEVent = super.mergeEvents(events); 118 119 List<Map<String, Object>> mergedEvents = new ArrayList<>(); 120 121 for (Map<String, Object> event : events) 122 { 123 Map<String, Object> eventInfo = new HashMap<>(); 124 125 eventInfo.put("eventTitle", event.get("eventTitle")); 126 eventInfo.put("eventId", event.get("eventId")); 127 eventInfo.put("eventUrl", event.get("eventUrl")); 128 129 mergedEvents.add(eventInfo); 130 } 131 mergedEVent.put("events", mergedEvents); 132 133 return mergedEVent; 134 } 135}