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 * Anahide Tchertchian 016 */ 017package org.nuxeo.ecm.webapp.directory; 018 019import java.util.ArrayList; 020import java.util.Collections; 021import java.util.HashMap; 022import java.util.List; 023import java.util.Map; 024 025import org.apache.commons.logging.Log; 026import org.apache.commons.logging.LogFactory; 027import org.nuxeo.runtime.model.ContributionFragmentRegistry; 028 029/** 030 * Registry for directory tree descriptors 031 * 032 * @since 5.6 033 */ 034public class DirectoryTreeRegistry extends ContributionFragmentRegistry<DirectoryTreeDescriptor> { 035 036 private static final Log log = LogFactory.getLog(DirectoryTreeRegistry.class); 037 038 protected Map<String, DirectoryTreeDescriptor> registry = new HashMap<String, DirectoryTreeDescriptor>(); 039 040 @Override 041 public String getContributionId(DirectoryTreeDescriptor contrib) { 042 return contrib.getName(); 043 } 044 045 @Override 046 public void contributionUpdated(String id, DirectoryTreeDescriptor contrib, DirectoryTreeDescriptor newOrigContrib) { 047 if (registry.containsKey(contrib.getName())) { 048 DirectoryTreeDescriptor existing_descriptor = registry.get(contrib.getName()); 049 existing_descriptor.merge(contrib); 050 log.debug("merged DirectoryTreeDescriptor: " + contrib.getName()); 051 } else { 052 registry.put(contrib.getName(), contrib); 053 log.debug("registered DirectoryTreeDescriptor: " + contrib.getName()); 054 } 055 } 056 057 @Override 058 public void contributionRemoved(String id, DirectoryTreeDescriptor contrib) { 059 registry.remove(contrib.getName()); 060 log.debug("unregistered DirectoryTreeDescriptor: " + contrib.getName()); 061 } 062 063 @Override 064 public DirectoryTreeDescriptor clone(DirectoryTreeDescriptor orig) { 065 return orig.clone(); 066 } 067 068 @Override 069 public void merge(DirectoryTreeDescriptor src, DirectoryTreeDescriptor dst) { 070 dst.merge(src); 071 } 072 073 // API 074 075 public List<String> getDirectoryTrees() { 076 List<String> directoryTrees = new ArrayList<String>(); 077 for (DirectoryTreeDescriptor desc : registry.values()) { 078 if (Boolean.TRUE.equals(desc.getEnabled())) { 079 directoryTrees.add(desc.getName()); 080 } 081 } 082 Collections.sort(directoryTrees); 083 return directoryTrees; 084 } 085 086 public DirectoryTreeDescriptor getDirectoryTreeDescriptor(String treeName) { 087 DirectoryTreeDescriptor desc = registry.get(treeName); 088 if (desc != null && Boolean.TRUE.equals(desc.getEnabled())) { 089 return desc; 090 } else { 091 return null; 092 } 093 } 094 095 /** 096 * Returns only the enabled Directory Trees marked as being also Navigation Trees. 097 */ 098 public List<String> getNavigationDirectoryTrees() { 099 List<String> directoryTrees = new ArrayList<String>(); 100 for (DirectoryTreeDescriptor desc : registry.values()) { 101 if (Boolean.TRUE.equals(desc.getEnabled()) && desc.isNavigationTree()) { 102 directoryTrees.add(desc.getName()); 103 } 104 } 105 Collections.sort(directoryTrees); 106 return directoryTrees; 107 } 108 109}