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.util.ArrayList;
019import java.util.HashMap;
020import java.util.List;
021import java.util.Map;
022
023import org.apache.avalon.framework.parameters.Parameters;
024import org.apache.avalon.framework.service.ServiceException;
025import org.apache.avalon.framework.service.ServiceManager;
026import org.apache.cocoon.acting.ServiceableAction;
027import org.apache.cocoon.environment.ObjectModelHelper;
028import org.apache.cocoon.environment.Redirector;
029import org.apache.cocoon.environment.Request;
030import org.apache.cocoon.environment.SourceResolver;
031
032import org.ametys.core.cocoon.ActionResultGenerator;
033import org.ametys.plugins.repository.AmetysObjectResolver;
034import org.ametys.plugins.workspaces.calendars.CalendarDAO;
035import org.ametys.plugins.workspaces.calendars.events.CalendarEvent;
036import org.ametys.plugins.workspaces.calendars.events.CalendarEventDAO;
037import org.ametys.plugins.workspaces.calendars.events.CalendarEventJSONHelper;
038import org.ametys.plugins.workspaces.calendars.helper.RecurrentEventHelper;
039import org.ametys.plugins.workspaces.project.ProjectManager;
040
041/**
042 * Action providing an event of a project.
043 */
044public class GetEvent extends ServiceableAction
045{
046    /** The object resolver */
047    protected AmetysObjectResolver _resolver;
048
049    /** Calendar manager for workspaces */
050    protected CalendarDAO _calendarDAO;
051
052    /** Calendar event manager for workspaces */
053    protected CalendarEventDAO _calendarEventDAO;
054    
055    /** Calendar event JSON helper */
056    protected CalendarEventJSONHelper _calendarEventJSONHelper;
057
058    /** The project manager */
059    protected ProjectManager _projectManager;
060    
061    @Override
062    public void service(ServiceManager smanager) throws ServiceException
063    {
064        super.service(smanager);
065        _calendarDAO = (CalendarDAO) smanager.lookup(CalendarDAO.ROLE);
066        _calendarEventDAO = (CalendarEventDAO) smanager.lookup(CalendarEventDAO.ROLE);
067        _resolver = (AmetysObjectResolver) smanager.lookup(AmetysObjectResolver.ROLE);
068        _calendarEventJSONHelper = (CalendarEventJSONHelper) smanager.lookup(CalendarEventJSONHelper.ROLE);
069        _projectManager = (ProjectManager) smanager.lookup(ProjectManager.ROLE);
070    }
071
072    @Override
073    public Map act(Redirector redirector, SourceResolver resolver, Map objectModel, String source, Parameters parameters) throws Exception
074    {
075        Request request = ObjectModelHelper.getRequest(objectModel);
076        
077        Map<String, Object> result = new HashMap<>();
078        request.setAttribute(ActionResultGenerator.MAP_REQUEST_ATTR, result);
079        
080        String eventId = request.getParameter("eventId");
081        if (eventId == null)
082        {
083            return EMPTY_MAP;
084        }
085        
086        CalendarEvent event = _calendarEventDAO.getCalenderEventById(eventId);
087        if (event != null)
088        {
089            //get the working days
090            List<Integer> workingDayStrings = RecurrentEventHelper.getWorkingDays();
091            List<String> icsWorkingDays = new ArrayList<>();
092            for (Integer day : workingDayStrings)
093            {
094                switch (day)
095                {
096                    case java.util.Calendar.MONDAY:
097                        icsWorkingDays.add("MO");
098                        break;
099                    case java.util.Calendar.TUESDAY:
100                        icsWorkingDays.add("TU");
101                        break;
102                    case java.util.Calendar.WEDNESDAY:
103                        icsWorkingDays.add("WE");
104                        break;
105                    case java.util.Calendar.THURSDAY:
106                        icsWorkingDays.add("TH");
107                        break;
108                    case java.util.Calendar.FRIDAY:
109                        icsWorkingDays.add("FR");
110                        break;
111                    case java.util.Calendar.SATURDAY:
112                        icsWorkingDays.add("SA");
113                        break;
114                    case java.util.Calendar.SUNDAY:
115                        icsWorkingDays.add("SU");
116                        break;
117                    default:
118                        break;
119                }
120            }
121            
122            result.put("events", _calendarEventJSONHelper.eventAsJson(event, false, true));
123            result.put("workingDays", icsWorkingDays);
124        }
125
126        return EMPTY_MAP;
127    }
128    
129}