001 // Copyright 2007 The Apache Software Foundation 002 // 003 // Licensed under the Apache License, Version 2.0 (the "License"); 004 // you may not use this file except in compliance with the License. 005 // You may obtain a copy of the License at 006 // 007 // http://www.apache.org/licenses/LICENSE-2.0 008 // 009 // Unless required by applicable law or agreed to in writing, software 010 // distributed under the License is distributed on an "AS IS" BASIS, 011 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 012 // See the License for the specific language governing permissions and 013 // limitations under the License. 014 015 package org.apache.hivemind.definition.impl; 016 017 import java.util.ArrayList; 018 import java.util.Collection; 019 import java.util.Collections; 020 import java.util.HashMap; 021 import java.util.List; 022 import java.util.Map; 023 024 import org.apache.commons.logging.Log; 025 import org.apache.commons.logging.LogFactory; 026 import org.apache.hivemind.ApplicationRuntimeException; 027 import org.apache.hivemind.definition.ConfigurationPointDefinition; 028 import org.apache.hivemind.definition.DefinitionMessages; 029 import org.apache.hivemind.definition.ModuleDefinition; 030 import org.apache.hivemind.definition.RegistryDefinition; 031 import org.apache.hivemind.definition.RegistryDefinitionPostProcessor; 032 import org.apache.hivemind.definition.ServicePointDefinition; 033 import org.apache.hivemind.events.RegistryInitializationListener; 034 import org.apache.hivemind.util.IdUtils; 035 036 /** 037 * Default implementation of {@link RegistryDefinition}. 038 * 039 * @author Achim Huegen 040 */ 041 public class RegistryDefinitionImpl implements RegistryDefinition 042 { 043 private static final Log LOG = LogFactory.getLog(RegistryDefinitionImpl.class); 044 045 private Map _modules = new HashMap(); 046 047 private List _postProcessors = new ArrayList(); 048 049 private List _initializationListeners = new ArrayList(); 050 051 public RegistryDefinitionImpl() 052 { 053 } 054 055 /** 056 * @see org.apache.hivemind.definition.RegistryDefinition#addModule(org.apache.hivemind.definition.ModuleDefinition) 057 */ 058 public void addModule(ModuleDefinition module) throws ApplicationRuntimeException 059 { 060 if (_modules.containsKey(module.getId())) 061 { 062 throw new ApplicationRuntimeException(DefinitionMessages.duplicateModuleId(module.getId())); 063 } 064 else 065 { 066 if (LOG.isDebugEnabled()) 067 LOG.debug("Adding module " + module.getId() + " to registry definition"); 068 069 _modules.put(module.getId(), module); 070 } 071 } 072 073 /** 074 * @see org.apache.hivemind.definition.RegistryDefinition#addPostProcessor(org.apache.hivemind.definition.RegistryDefinitionPostProcessor) 075 */ 076 public void addPostProcessor(RegistryDefinitionPostProcessor postProcessor) 077 { 078 _postProcessors.add(postProcessor); 079 } 080 081 /** 082 * @see org.apache.hivemind.definition.RegistryDefinition#getPostProcessors() 083 */ 084 public List getPostProcessors() 085 { 086 return Collections.unmodifiableList(_postProcessors); 087 } 088 089 /** 090 * @see org.apache.hivemind.definition.RegistryDefinition#addRegistryInitializationListener(org.apache.hivemind.events.RegistryInitializationListener) 091 */ 092 public void addRegistryInitializationListener(RegistryInitializationListener listener) 093 { 094 _initializationListeners.add(listener); 095 } 096 097 /** 098 * @see org.apache.hivemind.definition.RegistryDefinition#getRegistryInitializationListeners() 099 */ 100 public List getRegistryInitializationListeners() 101 { 102 return Collections.unmodifiableList(_initializationListeners); 103 } 104 105 /** 106 * @see org.apache.hivemind.definition.RegistryDefinition#getModules() 107 */ 108 public Collection getModules() 109 { 110 return Collections.unmodifiableCollection(_modules.values()); 111 } 112 113 /** 114 * @see org.apache.hivemind.definition.RegistryDefinition#getModule(java.lang.String) 115 */ 116 public ModuleDefinition getModule(String id) 117 { 118 return (ModuleDefinition) _modules.get(id); 119 } 120 121 /** 122 * @see org.apache.hivemind.definition.RegistryDefinition#getServicePoint(java.lang.String) 123 */ 124 public ServicePointDefinition getServicePoint(String qualifiedServicePointId) 125 { 126 String moduleId = IdUtils.extractModule(qualifiedServicePointId); 127 String servicePointId = IdUtils.stripModule(qualifiedServicePointId); 128 129 ServicePointDefinition servicePoint = null; 130 ModuleDefinition module = getModule(moduleId); 131 if (module != null) 132 { 133 servicePoint = module.getServicePoint(servicePointId); 134 } 135 return servicePoint; 136 } 137 138 /** 139 * @see org.apache.hivemind.definition.RegistryDefinition#getConfigurationPoint(java.lang.String) 140 */ 141 public ConfigurationPointDefinition getConfigurationPoint(String qualifiedConfigurationPointId) 142 { 143 String moduleId = IdUtils.extractModule(qualifiedConfigurationPointId); 144 String configurationPointId = IdUtils.stripModule(qualifiedConfigurationPointId); 145 146 ConfigurationPointDefinition configurationPoint = null; 147 ModuleDefinition module = getModule(moduleId); 148 if (module != null) 149 { 150 configurationPoint = module.getConfigurationPoint(configurationPointId); 151 } 152 return configurationPoint; 153 } 154 155 }