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}