001/* 002 * (C) Copyright 2014 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-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 * Anahide Tchertchian 016 */ 017package org.nuxeo.ecm.platform.forms.layout.core.registries; 018 019import java.util.ArrayList; 020import java.util.List; 021 022import org.nuxeo.ecm.platform.forms.layout.api.LayoutTypeDefinition; 023import org.nuxeo.runtime.model.SimpleContributionRegistry; 024 025/** 026 * Regiustry for layoyut type definitions. 027 * 028 * @since 6.0 029 */ 030public class LayoutTypeDefinitionRegistry extends SimpleContributionRegistry<LayoutTypeDefinition> { 031 032 protected final String category; 033 034 public LayoutTypeDefinitionRegistry(String category) { 035 super(); 036 this.category = category; 037 } 038 039 public String getCategory() { 040 return category; 041 } 042 043 @Override 044 public String getContributionId(LayoutTypeDefinition contrib) { 045 return contrib.getName(); 046 } 047 048 public List<LayoutTypeDefinition> getDefinitions() { 049 List<LayoutTypeDefinition> res = new ArrayList<LayoutTypeDefinition>(); 050 for (LayoutTypeDefinition item : currentContribs.values()) { 051 if (item != null) { 052 res.add(item); 053 } 054 } 055 return res; 056 } 057 058 public LayoutTypeDefinition getDefinition(String id) { 059 return getCurrentContribution(id); 060 } 061 062 @Override 063 // overridden to handle aliases 064 public synchronized void addContribution(LayoutTypeDefinition contrib) { 065 super.addContribution(contrib); 066 List<String> aliases = contrib.getAliases(); 067 if (aliases != null) { 068 for (String alias : aliases) { 069 FragmentList<LayoutTypeDefinition> head = addFragment(alias, contrib); 070 contributionUpdated(alias, head.merge(this), contrib); 071 } 072 } 073 } 074 075 /** 076 * Overridden to use equals method when removing elements. 077 * 078 * @since 7.2 079 */ 080 @Override 081 public synchronized void removeContribution(LayoutTypeDefinition contrib) { 082 removeContribution(contrib, true); 083 } 084 085 @Override 086 // overridden to handle aliases 087 public synchronized void removeContribution(LayoutTypeDefinition contrib, boolean useEqualsMethod) { 088 super.removeContribution(contrib, useEqualsMethod); 089 List<String> aliases = contrib.getAliases(); 090 if (aliases != null) { 091 for (String alias : aliases) { 092 FragmentList<LayoutTypeDefinition> head = removeFragment(alias, contrib, useEqualsMethod); 093 if (head != null) { 094 LayoutTypeDefinition result = head.merge(this); 095 if (result != null) { 096 contributionUpdated(alias, result, contrib); 097 } else { 098 contributionRemoved(alias, contrib); 099 } 100 } 101 } 102 } 103 } 104 105}