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.tasks;
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.repository.RepositoryConstants;
030import org.ametys.plugins.repository.events.EventType;
031import org.ametys.plugins.workspaces.ObservationConstants;
032import org.ametys.plugins.workspaces.events.WorkspacesEventType;
033import org.ametys.plugins.workspaces.project.modules.WorkspaceModuleExtensionPoint;
034import org.ametys.plugins.workspaces.project.objects.Project;
035import org.ametys.plugins.workspaces.tasks.Task;
036import org.ametys.plugins.workspaces.tasks.TasksWorkspaceModule;
037
038/**
039 * {@link EventType} implementation for documents-related events
040 */
041public class TasksEventType extends WorkspacesEventType
042{
043    /** Constant for event's category */
044    public static final String EVENT_CATEGORY_TASKS = "tasks";
045    
046    /** Constant for task's title's event property */
047    public static final String EVENT_TASK_ID_PROPERTY = RepositoryConstants.NAMESPACE_PREFIX + ":taskId";
048    
049    /** Constant for task's title's event property */
050    public static final String EVENT_TASK_TITLE_PROPERTY = RepositoryConstants.NAMESPACE_PREFIX + ":taskTitle";
051
052    private TasksWorkspaceModule _taskModule;
053    
054    @Override
055    public void service(ServiceManager serviceManager) throws ServiceException
056    {
057        super.service(serviceManager);
058        WorkspaceModuleExtensionPoint moduleManagerEP = (WorkspaceModuleExtensionPoint) serviceManager.lookup(WorkspaceModuleExtensionPoint.ROLE);
059        _taskModule = moduleManagerEP.getModule(TasksWorkspaceModule.TASK_MODULE_ID);
060    }
061    
062    
063    @Override
064    protected void storeAdditionalEventData(Node eventNode, Map<String, Object> parameters) throws RepositoryException
065    {
066        super.storeAdditionalEventData(eventNode, parameters);
067        
068        // Category
069        eventNode.setProperty(EVENT_PROJECT_CATEGORY_PROPERTY, EVENT_CATEGORY_TASKS);
070
071        // Task 
072        Task task = (Task) parameters.get(ObservationConstants.ARGS_TASK);
073        eventNode.setProperty(EVENT_TASK_TITLE_PROPERTY, task.getLabel());
074        eventNode.setProperty(EVENT_TASK_ID_PROPERTY, task.getId());
075    }
076    
077    @Override
078    public Map<String, Object> event2JSON(Node eventNode) throws RepositoryException
079    {
080        Map<String, Object> event = super.event2JSON(eventNode);
081        
082        // Task title
083        event.put("taskTitle", eventNode.getProperty(EVENT_TASK_TITLE_PROPERTY).getString());
084        
085        if (eventNode.hasProperty(EVENT_TASK_ID_PROPERTY))
086        {
087            String taskId = eventNode.getProperty(EVENT_TASK_ID_PROPERTY).getString();
088            event.put("taskId", taskId);
089            
090            String projectName = eventNode.getProperty(EVENT_PROJECT_NAME_PROPERTY).getString();
091            Project project = _projectManager.getProject(projectName);
092            event.put("taskUrl", _taskModule.getTaskUri(project, taskId));
093        }
094        
095        return event;
096    }
097    
098    @Override
099    public Map<String, Object> mergeEvents(List<Map<String, Object>> events)
100    {
101        Map<String, Object> mergedEvent = super.mergeEvents(events);
102        
103        List<Map<String, Object>> tasks = new ArrayList<>();
104        
105        for (Map<String, Object> event : events)
106        {
107            Map<String, Object> eventInfo = new HashMap<>();
108            
109            eventInfo.put("taskTitle", event.get("taskTitle"));
110            eventInfo.put("taskId", event.get("taskId"));
111            eventInfo.put("taskUrl", event.get("taskUrl"));
112            
113            tasks.add(eventInfo);
114        }
115        
116        mergedEvent.put("tasks", tasks);
117        
118        return mergedEvent;
119    }
120}