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.Map; 022 023 import org.apache.hivemind.ApplicationRuntimeException; 024 import org.apache.hivemind.Location; 025 import org.apache.hivemind.definition.ConfigurationParserDefinition; 026 import org.apache.hivemind.definition.ConfigurationPointDefinition; 027 import org.apache.hivemind.definition.ContributionDefinition; 028 import org.apache.hivemind.definition.DefinitionMessages; 029 import org.apache.hivemind.definition.ExtensionDefinition; 030 import org.apache.hivemind.definition.ModuleDefinition; 031 import org.apache.hivemind.definition.Occurances; 032 import org.apache.hivemind.definition.Visibility; 033 034 /** 035 * Default implementation of {@link ConfigurationPointDefinition}. 036 * 037 * @author Achim Huegen 038 */ 039 public class ConfigurationPointDefinitionImpl extends ExtensionPointDefinitionImpl implements ConfigurationPointDefinition 040 { 041 private String _containerClassName; 042 043 private Occurances _expectedContributions; 044 045 private Collection _contributions = new ArrayList(); 046 047 private Map _parsers = new HashMap(); 048 049 public ConfigurationPointDefinitionImpl(ModuleDefinition module) 050 { 051 super(module); 052 } 053 054 public ConfigurationPointDefinitionImpl(ModuleDefinition module, String id, Location location, Visibility visibility, 055 String containerClassName, Occurances expectedContributions) 056 { 057 super(module, id, location, visibility); 058 _containerClassName = containerClassName; 059 _expectedContributions = expectedContributions; 060 } 061 062 /** 063 * @see org.apache.hivemind.definition.ConfigurationPointDefinition#getConfigurationTypeName() 064 */ 065 public String getConfigurationTypeName() 066 { 067 return _containerClassName; 068 } 069 070 /** 071 * Set the class name of the configuration. 072 */ 073 public void setConfigurationTypeName(String containerClassName) 074 { 075 _containerClassName = containerClassName; 076 } 077 078 /** 079 * @see org.apache.hivemind.definition.ConfigurationPointDefinition#getExpectedContributions() 080 */ 081 public Occurances getExpectedContributions() 082 { 083 return _expectedContributions; 084 } 085 086 /** 087 * Sets the expected number of contributions to the configuration. 088 */ 089 public void setExpectedContributions(Occurances expectedContributions) 090 { 091 _expectedContributions = expectedContributions; 092 } 093 094 /** 095 * @see org.apache.hivemind.definition.ConfigurationPointDefinition#getContributions() 096 */ 097 public Collection getContributions() 098 { 099 return Collections.unmodifiableCollection(_contributions); 100 } 101 102 /** 103 * @see org.apache.hivemind.definition.ConfigurationPointDefinition#addContribution(org.apache.hivemind.definition.ContributionDefinition) 104 */ 105 public void addContribution(ContributionDefinition contribution) 106 { 107 checkVisibility(contribution); 108 _contributions.add(contribution); 109 } 110 111 /** 112 * Checks if Extension can see this configuration point. 113 * @throws ApplicationRuntimeException if not visible 114 */ 115 private void checkVisibility(ExtensionDefinition extension) 116 { 117 if (Visibility.PRIVATE.equals(getVisibility()) 118 && !extension.getModuleId().equals(getModuleId())) 119 { 120 throw new ApplicationRuntimeException(DefinitionMessages.configurationPointNotVisible( 121 this, 122 extension.getModule())); 123 } 124 } 125 126 /** 127 * @see org.apache.hivemind.definition.ConfigurationPointDefinition#addParser(org.apache.hivemind.definition.ConfigurationParserDefinition) 128 */ 129 public void addParser(ConfigurationParserDefinition parser) 130 { 131 checkVisibility(parser); 132 133 if (_parsers.containsKey(parser.getInputFormat())) { 134 throw new ApplicationRuntimeException(DefinitionMessages.duplicateParserInputFormat(parser.getInputFormat(), 135 this)); 136 } 137 _parsers.put(parser.getInputFormat(), parser); 138 } 139 140 /** 141 * @see org.apache.hivemind.definition.ConfigurationPointDefinition#getParsers() 142 */ 143 public Collection getParsers() 144 { 145 return Collections.unmodifiableCollection(_parsers.values()); 146 } 147 148 /** 149 * @see org.apache.hivemind.definition.ConfigurationPointDefinition#getParser(java.lang.String) 150 */ 151 public ConfigurationParserDefinition getParser(String inputFormat) 152 { 153 return (ConfigurationParserDefinition) _parsers.get(inputFormat); 154 } 155 156 157 }