001/*
002 *  Copyright 2017 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.wiki;
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.ametys.plugins.repository.RepositoryConstants;
027import org.ametys.plugins.repository.events.EventType;
028import org.ametys.plugins.workspaces.events.WorkspacesEventType;
029import org.ametys.web.ObservationConstants;
030
031/**
032 * {@link EventType} implementation for the creation or deletion of a page in the wiki module
033 */
034public class WikiPageDeletedEventType extends WorkspacesEventType
035{
036    /** Constant for event's category */
037    public static final String EVENT_CATEGORY_WIKI = "wiki";
038
039    /** Constant for page's title */
040    public static final String EVENT_PAGE_TITLE_PROPERTY = RepositoryConstants.NAMESPACE_PREFIX + ":pageTitle";
041    /** Constant for page's title */
042    public static final String EVENT_PAGE_ID_PROPERTY = RepositoryConstants.NAMESPACE_PREFIX + ":pageId";
043    
044    @Override
045    protected void storeAdditionalEventData(Node eventNode, Map<String, Object> parameters) throws RepositoryException
046    {
047        super.storeAdditionalEventData(eventNode, parameters);
048        
049        eventNode.setProperty(EVENT_PROJECT_CATEGORY_PROPERTY, EVENT_CATEGORY_WIKI);
050        
051        String pageId = (String) parameters.get(ObservationConstants.ARGS_PAGE_ID);
052        String pageTitle = (String) parameters.get(org.ametys.plugins.workspaces.ObservationConstants.ARGS_PAGE_TITLE);
053        eventNode.setProperty(EVENT_PAGE_ID_PROPERTY, pageId);
054        eventNode.setProperty(EVENT_PAGE_TITLE_PROPERTY, pageTitle);
055    }
056    
057    @Override
058    public Map<String, Object> event2JSON(Node eventNode) throws RepositoryException
059    {
060        Map<String, Object> event = super.event2JSON(eventNode);
061        String pageId = eventNode.getProperty(EVENT_PAGE_ID_PROPERTY).getString();
062        event.put("pageId", pageId);
063        event.put("pageTitle", eventNode.getProperty(EVENT_PAGE_TITLE_PROPERTY).getString());
064        
065        return event;
066    }
067    
068    @Override
069    public boolean isMergeable(Map<String, Object> event1, Map<String, Object> event2)
070    {
071        if (!super.isMergeable(event1, event2))
072        {
073            return false;
074        }
075        
076        String page1 = (String) event1.get("pageId");
077        String page2 = (String) event2.get("pageId");
078        
079        return page1 != null && page2 != null && !page1.equals(page2);
080    }
081    
082    @Override
083    public Map<String, Object> mergeEvents(List<Map<String, Object>> events)
084    {
085        Map<String, Object> mergedEvent = super.mergeEvents(events);
086        
087        List<Map<String, Object>> mergedPages = new ArrayList<>();
088        
089        for (Map<String, Object> event : events)
090        {
091            Map<String, Object> pageInfo = new HashMap<>();
092            
093            pageInfo.put("pageTitle", event.get("pageTitle"));
094            
095            mergedPages.add(pageInfo);
096        }
097        mergedEvent.put("pages", mergedPages);
098        
099        return mergedEvent;
100    }
101}