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.minisite; 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.ametys.core.observation.Event; 026import org.ametys.plugins.repository.AmetysObject; 027import org.ametys.plugins.repository.activities.Activity; 028import org.ametys.plugins.repository.activities.ActivityType; 029import org.ametys.plugins.workspaces.activities.AbstractWorkspacesActivityType; 030import org.ametys.plugins.workspaces.project.objects.Project; 031import org.ametys.web.ObservationConstants; 032import org.ametys.web.repository.page.Page; 033import org.ametys.web.repository.page.SitemapElement; 034 035/** 036 * {@link ActivityType} implementation for minisite-related events 037 */ 038public class MinisiteActivityType extends AbstractWorkspacesActivityType 039{ 040 /** data name for the page title */ 041 public static final String PAGE_TITLE = "pageTitle"; 042 /** data name for the page id */ 043 public static final String PAGE_ID = "pageId"; 044 /** Constant for activity's category */ 045 public static final String ACTIVITY_CATEGORY_MINISITE = "minisite"; 046 047 @Override 048 public void setAdditionalActivityData(Activity activity, Map<String, Object> parameters) throws RepositoryException 049 { 050 super.setAdditionalActivityData(activity, parameters); 051 052 activity.setValue(PROJECT_CATEGORY, ACTIVITY_CATEGORY_MINISITE); 053 054 Page page = _getPage(parameters); 055 if (page != null) 056 { 057 activity.setValue(PAGE_ID, page.getId()); 058 activity.setValue(PAGE_TITLE, page.getTitle()); 059 } 060 else 061 { 062 String pageId = (String) parameters.get(ObservationConstants.ARGS_PAGE_ID); 063 if (pageId != null) 064 { 065 activity.setValue(PAGE_ID, pageId); 066 } 067 String pageTitle = (String) parameters.get(org.ametys.plugins.workspaces.ObservationConstants.ARGS_PAGE_TITLE); 068 if (pageTitle != null) 069 { 070 activity.setValue(PAGE_TITLE, pageTitle); 071 } 072 } 073 } 074 075 private Page _getPage(Map<String, Object> parameters) 076 { 077 SitemapElement sitemapElement = (SitemapElement) parameters.get(ObservationConstants.ARGS_SITEMAP_ELEMENT); 078 if (sitemapElement != null && sitemapElement instanceof Page page) 079 { 080 return page; 081 } 082 else 083 { 084 return (Page) parameters.get(ObservationConstants.ARGS_PAGE); 085 } 086 } 087 088 @Override 089 public Map<String, Object> mergeActivities(List<Activity> activities) 090 { 091 Map<String, Object> mergedActivities = super.mergeActivities(activities); 092 093 List<Map<String, Object>> mergedPages = new ArrayList<>(); 094 095 List<String> knownPages = new ArrayList<>(); 096 097 for (Activity event : activities) 098 { 099 String pageId = event.getValue(PAGE_ID); 100 if (!knownPages.contains(pageId)) 101 { 102 knownPages.add(pageId); 103 Map<String, Object> pageInfo = new HashMap<>(); 104 105 pageInfo.put(PAGE_ID, event.getValue(PAGE_ID)); 106 pageInfo.put(PAGE_TITLE, event.getValue(PAGE_TITLE)); 107 108 mergedPages.add(pageInfo); 109 } 110 } 111 mergedActivities.put("pages", mergedPages); 112 mergedActivities.put("amount", mergedPages.size()); 113 114 return mergedActivities; 115 } 116 117 @Override 118 public Project getProjectFromEvent(Event event) 119 { 120 Map<String, Object> args = event.getArguments(); 121 122 return (Project) args.get(org.ametys.plugins.workspaces.ObservationConstants.ARGS_PROJECT); 123 } 124 125 @Override 126 public AmetysObject getTargetAmetysObject(Activity activity) 127 { 128 return _resolver.resolveById(activity.getValue(MinisiteActivityType.PAGE_ID)); 129 } 130 131 @Override 132 public String getMailBodyURI(Activity activity) 133 { 134 return "cocoon://_plugins/workspaces/notification-mail-minisite"; 135 } 136 137}