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.activities.tasks; 017 018import java.util.ArrayList; 019import java.util.HashMap; 020import java.util.List; 021import java.util.Map; 022 023import javax.jcr.RepositoryException; 024 025import org.apache.avalon.framework.service.ServiceException; 026import org.apache.avalon.framework.service.ServiceManager; 027 028import org.ametys.core.observation.Event; 029import org.ametys.plugins.repository.AmetysObject; 030import org.ametys.plugins.repository.activities.Activity; 031import org.ametys.plugins.repository.activities.ActivityType; 032import org.ametys.plugins.workspaces.ObservationConstants; 033import org.ametys.plugins.workspaces.activities.AbstractWorkspacesActivityType; 034import org.ametys.plugins.workspaces.project.modules.WorkspaceModuleExtensionPoint; 035import org.ametys.plugins.workspaces.project.objects.Project; 036import org.ametys.plugins.workspaces.tasks.Task; 037import org.ametys.plugins.workspaces.tasks.TasksWorkspaceModule; 038 039/** 040 * {@link ActivityType} implementation for documents-related activities 041 */ 042public class TasksActivityType extends AbstractWorkspacesActivityType 043{ 044 /** Constant for activity's category */ 045 public static final String ACIVITY_CATEGORY_TASKS = "tasks"; 046 /** data name for the task title */ 047 public static final String TASK_TITLE = "taskTitle"; 048 /** data name for the task id */ 049 public static final String TASK_ID = "taskId"; 050 /** data name for the number of attachements of the task */ 051 public static final String ATTACHEMENTS_COUNT = "nbAttachments"; 052 053 private TasksWorkspaceModule _taskModule; 054 055 @Override 056 public void service(ServiceManager serviceManager) throws ServiceException 057 { 058 super.service(serviceManager); 059 WorkspaceModuleExtensionPoint moduleManagerEP = (WorkspaceModuleExtensionPoint) serviceManager.lookup(WorkspaceModuleExtensionPoint.ROLE); 060 _taskModule = moduleManagerEP.getModule(TasksWorkspaceModule.TASK_MODULE_ID); 061 } 062 063 064 @Override 065 public void setAdditionalActivityData(Activity activity, Map<String, Object> parameters) throws RepositoryException 066 { 067 super.setAdditionalActivityData(activity, parameters); 068 069 // Category 070 activity.setValue(PROJECT_CATEGORY, ACIVITY_CATEGORY_TASKS); 071 072 // Task 073 Task task = (Task) parameters.get(ObservationConstants.ARGS_TASK); 074 activity.setValue(TASK_TITLE, task.getLabel()); 075 activity.setValue(TASK_ID, task.getId()); 076 activity.setValue(ATTACHEMENTS_COUNT, task.getAttachments().size()); 077 } 078 079 @Override 080 public Map<String, Object> additionnalDataToJSONForClient(Activity activity) 081 { 082 Map<String, Object> json = super.additionnalDataToJSONForClient(activity); 083 084 // add the url if possible 085 String projectName = activity.getValue(PROJECT_NAME); 086 Project project = _projectManager.getProject(projectName); 087 if (!ObservationConstants.EVENT_TASK_DELETING.equals(activity.getEventType()) && activity.hasValue(TASK_ID)) 088 { 089 String taskId = activity.getValue(TASK_ID); 090 json.put("taskUrl", _taskModule.getTaskUri(project, taskId)); 091 } 092 else 093 { 094 json.put("taskUrl", _taskModule.getModuleUrl(project)); 095 } 096 097 return json; 098 } 099 100 @Override 101 public Map<String, Object> mergeActivities(List<Activity> activities) 102 { 103 Map<String, Object> mergedActivities = super.mergeActivities(activities); 104 105 List<Map<String, Object>> tasks = new ArrayList<>(); 106 107 for (Activity event : activities) 108 { 109 Map<String, Object> json = event.toJSONForClient(); 110 Map<String, Object> eventInfo = new HashMap<>(); 111 112 eventInfo.put(TASK_TITLE, json.get(TASK_TITLE)); 113 eventInfo.put(TASK_ID, json.get(TASK_ID)); 114 eventInfo.put("taskUrl", json.get("taskUrl")); 115 116 tasks.add(eventInfo); 117 } 118 119 mergedActivities.put("tasks", tasks); 120 121 return mergedActivities; 122 } 123 124 @Override 125 public Project getProjectFromEvent(Event event) 126 { 127 Map<String, Object> args = event.getArguments(); 128 129 Task task = (Task) args.get(ObservationConstants.ARGS_TASK); 130 131 return getParentProject(task); 132 } 133 134 @Override 135 public AmetysObject getTargetAmetysObject(Activity activity) 136 { 137 return _resolver.resolveById(activity.getValue(TasksActivityType.TASK_ID)); 138 } 139 140 @Override 141 public List<String> getSubjectI18nParams(Activity activity) 142 { 143 List<String> i18nparams = super.getSubjectI18nParams(activity); // {0} project title 144 145 i18nparams.add(activity.getValue(TasksActivityType.TASK_TITLE)); // {1} 146 return i18nparams; 147 } 148 149 @Override 150 public String getMailBodyURI(Activity activity) 151 { 152 return "cocoon://_plugins/workspaces/notification-mail-task"; 153 } 154}