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 org.apache.hivemind.definition.ConfigurationPointDefinition; 018 import org.apache.hivemind.definition.Contribution; 019 import org.apache.hivemind.definition.ContributionDefinition; 020 import org.apache.hivemind.definition.ImplementationConstructor; 021 import org.apache.hivemind.definition.ImplementationDefinition; 022 import org.apache.hivemind.definition.ModuleDefinition; 023 import org.apache.hivemind.definition.Occurances; 024 import org.apache.hivemind.definition.ServicePointDefinition; 025 import org.apache.hivemind.definition.Visibility; 026 import org.apache.hivemind.impl.CreateClassServiceConstructor; 027 import org.apache.hivemind.internal.ServiceModel; 028 029 /** 030 * Helper class that offers convenience functions for the definition of modules 031 * and its extension points. All instances created are 032 * {@link org.apache.hivemind.definition.impl standard implementations} 033 * of the definition interfaces. 034 * 035 * @author Achim Huegen 036 */ 037 public class ModuleDefinitionHelper 038 { 039 private ModuleDefinitionImpl _module; 040 041 public ModuleDefinitionHelper(ModuleDefinitionImpl module) 042 { 043 _module = module; 044 } 045 046 public ServicePointDefinition addServicePoint(String servicePointId, String serviceInterface) 047 { 048 ServicePointDefinitionImpl result = new ServicePointDefinitionImpl(_module, servicePointId, _module 049 .getLocation(), Visibility.PUBLIC, serviceInterface); 050 051 _module.addServicePoint(result); 052 return result; 053 } 054 055 public ServicePointDefinition addServicePointWithDefaultImplementation(String servicePointId, String serviceInterface) 056 { 057 ServicePointDefinition result = addServicePoint(servicePointId, serviceInterface); 058 String defaultImplementationName = serviceInterface + "Impl"; 059 addSimpleServiceImplementation(result, defaultImplementationName, ServiceModel.SINGLETON); 060 return result; 061 } 062 063 public ImplementationDefinition addServiceImplementation( 064 ServicePointDefinition servicePoint, 065 ImplementationConstructor constructor, String serviceModel 066 ) 067 { 068 // These implementations override the inline implementations, so default is true here 069 ImplementationDefinition result = new ImplementationDefinitionImpl(_module, _module 070 .getLocation(), constructor, serviceModel, true); 071 servicePoint.addImplementation(result); 072 return result; 073 } 074 075 public ImplementationDefinition addSimpleServiceImplementation( 076 ServicePointDefinition servicePoint, 077 String serviceImplementationClass, String serviceModel) 078 { 079 return addServiceImplementation(servicePoint, 080 new CreateClassServiceConstructor(_module.getLocation(), serviceImplementationClass), 081 serviceModel); 082 } 083 084 public ConfigurationPointDefinition addConfigurationPoint(String configurationPointId, String containerType) 085 { 086 ConfigurationPointDefinitionImpl result = new ConfigurationPointDefinitionImpl(_module, configurationPointId, _module 087 .getLocation(), Visibility.PUBLIC, containerType, Occurances.UNBOUNDED); 088 089 _module.addConfigurationPoint(result); 090 return result; 091 } 092 093 public ContributionDefinition addContributionDefinition(ConfigurationPointDefinition configurationPoint, 094 Contribution contributionConstructor) 095 { 096 ContributionDefinition result = new ContributionDefinitionImpl(_module, _module.getLocation(), contributionConstructor, false); 097 configurationPoint.addContribution(result); 098 return result; 099 } 100 101 public ContributionDefinition addContributionDefinition(String qualifiedConfigurationPointId, 102 Contribution contributionConstructor) 103 { 104 ContributionDefinitionImpl result = new ContributionDefinitionImpl(_module, _module.getLocation(), contributionConstructor, false); 105 _module.addContribution(qualifiedConfigurationPointId, result); 106 return result; 107 } 108 109 public ModuleDefinition getModule() 110 { 111 return _module; 112 } 113 114 }