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.ClassResolver;
025 import org.apache.hivemind.Location;
026 import org.apache.hivemind.definition.ConfigurationParserDefinition;
027 import org.apache.hivemind.definition.ConfigurationPointDefinition;
028 import org.apache.hivemind.definition.ContributionDefinition;
029 import org.apache.hivemind.definition.DefinitionMessages;
030 import org.apache.hivemind.definition.ExtensionDefinition;
031 import org.apache.hivemind.definition.ModuleDefinition;
032 import org.apache.hivemind.definition.ImplementationDefinition;
033 import org.apache.hivemind.definition.InterceptorDefinition;
034 import org.apache.hivemind.definition.ServicePointDefinition;
035 import org.apache.hivemind.definition.UnresolvedExtension;
036
037 /**
038 * Default implementation of {@link ExtensionDefinition}.
039 *
040 * @author Achim Huegen
041 */
042 public class ModuleDefinitionImpl implements ModuleDefinition
043 {
044 private String _id;
045
046 private Location _location;
047
048 private String _packageName;
049
050 private ClassResolver _classResolver;
051
052 private Map _servicePoints = new HashMap();
053
054 private Map _configurationPoints = new HashMap();
055
056 private Collection _dependencies = new ArrayList();
057
058 private Collection _unresolvedImplementations = new ArrayList();
059
060 private Collection _unresolvedContributions = new ArrayList();
061
062 private Collection _unresolvedInterceptors = new ArrayList();
063
064 private Collection _unresolvedConfigurationParsers = new ArrayList();
065
066 public ModuleDefinitionImpl()
067 {
068 }
069
070 /**
071 * @param id the id of the module
072 * @param location the location of the module
073 * @param resolver the {@link ClassResolver} used to resolve all classes referenced from
074 * elements inside this module.
075 * @param packageName name of the package to search for class names within. If null, it defaults to the id
076 */
077 public ModuleDefinitionImpl(String id, Location location, ClassResolver resolver, String packageName)
078 {
079 _id = id;
080 _location = location;
081 _classResolver = resolver;
082 if (packageName != null)
083 _packageName = packageName;
084 else _packageName = id;
085 }
086
087 /**
088 * @see org.apache.hivemind.definition.ModuleDefinition#getClassResolver()
089 */
090 public ClassResolver getClassResolver()
091 {
092 return _classResolver;
093 }
094
095 /**
096 * Sets the {@link ClassResolver} used to resolve all classes referenced from elements
097 * inside the module.
098 */
099 public void setClassResolver(ClassResolver classResolver)
100 {
101 _classResolver = classResolver;
102 }
103
104 /**
105 * @see org.apache.hivemind.definition.ModuleDefinition#getLocation()
106 */
107 public Location getLocation()
108 {
109 return _location;
110 }
111
112 /**
113 * Sets the location of the module.
114 */
115 public void setLocation(Location location)
116 {
117 _location = location;
118 }
119
120 /**
121 * @see org.apache.hivemind.definition.ModuleDefinition#getId()
122 */
123 public String getId()
124 {
125 return _id;
126 }
127
128 /**
129 * Sets the id of the module.
130 */
131 public void setId(String moduleId)
132 {
133 this._id = moduleId;
134 }
135
136 /**
137 * @see org.apache.hivemind.definition.ModuleDefinition#getPackageName()
138 */
139 public String getPackageName()
140 {
141 return _packageName;
142 }
143
144 /**
145 * Sets the package name of the module.
146 */
147 public void setPackageName(String packageName)
148 {
149 _packageName = packageName;
150 }
151
152 /**
153 * Adds a service point definition to the module.
154 * @param servicePoint the service point
155 * @throws ApplicationRuntimeException if another service point with the same id has already been defined
156 */
157 public void addServicePoint(ServicePointDefinition servicePoint)
158 {
159 if (_servicePoints.containsKey(servicePoint.getId())) {
160 throw new ApplicationRuntimeException(DefinitionMessages.duplicateServicePointId(servicePoint.getQualifiedId(),
161 this));
162 }
163 _servicePoints.put(servicePoint.getId(), servicePoint);
164 }
165
166 /**
167 * @see org.apache.hivemind.definition.ModuleDefinition#getServicePoint(java.lang.String)
168 */
169 public ServicePointDefinition getServicePoint(String id)
170 {
171 return (ServicePointDefinition) _servicePoints.get(id);
172 }
173
174 /**
175 * @see org.apache.hivemind.definition.ModuleDefinition#getServicePoints()
176 */
177 public Collection getServicePoints()
178 {
179 return Collections.unmodifiableCollection(_servicePoints.values());
180 }
181
182 /**
183 * Adds a configuration point definition to the module.
184 * @param configurationPoint the configuration point
185 * @throws ApplicationRuntimeException if another configuration point with the same id has already been defined
186 */
187 public void addConfigurationPoint(ConfigurationPointDefinition configurationPoint)
188 {
189 if (_configurationPoints.containsKey(configurationPoint.getId())) {
190 throw new ApplicationRuntimeException(DefinitionMessages.duplicateConfigurationPointId(configurationPoint.getId(),
191 this));
192 }
193 _configurationPoints.put(configurationPoint.getId(), configurationPoint);
194 }
195
196 /**
197 * @see org.apache.hivemind.definition.ModuleDefinition#getConfigurationPoint(java.lang.String)
198 */
199 public ConfigurationPointDefinition getConfigurationPoint(String id)
200 {
201 return (ConfigurationPointDefinition) _configurationPoints.get(id);
202 }
203
204 /**
205 * @see org.apache.hivemind.definition.ModuleDefinition#getConfigurationPoints()
206 */
207 public Collection getConfigurationPoints()
208 {
209 return Collections.unmodifiableCollection(_configurationPoints.values());
210 }
211
212 /**
213 * @see org.apache.hivemind.definition.ModuleDefinition#getDependencies()
214 */
215 public Collection getDependencies()
216 {
217 return Collections.unmodifiableCollection(_dependencies);
218 }
219
220 /**
221 * Defines a dependency on another module. The presence of that module
222 * is checked during registry construction.
223 *
224 * @param dependsOnModuleId the id of the module this module depends on
225 */
226 public void addDependency(String dependsOnModuleId)
227 {
228 _dependencies.add(dependsOnModuleId);
229 }
230
231 /**
232 * Adds a implementation for a service point which can be defined in this
233 * module or another module.
234 *
235 * @param qualifiedServicePointId the fully qualified service point id
236 * @param implementation the implementation definition
237 */
238 public void addImplementation(String qualifiedServicePointId,
239 ImplementationDefinition implementation)
240 {
241 UnresolvedExtension unresolvedExtension = new UnresolvedExtension(implementation,
242 qualifiedServicePointId);
243 _unresolvedImplementations.add(unresolvedExtension);
244 }
245
246 /**
247 * Adds a interceptor for a service point which can be defined in this
248 * module or another module.
249 *
250 * @param qualifiedServicePointId the fully qualified service point id
251 * @param interceptor the interceptor definition
252 */
253 public void addInterceptor(String qualifiedServicePointId,
254 InterceptorDefinition interceptor)
255 {
256 UnresolvedExtension unresolvedExtension = new UnresolvedExtension(interceptor,
257 qualifiedServicePointId);
258 _unresolvedInterceptors.add(unresolvedExtension);
259 }
260
261 /**
262 * Adds a contribution for a configuration point which can be defined in this
263 * module or another module.
264 *
265 * @param qualifiedConfigurationPointId the fully qualified configuration point id
266 * @param contribution the contribution definition
267 */
268 public void addContribution(String qualifiedConfigurationPointId,
269 ContributionDefinition contribution)
270 {
271 UnresolvedExtension unresolvedExtension = new UnresolvedExtension(contribution,
272 qualifiedConfigurationPointId);
273 _unresolvedContributions.add(unresolvedExtension);
274 }
275
276 /**
277 * Adds a configuration parser for a configuration point which can be defined in this
278 * module or another module.
279 *
280 * @param qualifiedConfigurationPointId the fully qualified configuration point id
281 * @param parser the parser definition
282 */
283 public void addConfigurationParser(String qualifiedConfigurationPointId, ConfigurationParserDefinition parser)
284 {
285 UnresolvedExtension unresolvedExtension = new UnresolvedExtension(parser,
286 qualifiedConfigurationPointId);
287 _unresolvedConfigurationParsers.add(unresolvedExtension);
288 }
289
290 /**
291 * @see org.apache.hivemind.definition.ModuleDefinition#getContributions()
292 */
293 public Collection getContributions()
294 {
295 return _unresolvedContributions;
296 }
297
298 /**
299 * @see org.apache.hivemind.definition.ModuleDefinition#getImplementations()
300 */
301 public Collection getImplementations()
302 {
303 return _unresolvedImplementations;
304 }
305
306 /**
307 * @see org.apache.hivemind.definition.ModuleDefinition#getInterceptors()
308 */
309 public Collection getInterceptors()
310 {
311 return _unresolvedInterceptors;
312 }
313
314 /**
315 * @see org.apache.hivemind.definition.ModuleDefinition#getConfigurationParsers()
316 */
317 public Collection getConfigurationParsers()
318 {
319 return _unresolvedConfigurationParsers;
320 }
321
322
323 }