001/* 002 * Copyright 2023 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.calendars.actions; 017 018import java.time.ZonedDateTime; 019import java.util.ArrayList; 020import java.util.HashMap; 021import java.util.List; 022import java.util.Map; 023 024import org.apache.avalon.framework.parameters.Parameters; 025import org.apache.avalon.framework.service.ServiceException; 026import org.apache.avalon.framework.service.ServiceManager; 027import org.apache.cocoon.acting.ServiceableAction; 028import org.apache.cocoon.environment.ObjectModelHelper; 029import org.apache.cocoon.environment.Redirector; 030import org.apache.cocoon.environment.Request; 031import org.apache.cocoon.environment.SourceResolver; 032 033import org.ametys.core.cocoon.ActionResultGenerator; 034import org.ametys.core.util.DateUtils; 035import org.ametys.plugins.messagingconnector.EventRecurrenceTypeEnum; 036import org.ametys.plugins.repository.AmetysObjectResolver; 037import org.ametys.plugins.workspaces.calendars.CalendarDAO; 038import org.ametys.plugins.workspaces.calendars.events.CalendarEvent; 039import org.ametys.plugins.workspaces.calendars.events.CalendarEventDAO; 040import org.ametys.plugins.workspaces.calendars.events.CalendarEventJSONHelper; 041import org.ametys.plugins.workspaces.calendars.events.CalendarEventOccurrence; 042import org.ametys.plugins.workspaces.calendars.helper.RecurrentEventHelper; 043import org.ametys.plugins.workspaces.calendars.jcr.JCRCalendarEvent; 044import org.ametys.plugins.workspaces.project.ProjectManager; 045 046/** 047 * Action providing an event of a project. 048 */ 049public class GetEvent extends ServiceableAction 050{ 051 /** The object resolver */ 052 protected AmetysObjectResolver _resolver; 053 054 /** Calendar manager for workspaces */ 055 protected CalendarDAO _calendarDAO; 056 057 /** Calendar event manager for workspaces */ 058 protected CalendarEventDAO _calendarEventDAO; 059 060 /** Calendar event JSON helper */ 061 protected CalendarEventJSONHelper _calendarEventJSONHelper; 062 063 /** The project manager */ 064 protected ProjectManager _projectManager; 065 066 @Override 067 public void service(ServiceManager smanager) throws ServiceException 068 { 069 super.service(smanager); 070 _calendarDAO = (CalendarDAO) smanager.lookup(CalendarDAO.ROLE); 071 _calendarEventDAO = (CalendarEventDAO) smanager.lookup(CalendarEventDAO.ROLE); 072 _resolver = (AmetysObjectResolver) smanager.lookup(AmetysObjectResolver.ROLE); 073 _calendarEventJSONHelper = (CalendarEventJSONHelper) smanager.lookup(CalendarEventJSONHelper.ROLE); 074 _projectManager = (ProjectManager) smanager.lookup(ProjectManager.ROLE); 075 } 076 077 @Override 078 public Map act(Redirector redirector, SourceResolver resolver, Map objectModel, String source, Parameters parameters) throws Exception 079 { 080 Request request = ObjectModelHelper.getRequest(objectModel); 081 082 Map<String, Object> result = new HashMap<>(); 083 request.setAttribute(ActionResultGenerator.MAP_REQUEST_ATTR, result); 084 085 String eventId = request.getParameter("eventId"); 086 String occurrenceDateAsString = request.getParameter("occurrenceDate"); 087 if (eventId == null) 088 { 089 return EMPTY_MAP; 090 } 091 092 CalendarEvent event = _calendarEventDAO.getCalenderEventById(eventId); 093 if (event != null) 094 { 095 //get the working days 096 List<Integer> workingDayStrings = RecurrentEventHelper.getWorkingDays(); 097 List<String> icsWorkingDays = new ArrayList<>(); 098 099 if (occurrenceDateAsString != null) 100 { 101 ZonedDateTime occurrenceDate = DateUtils.parseZonedDateTime(occurrenceDateAsString); 102 List<CalendarEventOccurrence> occurrences = event.getOccurrences(occurrenceDate, occurrenceDate.plusDays(1)); 103 104 if (!occurrences.isEmpty() && event instanceof JCRCalendarEvent jcrEvent) 105 { 106 jcrEvent.setStartDate(occurrences.get(0).getStartDate()); 107 jcrEvent.setEndDate(occurrences.get(0).getEndDate()); 108 jcrEvent.setRecurrenceType(EventRecurrenceTypeEnum.NEVER.toString()); 109 } 110 else 111 { 112 // If no occurrence is found for the given date, it means that the event is not occurring on this date, so we return an empty map 113 return EMPTY_MAP; 114 } 115 } 116 117 for (Integer day : workingDayStrings) 118 { 119 switch (day) 120 { 121 case java.util.Calendar.MONDAY: 122 icsWorkingDays.add("MO"); 123 break; 124 case java.util.Calendar.TUESDAY: 125 icsWorkingDays.add("TU"); 126 break; 127 case java.util.Calendar.WEDNESDAY: 128 icsWorkingDays.add("WE"); 129 break; 130 case java.util.Calendar.THURSDAY: 131 icsWorkingDays.add("TH"); 132 break; 133 case java.util.Calendar.FRIDAY: 134 icsWorkingDays.add("FR"); 135 break; 136 case java.util.Calendar.SATURDAY: 137 icsWorkingDays.add("SA"); 138 break; 139 case java.util.Calendar.SUNDAY: 140 icsWorkingDays.add("SU"); 141 break; 142 default: 143 break; 144 } 145 } 146 147 result.put("events", _calendarEventJSONHelper.eventAsJson(event, true)); 148 result.put("workingDays", icsWorkingDays); 149 } 150 151 return EMPTY_MAP; 152 } 153 154}