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