001/* 002 * (C) Copyright 2012 Nuxeo SA (http://nuxeo.com/) and contributors. 003 * 004 * All rights reserved. This program and the accompanying materials 005 * are made available under the terms of the GNU Lesser General Public License 006 * (LGPL) version 2.1 which accompanies this distribution, and is available at 007 * http://www.gnu.org/licenses/lgpl.html 008 * 009 * This library is distributed in the hope that it will be useful, 010 * but WITHOUT ANY WARRANTY; without even the implied warranty of 011 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 012 * Lesser General Public License for more details. 013 * 014 * Contributors: 015 * Thomas Roger (troger@nuxeo.com) 016 */ 017 018package org.nuxeo.ecm.activity; 019 020import java.util.ArrayList; 021import java.util.Collections; 022import java.util.Comparator; 023import java.util.HashMap; 024import java.util.List; 025import java.util.Map; 026 027import org.nuxeo.runtime.model.ContributionFragmentRegistry; 028 029/** 030 * Registry for activity upgraders, handling merge of registered 031 * {@link org.nuxeo.ecm.activity.ActivityUpgraderDescriptor} elements. 032 * 033 * @author <a href="mailto:troger@nuxeo.com">Thomas Roger</a> 034 * @since 5.7 035 */ 036public class ActivityUpgraderRegistry extends ContributionFragmentRegistry<ActivityUpgraderDescriptor> { 037 038 protected Map<String, ActivityUpgrader> activityUpgraders = new HashMap<String, ActivityUpgrader>(); 039 040 public List<ActivityUpgrader> getOrderedActivityUpgraders() { 041 List<ActivityUpgrader> upgraders = new ArrayList<ActivityUpgrader>(activityUpgraders.values()); 042 Collections.sort(upgraders, new Comparator<ActivityUpgrader>() { 043 @Override 044 public int compare(ActivityUpgrader o1, ActivityUpgrader o2) { 045 return o1.getOrder() - o2.getOrder(); 046 } 047 }); 048 return upgraders; 049 } 050 051 @Override 052 public String getContributionId(ActivityUpgraderDescriptor contrib) { 053 return contrib.getName(); 054 } 055 056 @Override 057 public void contributionUpdated(String id, ActivityUpgraderDescriptor contrib, 058 ActivityUpgraderDescriptor newOrigContrib) { 059 activityUpgraders.put(id, contrib.getActivityUpgrader()); 060 } 061 062 @Override 063 public void contributionRemoved(String id, ActivityUpgraderDescriptor origContrib) { 064 activityUpgraders.remove(id); 065 } 066 067 @Override 068 public ActivityUpgraderDescriptor clone(ActivityUpgraderDescriptor orig) { 069 return orig.clone(); 070 } 071 072 @Override 073 public void merge(ActivityUpgraderDescriptor src, ActivityUpgraderDescriptor dst) { 074 Class<? extends ActivityUpgrader> clazz = src.getActivityUpgraderClass(); 075 if (clazz != null) { 076 dst.setActivityUpgraderClass(clazz); 077 } 078 dst.setOrder(src.getOrder()); 079 080 boolean enabled = src.isEnabled(); 081 if (enabled != dst.isEnabled()) { 082 dst.setEnabled(enabled); 083 } 084 } 085 086}