diff options
Diffstat (limited to 'sca-java-1.x/tags/java-stable-20060304/sca/model/src/main/java/org/apache/tuscany/model/scdl/loader/impl/SCDLModelContentHandlerImpl.java')
-rw-r--r-- | sca-java-1.x/tags/java-stable-20060304/sca/model/src/main/java/org/apache/tuscany/model/scdl/loader/impl/SCDLModelContentHandlerImpl.java | 708 |
1 files changed, 708 insertions, 0 deletions
diff --git a/sca-java-1.x/tags/java-stable-20060304/sca/model/src/main/java/org/apache/tuscany/model/scdl/loader/impl/SCDLModelContentHandlerImpl.java b/sca-java-1.x/tags/java-stable-20060304/sca/model/src/main/java/org/apache/tuscany/model/scdl/loader/impl/SCDLModelContentHandlerImpl.java new file mode 100644 index 0000000000..f4f1f857e6 --- /dev/null +++ b/sca-java-1.x/tags/java-stable-20060304/sca/model/src/main/java/org/apache/tuscany/model/scdl/loader/impl/SCDLModelContentHandlerImpl.java @@ -0,0 +1,708 @@ +/** + * + * Copyright 2005 The Apache Software Foundation or its licensors, as applicable. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.tuscany.model.scdl.loader.impl; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import javax.wsdl.Definition; +import javax.wsdl.Import; +import javax.wsdl.WSDLException; +import javax.wsdl.factory.WSDLFactory; + +import org.apache.tuscany.model.assembly.Aggregate; +import org.apache.tuscany.model.assembly.AssemblyFactory; +import org.apache.tuscany.model.assembly.AssemblyModelContext; +import org.apache.tuscany.model.assembly.ComponentImplementation; +import org.apache.tuscany.model.assembly.ConfiguredProperty; +import org.apache.tuscany.model.assembly.ConfiguredReference; +import org.apache.tuscany.model.assembly.ConfiguredService; +import org.apache.tuscany.model.assembly.OverrideOption; +import org.apache.tuscany.model.assembly.Scope; +import org.apache.tuscany.model.assembly.ServiceContract; +import org.apache.tuscany.model.assembly.ServiceURI; +import org.apache.tuscany.model.assembly.SimpleComponent; +import org.apache.tuscany.model.assembly.Wire; +import org.apache.tuscany.model.assembly.impl.PropertyImpl; +import org.apache.tuscany.model.scdl.Binding; +import org.apache.tuscany.model.scdl.Component; +import org.apache.tuscany.model.scdl.ComponentType; +import org.apache.tuscany.model.scdl.EntryPoint; +import org.apache.tuscany.model.scdl.ExternalService; +import org.apache.tuscany.model.scdl.Implementation; +import org.apache.tuscany.model.scdl.JavaInterface; +import org.apache.tuscany.model.scdl.Module; +import org.apache.tuscany.model.scdl.ModuleComponent; +import org.apache.tuscany.model.scdl.ModuleFragment; +import org.apache.tuscany.model.scdl.ModuleWire; +import org.apache.tuscany.model.scdl.Multiplicity; +import org.apache.tuscany.model.scdl.OverrideOptions; +import org.apache.tuscany.model.scdl.Property; +import org.apache.tuscany.model.scdl.PropertyValues; +import org.apache.tuscany.model.scdl.Reference; +import org.apache.tuscany.model.scdl.Service; +import org.apache.tuscany.model.scdl.Subsystem; +import org.apache.tuscany.model.scdl.SystemWire; +import org.apache.tuscany.model.scdl.WSDLImport; +import org.apache.tuscany.model.scdl.WSDLPortType; +import org.apache.tuscany.model.scdl.loader.SCDLModelLoader; +import org.apache.tuscany.model.scdl.util.ScdlSwitch; +import org.apache.tuscany.model.types.java.JavaServiceContract; +import org.apache.tuscany.model.types.java.impl.JavaServiceContractImpl; +import org.apache.tuscany.model.types.wsdl.WSDLServiceContract; +import org.apache.tuscany.model.types.wsdl.impl.WSDLServiceContractImpl; +import org.apache.tuscany.model.util.ModelContentHandler; +import org.apache.tuscany.sdo.util.SDOUtil; +import org.eclipse.emf.ecore.EObject; + +import commonj.sdo.DataObject; +import commonj.sdo.Sequence; +import commonj.sdo.Type; + +/** + * A model content handler that transforms an SCDL model into an assembly model. + */ +public class SCDLModelContentHandlerImpl extends ScdlSwitch implements ModelContentHandler { + + private List contents; + private List linkers; + private Map targets; + + private List<SCDLModelLoader> scdlModelLoaders; + + private AssemblyModelContext modelContext; + private AssemblyFactory factory; + private org.apache.tuscany.model.assembly.ComponentType currentComponentType; + private org.apache.tuscany.model.assembly.Service currentService; + private org.apache.tuscany.model.assembly.Reference currentReference; + private org.apache.tuscany.model.assembly.Module currentModule; + private Aggregate currentAggregate; + private SimpleComponent currentComponent; + private org.apache.tuscany.model.assembly.ExternalService currentExternalService; + private org.apache.tuscany.model.assembly.EntryPoint currentEntryPoint; + private org.apache.tuscany.model.assembly.ModuleFragment currentModuleFragment; + private org.apache.tuscany.model.assembly.Subsystem currentSubsystem; + private org.apache.tuscany.model.assembly.ModuleComponent currentModuleComponent; + private Definition definition; + + /** + * Constructor + */ + public SCDLModelContentHandlerImpl(AssemblyModelContext modelContext, List<SCDLModelLoader> scdlModelLoaders) { + this.modelContext=modelContext; + this.factory=modelContext.getAssemblyFactory(); + this.scdlModelLoaders=scdlModelLoaders; + } + + /** + * @see org.apache.tuscany.model.util.ModelContentHandler#doSwitch(java.lang.Object) + */ + public Object doSwitch(Object object) { + return super.doSwitch((EObject)object); + } + + /** + * @see org.apache.tuscany.model.util.ModelContentHandler#startModel() + */ + public void startModel() { + } + + /** + * @see org.apache.tuscany.model.util.ModelContentHandler#endModel() + */ + public void endModel() { + } + + /** + * @see org.apache.tuscany.model.util.ModelContentHandler#setContents(java.util.List) + */ + public void setContents(List contents) { + this.contents=contents; + } + + /** + * @see org.apache.tuscany.model.util.ModelContentHandler#setLinkers(java.util.List) + */ + public void setLinkers(List linkers) { + this.linkers=linkers; + } + + /** + * @see org.apache.tuscany.model.util.ModelContentHandler#setTargets(java.util.Map) + */ + public void setTargets(Map targets) { + this.targets=targets; + } + + /** + * @return Returns the componentType. + */ + public org.apache.tuscany.model.assembly.ComponentType getComponentType() { + return currentComponentType; + } + + /** + * @return Returns the module. + */ + public org.apache.tuscany.model.assembly.Module getModule() { + return currentModule; + } + + /** + * @return Returns the subsystem. + */ + public org.apache.tuscany.model.assembly.Subsystem getSubsystem() { + return currentSubsystem; + } + + /** + * @return Returns the moduleFragment. + */ + public org.apache.tuscany.model.assembly.ModuleFragment getModuleFragment() { + return currentModuleFragment; + } + + /** + * @see org.apache.tuscany.model.scdl.util.ScdlSwitch#caseComponentType(org.apache.tuscany.model.scdl.ComponentType) + */ + public Object caseComponentType(ComponentType object) { + org.apache.tuscany.model.assembly.ComponentType componentType=factory.createComponentType(); + contents.add(componentType); + currentComponentType=componentType; + return componentType; + } + + /** + * @see org.apache.tuscany.model.scdl.util.ScdlSwitch#caseService(org.apache.tuscany.model.scdl.Service) + */ + public Object caseService(Service object) { + final org.apache.tuscany.model.assembly.Service service=factory.createService(); + service.setName(object.getName()); + + linkers.add(new Runnable() { + public void run() { + currentComponentType.getServices().add(service); + }; + }); + + currentService=service; + return service; + } + + /** + * @see org.apache.tuscany.model.scdl.util.ScdlSwitch#caseReference(org.apache.tuscany.model.scdl.Reference) + */ + public Object caseReference(Reference object) { + final org.apache.tuscany.model.assembly.Reference reference=factory.createReference(); + reference.setName(object.getName()); + reference.setMultiplicity(transformMultiplicity(object.getMultiplicity())); + + linkers.add(new Runnable() { + public void run() { + currentComponentType.getReferences().add(reference); + }; + }); + + currentReference=reference; + return reference; + } + + /** + * Transforms an SCDL multiplicity into an assembly model multiplicity. + * @param multiplicity + * @return + */ + private org.apache.tuscany.model.assembly.Multiplicity transformMultiplicity(Multiplicity multiplicity) { + if (multiplicity==Multiplicity._01_LITERAL) + return org.apache.tuscany.model.assembly.Multiplicity.ZERO_ONE; + else if (multiplicity==Multiplicity._0N_LITERAL) + return org.apache.tuscany.model.assembly.Multiplicity.ZERO_N; + else if (multiplicity==Multiplicity._11_LITERAL) + return org.apache.tuscany.model.assembly.Multiplicity.ONE_ONE; + else if (multiplicity==Multiplicity._1N_LITERAL) + return org.apache.tuscany.model.assembly.Multiplicity.ONE_N; + else + return org.apache.tuscany.model.assembly.Multiplicity.ONE_ONE; + } + + /** + * @see org.apache.tuscany.model.scdl.util.ScdlSwitch#caseJavaInterface(org.apache.tuscany.model.scdl.JavaInterface) + */ + public Object caseJavaInterface(JavaInterface object) { + final JavaServiceContract serviceContract=factory.createJavaServiceContract(); + serviceContract.setScope(Scope.INSTANCE); + + ((JavaServiceContractImpl)serviceContract).setInterfaceName(object.getInterface()); + ((JavaServiceContractImpl)serviceContract).setCallbackInterfaceName(object.getCallbackInterface()); + + linkServiceContract(object, serviceContract); + + return serviceContract; + } + + /** + * @see org.apache.tuscany.model.scdl.util.ScdlSwitch#caseWSDLPortType(org.apache.tuscany.model.scdl.WSDLPortType) + */ + public Object caseWSDLPortType(WSDLPortType object) { + final WSDLServiceContract serviceContract=factory.createWSDLServiceContract(); + serviceContract.setScope(Scope.INSTANCE); + + ((WSDLServiceContractImpl)serviceContract).setPortTypeURI(object.getInterface()); + ((WSDLServiceContractImpl)serviceContract).setCallbackPortTypeURI(object.getCallbackInterface()); + + linkServiceContract(object, serviceContract); + + return serviceContract; + } + + /** + * @see org.apache.tuscany.model.scdl.util.ScdlSwitch#caseWSDLImport(org.apache.tuscany.model.scdl.WSDLImport) + */ + public Object caseWSDLImport(WSDLImport object) { + if (definition==null) { + try { + WSDLFactory wsdlFactory=WSDLFactory.newInstance(); + definition=wsdlFactory.newDefinition(); + } catch (WSDLException e) { + throw new IllegalStateException(e); + } + + } + final Import wsdlImport=definition.createImport(); + wsdlImport.setNamespaceURI(object.getNamespace()); + wsdlImport.setLocationURI(object.getLocation()); + + linkers.add(new Runnable() { + public void run() { + currentAggregate.getWSDLImports().add(wsdlImport); + }; + }); + + return wsdlImport; + } + + /** + * Link a service contract with the correct owner. + * @param object + * @param serviceContract + */ + private void linkServiceContract(Object object, final ServiceContract serviceContract) { + Object container=((DataObject)object).getContainer(); + if (container instanceof Service) { + + // Set a service contract on a service + final org.apache.tuscany.model.assembly.Service service=currentService; + linkers.add(new Runnable() { + public void run() { + service.setServiceContract(serviceContract); + } + }); + } + else if (container instanceof Reference) { + + // Set a service contract on a reference + final org.apache.tuscany.model.assembly.Reference reference=currentReference; + linkers.add(new Runnable() { + public void run() { + reference.setServiceContract(serviceContract); + } + }); + } else if (container instanceof ExternalService) { + + // Set a service contract on an external service + final org.apache.tuscany.model.assembly.ExternalService externalService=currentExternalService; + linkers.add(new Runnable() { + public void run() { + externalService.getConfiguredService().getService().setServiceContract(serviceContract); + } + }); + } else if (container instanceof EntryPoint) { + + // Set a service contract on an entry point + final org.apache.tuscany.model.assembly.EntryPoint entryPoint=currentEntryPoint; + linkers.add(new Runnable() { + public void run() { + entryPoint.getConfiguredService().getService().setServiceContract(serviceContract); + entryPoint.getConfiguredReference().getReference().setServiceContract(serviceContract); + } + }); + } + } + + /** + * @see org.apache.tuscany.model.scdl.util.ScdlSwitch#caseProperty(org.apache.tuscany.model.scdl.Property) + */ + public Object caseProperty(Property object) { + final org.apache.tuscany.model.assembly.Property property=factory.createProperty(); + property.setName(object.getName()); + property.setDefaultValue(object.getDefault()); + property.setMany(object.isMany()); + property.setRequired(object.isRequired()); + + Object dataType=object.getDataType(); + if (dataType!=null) { + String typeName=dataType.toString(); + typeName=typeName.substring(typeName.indexOf(':')+1); + Type type=SDOUtil.getXSDSDOType(typeName); + ((PropertyImpl)property).setSDOType(type); + property.setType(type.getInstanceClass()); + } else { + property.setType(String.class); + } + + linkers.add(new Runnable() { + public void run() { + currentComponentType.getProperties().add(property); + }; + }); + + return property; + } + + /** + * @see org.apache.tuscany.model.scdl.util.ScdlSwitch#caseModule(org.apache.tuscany.model.scdl.Module) + */ + public Object caseModule(Module object) { + org.apache.tuscany.model.assembly.Module module=factory.createModule(); + module.setName(object.getName()); + contents.add(module); + currentModule=module; + currentAggregate=module; + return module; + } + + /** + * @see org.apache.tuscany.model.scdl.util.ScdlSwitch#caseModuleFragment(org.apache.tuscany.model.scdl.ModuleFragment) + */ + public Object caseModuleFragment(ModuleFragment object) { + org.apache.tuscany.model.assembly.ModuleFragment moduleFragment=factory.createModuleFragment(); + moduleFragment.setName(object.getName()); + contents.add(moduleFragment); + currentModuleFragment=moduleFragment; + currentAggregate=moduleFragment; + return moduleFragment; + } + + /** + * @see org.apache.tuscany.model.scdl.util.ScdlSwitch#caseComponent(org.apache.tuscany.model.scdl.Component) + */ + public Object caseComponent(Component object) { + final SimpleComponent component=factory.createSimpleComponent(); + component.setName(object.getName()); + linkers.add(new Runnable() { + public void run() { + currentAggregate.getComponents().add(component); + component.initialize(modelContext); + }; + }); + currentComponent=component; + return component; + } + + /** + * @see org.apache.tuscany.model.scdl.util.ScdlSwitch#casePropertyValues(org.apache.tuscany.model.scdl.PropertyValues) + */ + public Object casePropertyValues(final PropertyValues object) { + + // Grab the current component + final SimpleComponent component=currentComponent; + linkers.add(new Runnable() { + public void run() { + + // Initialize the component's configured properties + Sequence sequence = object.getAny(); + for (int p = 0, n = sequence.size(); p < n; p++) { + + // Get each property value element + commonj.sdo.Property propertyElementDef = sequence.getProperty(p); + DataObject propertyElement = (DataObject) sequence.getValue(p); + + // Get the corresponding property definition + String propertyName = propertyElementDef.getName(); + ConfiguredProperty configuredProperty=component.getConfiguredProperty(propertyName); + if (configuredProperty == null) { + throw new IllegalArgumentException("Undefined property " + propertyName); + } + + // Check if the property is overridable + Sequence attrs=propertyElement.getSequence("anyAttribute"); + if (attrs!=null && attrs.size()!=0) { + commonj.sdo.Property attr=attrs.getProperty(0); + if (attr!=null && attr.getName().equals("overridable")) { + Object overridable=attrs.getValue(0); + if ("may".equals(overridable)) + configuredProperty.setOverrideOption(OverrideOption.MAY); + else if ("must".equals(overridable)) + configuredProperty.setOverrideOption(OverrideOption.MUST); + else if ("no".equals(overridable)) + configuredProperty.setOverrideOption(OverrideOption.NO); + } + } + + // Get the property value text and convert to the expected java type + Sequence text = propertyElement.getSequence("any"); + if (text != null && text.size() != 0) { + String rawValue = text.getValue(0).toString(); + Type type=((PropertyImpl)configuredProperty.getProperty()).getSDOType(); + Object value; + if (type!=null) { + value=SDOUtil.createFromString(type, rawValue); + } else { + value=rawValue; + } + configuredProperty.setValue(value); + } + } + } + }); + + return object; + } + + /** + * @see org.apache.tuscany.model.scdl.util.ScdlSwitch#caseReferenceValues(org.apache.tuscany.model.scdl.ReferenceValues) + */ + public Object caseReferenceValues(final org.apache.tuscany.model.scdl.ReferenceValues object) { + + // Grab the current component + final SimpleComponent component=this.currentComponent; + + linkers.add(new Runnable() { + public void run() { + + // Initialize the component's configured references + Sequence sequence = object.getAny(); + for (int r = 0, n = sequence.size(); r < n; r++) { + + // Get each reference value element + commonj.sdo.Property referenceElementDef = sequence.getProperty(r); + DataObject referenceElement = (DataObject) sequence.getValue(r); + + // Get the corresponding reference definition + String referenceName = referenceElementDef.getName(); + ConfiguredReference configuredReference=component.getConfiguredReference(referenceName); + if (configuredReference == null) { + throw new IllegalArgumentException("Undefined reference " + referenceName); + } + ServiceURI referenceURI=factory.createServiceURI(null, component, configuredReference); + + // Get the reference value text + Sequence text = referenceElement.getSequence(0); + if (text != null && text.size() != 0) { + String uri = text.getValue(0).toString(); + ServiceURI serviceURI=factory.createServiceURI(null, uri); + + // Create a wire + Wire wire=factory.createWire(); + wire.setSource(referenceURI); + wire.setTarget(serviceURI); + currentAggregate.getWires().add(wire); + } + } + } + }); + + return object; + } + + /** + * @see org.apache.tuscany.model.scdl.util.ScdlSwitch#caseEntryPoint(org.apache.tuscany.model.scdl.EntryPoint) + */ + public Object caseEntryPoint(final EntryPoint object) { + final org.apache.tuscany.model.assembly.EntryPoint entryPoint=factory.createEntryPoint(); + entryPoint.setName(object.getName()); + + // Create a configured service and a configured reference for this entry point + org.apache.tuscany.model.assembly.Service service=factory.createService(); + service.setName(entryPoint.getName()); + ConfiguredService configuredService=factory.createConfiguredService(); + configuredService.setService(service); + entryPoint.setConfiguredService(configuredService); + org.apache.tuscany.model.assembly.Reference reference=factory.createReference(); + reference.setName(null); + reference.setMultiplicity(transformMultiplicity(object.getMultiplicity())); + final ConfiguredReference configuredReference=factory.createConfiguredReference(); + configuredReference.setReference(reference); + entryPoint.setConfiguredReference(configuredReference); + + linkers.add(new Runnable() { + public void run() { + currentAggregate.getEntryPoints().add(entryPoint); + + // Create wires to the target service + final List<Wire>wires=new ArrayList<Wire>(); + ServiceURI referenceURI=factory.createServiceURI(null, entryPoint, configuredReference); + for (String uri : (List<String>)object.getReference()) { + ServiceURI serviceURI=factory.createServiceURI(null, uri); + final Wire wire=factory.createWire(); + wire.setSource(referenceURI); + wire.setTarget(serviceURI); + wires.add(wire); + } + + currentAggregate.getWires().addAll(wires); + }; + }); + + currentEntryPoint=entryPoint; + return entryPoint; + } + + /** + * @see org.apache.tuscany.model.scdl.util.ScdlSwitch#caseExternalService(org.apache.tuscany.model.scdl.ExternalService) + */ + public Object caseExternalService(ExternalService object) { + final org.apache.tuscany.model.assembly.ExternalService externalService=factory.createExternalService(); + externalService.setName(object.getName()); + + OverrideOptions overrideOptions=object.getOverridable(); + if (overrideOptions==OverrideOptions.MAY_LITERAL) + externalService.setOverrideOption(OverrideOption.MAY); + else if (overrideOptions==OverrideOptions.MUST_LITERAL) + externalService.setOverrideOption(OverrideOption.MUST); + else if (overrideOptions==OverrideOptions.NO_LITERAL) + externalService.setOverrideOption(OverrideOption.NO); + else + externalService.setOverrideOption(OverrideOption.NO); + + // Create a configured service for this external service + org.apache.tuscany.model.assembly.Service service=factory.createService(); + service.setName(externalService.getName()); + ConfiguredService configuredService=factory.createConfiguredService(); + configuredService.setService(service); + externalService.setConfiguredService(configuredService); + + linkers.add(new Runnable() { + public void run() { + currentAggregate.getExternalServices().add(externalService); + }; + }); + currentExternalService=externalService; + return externalService; + } + + /** + * @see org.apache.tuscany.model.scdl.util.ScdlSwitch#caseSubsystem(org.apache.tuscany.model.scdl.Subsystem) + */ + public Object caseSubsystem(Subsystem object) { + org.apache.tuscany.model.assembly.Subsystem subsystem=factory.createSubsystem(); + subsystem.setName(object.getName()); + subsystem.setURI(object.getUri()); + currentSubsystem=subsystem; + currentAggregate=subsystem; + return subsystem; + } + + /** + * @see org.apache.tuscany.model.scdl.util.ScdlSwitch#caseModuleComponent(org.apache.tuscany.model.scdl.ModuleComponent) + */ + public Object caseModuleComponent(ModuleComponent object) { + final org.apache.tuscany.model.assembly.ModuleComponent moduleComponent=factory.createModuleComponent(); + moduleComponent.setName(object.getName()); + moduleComponent.setURI(object.getUri()); + + linkers.add(new Runnable() { + public void run() { + currentAggregate.getComponents().add(moduleComponent); + }; + }); + + currentModuleComponent=moduleComponent; + return moduleComponent; + } + + /** + * @see org.apache.tuscany.model.scdl.util.ScdlSwitch#caseModuleWire(org.apache.tuscany.model.scdl.ModuleWire) + */ + public Object caseModuleWire(ModuleWire object) { + final Wire wire=factory.createWire(); + wire.setSource(factory.createServiceURI(null, object.getSourceUri())); + wire.setTarget(factory.createServiceURI(null, object.getTargetUri())); + + linkers.add(new Runnable() { + public void run() { + currentAggregate.getWires().add(wire); + }; + }); + + return wire; + } + + /** + * @see org.apache.tuscany.model.scdl.util.ScdlSwitch#caseSystemWire(org.apache.tuscany.model.scdl.SystemWire) + */ + public Object caseSystemWire(SystemWire object) { + final Wire wire=factory.createWire(); + wire.setSource(factory.createServiceURI(object.getSource().toString())); + wire.setTarget(factory.createServiceURI(object.getTarget().toString())); + + linkers.add(new Runnable() { + public void run() { + currentAggregate.getWires().add(wire); + }; + }); + + return wire; + } + + /** + * @see org.apache.tuscany.model.scdl.util.ScdlSwitch#caseImplementation(org.apache.tuscany.model.scdl.Implementation) + */ + public Object caseImplementation(Implementation object) { + final SimpleComponent component=currentComponent; + + for (SCDLModelLoader scdlModelLoader : scdlModelLoaders) { + + // Invoke an SCDL loader to handle the specific implementation type + final ComponentImplementation implementation=(ComponentImplementation)scdlModelLoader.load(modelContext, object); + if (implementation!=null) { + component.setComponentImplementation(implementation); + return implementation; + } + + } + return null; + } + + /** + * @see org.apache.tuscany.model.scdl.util.ScdlSwitch#caseBinding(org.apache.tuscany.model.scdl.Binding) + */ + public Object caseBinding(Binding object) { + + final List<org.apache.tuscany.model.assembly.Binding> bindings; + Object container=((DataObject)object).getContainer(); + if (container instanceof EntryPoint) { + bindings=currentEntryPoint.getBindings(); + } else if (container instanceof ExternalService) { + bindings=currentExternalService.getBindings(); + } else + bindings=null; + + for (SCDLModelLoader scdlModelLoader : scdlModelLoaders) { + + // Invoke an SCDL loader to handle the specific binding type + final org.apache.tuscany.model.assembly.Binding binding=(org.apache.tuscany.model.assembly.Binding)scdlModelLoader.load(modelContext, object); + if (binding!=null) { + bindings.add(binding); + return binding; + } + + } + return null; + } +} |