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