001/* 002 * (C) Copyright 2006-2012 Nuxeo SA (http://nuxeo.com/) and others. 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-2.1.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.HashMap; 022import java.util.List; 023import java.util.Map; 024 025import org.nuxeo.runtime.model.ContributionFragmentRegistry; 026 027/** 028 * Registry for activity link builders, handling merge of registered {@link ActivityLinkBuilderDescriptor} elements. 029 * 030 * @author <a href="mailto:troger@nuxeo.com">Thomas Roger</a> 031 * @since 5.6 032 */ 033public class ActivityLinkBuilderRegistry extends ContributionFragmentRegistry<ActivityLinkBuilderDescriptor> { 034 035 protected Map<String, ActivityLinkBuilder> activityLinkBuilders = new HashMap<String, ActivityLinkBuilder>(); 036 037 protected List<String> activityLinkBuildersIds = new ArrayList<String>(); 038 039 public ActivityLinkBuilder getDefaultActivityLinkBuilder() { 040 if (activityLinkBuildersIds.isEmpty()) { 041 throw new IllegalStateException("No default ActivityLinkBuilder configured"); 042 } 043 return activityLinkBuilders.get(activityLinkBuildersIds.get(0)); 044 } 045 046 public ActivityLinkBuilder get(String name) { 047 return activityLinkBuilders.get(name); 048 } 049 050 @Override 051 public String getContributionId(ActivityLinkBuilderDescriptor contrib) { 052 return contrib.getName(); 053 } 054 055 @Override 056 public void contributionUpdated(String id, ActivityLinkBuilderDescriptor contrib, 057 ActivityLinkBuilderDescriptor newOrigContrib) { 058 activityLinkBuilders.put(id, contrib.getActivityLinkBuilder()); 059 if (contrib.isDefault()) { 060 activityLinkBuildersIds.add(0, id); 061 } 062 } 063 064 @Override 065 public void contributionRemoved(String id, ActivityLinkBuilderDescriptor origContrib) { 066 activityLinkBuilders.remove(id); 067 activityLinkBuildersIds.remove(id); 068 } 069 070 @Override 071 public ActivityLinkBuilderDescriptor clone(ActivityLinkBuilderDescriptor orig) { 072 return orig.clone(); 073 } 074 075 @Override 076 public void merge(ActivityLinkBuilderDescriptor src, ActivityLinkBuilderDescriptor dst) { 077 Class<? extends ActivityLinkBuilder> clazz = src.getActivityLinkBuilderClass(); 078 if (clazz != null) { 079 dst.setActivityLinkBuilderClass(clazz); 080 } 081 boolean isDefault = src.isDefault(); 082 if (isDefault != dst.isDefault()) { 083 dst.setDefault(isDefault); 084 } 085 boolean enabled = src.isEnabled(); 086 if (enabled != dst.isEnabled()) { 087 dst.setEnabled(enabled); 088 } 089 } 090 091}