From 3b85574e96c0845a49c76a8798dbe2cc3a2a96f7 Mon Sep 17 00:00:00 2001 From: rfeng Date: Tue, 14 Oct 2008 20:05:45 +0000 Subject: Add a factory for SCA Definitions and restrict the export-package git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@704653 13f79535-47bb-0310-9956-ffa450edef68 --- .../sca-equinox/modules/definitions-xml/pom.xml | 2 +- .../xml/SCADefinitionsDocumentProcessor.java | 99 ++++++++------ .../definitions/xml/SCADefinitionsProcessor.java | 150 ++++++++++----------- branches/sca-equinox/modules/definitions/pom.xml | 5 +- .../sca/definitions/DefaultDefinitionsFactory.java | 32 +++++ .../sca/definitions/DefinitionsFactory.java | 31 +++++ ...ache.tuscany.sca.definitions.DefinitionsFactory | 17 +++ 7 files changed, 212 insertions(+), 124 deletions(-) create mode 100644 branches/sca-equinox/modules/definitions/src/main/java/org/apache/tuscany/sca/definitions/DefaultDefinitionsFactory.java create mode 100644 branches/sca-equinox/modules/definitions/src/main/java/org/apache/tuscany/sca/definitions/DefinitionsFactory.java create mode 100644 branches/sca-equinox/modules/definitions/src/main/resources/META-INF/services/org.apache.tuscany.sca.definitions.DefinitionsFactory (limited to 'branches') diff --git a/branches/sca-equinox/modules/definitions-xml/pom.xml b/branches/sca-equinox/modules/definitions-xml/pom.xml index 75db3b51b0..19b2bfe1c9 100644 --- a/branches/sca-equinox/modules/definitions-xml/pom.xml +++ b/branches/sca-equinox/modules/definitions-xml/pom.xml @@ -72,7 +72,7 @@ ${tuscany.version} org.apache.tuscany.sca.definitions.xml ${pom.name} - org.apache.tuscany.sca.definitions.xml* + diff --git a/branches/sca-equinox/modules/definitions-xml/src/main/java/org/apache/tuscany/sca/definitions/xml/SCADefinitionsDocumentProcessor.java b/branches/sca-equinox/modules/definitions-xml/src/main/java/org/apache/tuscany/sca/definitions/xml/SCADefinitionsDocumentProcessor.java index af12bc5887..f396a601fc 100644 --- a/branches/sca-equinox/modules/definitions-xml/src/main/java/org/apache/tuscany/sca/definitions/xml/SCADefinitionsDocumentProcessor.java +++ b/branches/sca-equinox/modules/definitions-xml/src/main/java/org/apache/tuscany/sca/definitions/xml/SCADefinitionsDocumentProcessor.java @@ -40,22 +40,22 @@ import org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor; import org.apache.tuscany.sca.contribution.processor.URLArtifactProcessor; import org.apache.tuscany.sca.contribution.resolver.ModelResolver; import org.apache.tuscany.sca.core.FactoryExtensionPoint; +import org.apache.tuscany.sca.definitions.DefinitionsFactory; import org.apache.tuscany.sca.definitions.SCADefinitions; -import org.apache.tuscany.sca.definitions.impl.SCADefinitionsImpl; import org.apache.tuscany.sca.definitions.util.SCADefinitionsUtil; import org.apache.tuscany.sca.monitor.Monitor; import org.apache.tuscany.sca.monitor.Problem; import org.apache.tuscany.sca.monitor.Problem.Severity; -import org.apache.tuscany.sca.monitor.impl.ProblemImpl; /** * A SCA Definitions Document processor. * * @version $Rev$ $Date$ */ -public class SCADefinitionsDocumentProcessor implements URLArtifactProcessor { +public class SCADefinitionsDocumentProcessor implements URLArtifactProcessor { private StAXArtifactProcessor extensionProcessor; private XMLInputFactory inputFactory; + private DefinitionsFactory definitionsFactory; private static final String TUSCANY_NS = "http://tuscany.apache.org/xmlns/sca/1.0"; private static final String DEFINITIONS = "definitions"; private static final QName DEFINITIONS_QNAME = new QName(TUSCANY_NS, DEFINITIONS); @@ -69,9 +69,11 @@ public class SCADefinitionsDocumentProcessor implements URLArtifactProcessor staxProcessor, XMLInputFactory inputFactory, + DefinitionsFactory definitionsFactory, Monitor monitor) { this.extensionProcessor = (StAXArtifactProcessor)staxProcessor; this.inputFactory = inputFactory; + this.definitionsFactory = definitionsFactory; this.monitor = monitor; } @@ -81,14 +83,15 @@ public class SCADefinitionsDocumentProcessor implements URLArtifactProcessor staxProcessor, - Monitor monitor) { + public SCADefinitionsDocumentProcessor(FactoryExtensionPoint modelFactories, + StAXArtifactProcessor staxProcessor, + Monitor monitor) { this.extensionProcessor = (StAXArtifactProcessor)staxProcessor; this.inputFactory = modelFactories.getFactory(XMLInputFactory.class); + this.definitionsFactory = modelFactories.getFactory(DefinitionsFactory.class); this.monitor = monitor; } - + /** * Report a error. * @@ -96,13 +99,19 @@ public class SCADefinitionsDocumentProcessor implements URLArtifactProcessor getModelType() { return SCADefinitions.class; } diff --git a/branches/sca-equinox/modules/definitions-xml/src/main/java/org/apache/tuscany/sca/definitions/xml/SCADefinitionsProcessor.java b/branches/sca-equinox/modules/definitions-xml/src/main/java/org/apache/tuscany/sca/definitions/xml/SCADefinitionsProcessor.java index 1247a1f241..46bcff3874 100644 --- a/branches/sca-equinox/modules/definitions-xml/src/main/java/org/apache/tuscany/sca/definitions/xml/SCADefinitionsProcessor.java +++ b/branches/sca-equinox/modules/definitions-xml/src/main/java/org/apache/tuscany/sca/definitions/xml/SCADefinitionsProcessor.java @@ -38,9 +38,9 @@ import org.apache.tuscany.sca.contribution.processor.ContributionResolveExceptio import org.apache.tuscany.sca.contribution.processor.ContributionWriteException; import org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor; import org.apache.tuscany.sca.contribution.resolver.ModelResolver; -import org.apache.tuscany.sca.core.ExtensionPointRegistry; +import org.apache.tuscany.sca.core.FactoryExtensionPoint; +import org.apache.tuscany.sca.definitions.DefinitionsFactory; import org.apache.tuscany.sca.definitions.SCADefinitions; -import org.apache.tuscany.sca.definitions.impl.SCADefinitionsImpl; import org.apache.tuscany.sca.monitor.Monitor; import org.apache.tuscany.sca.policy.Intent; import org.apache.tuscany.sca.policy.IntentAttachPointType; @@ -54,10 +54,11 @@ import org.apache.tuscany.sca.policy.QualifiedIntent; * @version $Rev$ $Date$ */ public class SCADefinitionsProcessor extends BaseStAXArtifactProcessor implements StAXArtifactProcessor { - + private StAXArtifactProcessor extensionProcessor; + private DefinitionsFactory definitionsFactory; private Monitor monitor; - + public static final String BINDING = "binding"; public static final String IMPLEMENTATION = "implementation"; public static final String SCA10_NS = "http://www.osoa.org/xmlns/sca/1.0"; @@ -65,23 +66,13 @@ public class SCADefinitionsProcessor extends BaseStAXArtifactProcessor implement public static final QName SCA_DEFINITIONS_QNAME = new QName(SCA10_NS, SCA_DEFINITIONS); public static final String TARGET_NAMESPACE = "targetNamespace"; public static final String NAME = "name"; - - /** - * Construct a new definitions processor - * @param extensionProcessor - * @param modelResolver - */ - public SCADefinitionsProcessor(StAXArtifactProcessor extensionProcessor, - ModelResolver modelResolver, Monitor monitor) { - this.extensionProcessor = extensionProcessor; - this.monitor = monitor; - } - - public SCADefinitionsProcessor(ExtensionPointRegistry extensionPoints, - StAXArtifactProcessor extensionProcessor, - Monitor monitor) { + + public SCADefinitionsProcessor(FactoryExtensionPoint factoryExtensionPoint, + StAXArtifactProcessor extensionProcessor, + Monitor monitor) { this.extensionProcessor = extensionProcessor; this.monitor = monitor; + this.definitionsFactory = factoryExtensionPoint.getFactory(DefinitionsFactory.class); } public SCADefinitions read(XMLStreamReader reader) throws ContributionReadException, XMLStreamException { @@ -94,44 +85,42 @@ public class SCADefinitionsProcessor extends BaseStAXArtifactProcessor implement switch (event) { case START_ELEMENT: { name = reader.getName(); - if ( SCA_DEFINITIONS_QNAME.equals(name)) { - definitions = new SCADefinitionsImpl(); + if (SCA_DEFINITIONS_QNAME.equals(name)) { + definitions = definitionsFactory.createDefinitions(); targetNamespace = reader.getAttributeValue(null, TARGET_NAMESPACE); definitions.setTargetNamespace(targetNamespace); } else { Object extension = extensionProcessor.read(reader); if (extension != null) { - if ( extension instanceof Intent ) { + if (extension instanceof Intent) { Intent intent = (Intent)extension; - intent.setName(new QName(targetNamespace, - intent.getName().getLocalPart())); - if ( intent instanceof QualifiedIntent ) { + intent.setName(new QName(targetNamespace, intent.getName().getLocalPart())); + if (intent instanceof QualifiedIntent) { QualifiedIntent qualifiedIntent = (QualifiedIntent)intent; - qualifiedIntent.getQualifiableIntent(). - setName(new QName(targetNamespace, - qualifiedIntent.getQualifiableIntent().getName().getLocalPart())); + qualifiedIntent.getQualifiableIntent() + .setName(new QName(targetNamespace, qualifiedIntent.getQualifiableIntent() + .getName().getLocalPart())); } - + // FIXME: Workaround for TUSCANY-2499 intent.setUnresolved(false); - + definitions.getPolicyIntents().add(intent); - } else if ( extension instanceof PolicySet ) { + } else if (extension instanceof PolicySet) { PolicySet policySet = (PolicySet)extension; - policySet.setName(new QName(targetNamespace, - policySet.getName().getLocalPart())); + policySet.setName(new QName(targetNamespace, policySet.getName().getLocalPart())); definitions.getPolicySets().add(policySet); - } else if ( extension instanceof Binding ) { + } else if (extension instanceof Binding) { Binding binding = (Binding)extension; definitions.getBindings().add(binding); - } else if ( extension instanceof IntentAttachPointType ) { + } else if (extension instanceof IntentAttachPointType) { IntentAttachPointType type = (IntentAttachPointType)extension; - if ( type.getName().getLocalPart().startsWith(BINDING)) { + if (type.getName().getLocalPart().startsWith(BINDING)) { definitions.getBindingTypes().add((IntentAttachPointType)extension); - } else if ( type.getName().getLocalPart().startsWith(IMPLEMENTATION)) { + } else if (type.getName().getLocalPart().startsWith(IMPLEMENTATION)) { definitions.getImplementationTypes().add((IntentAttachPointType)extension); } - } + } } break; } @@ -142,12 +131,12 @@ public class SCADefinitionsProcessor extends BaseStAXArtifactProcessor implement case END_ELEMENT: name = reader.getName(); - if ( SCA_DEFINITIONS_QNAME.equals(name)) { + if (SCA_DEFINITIONS_QNAME.equals(name)) { return definitions; } break; } - + //Read the next element if (reader.hasNext()) { reader.next(); @@ -155,101 +144,104 @@ public class SCADefinitionsProcessor extends BaseStAXArtifactProcessor implement } return definitions; } - - public void write(SCADefinitions definitions, XMLStreamWriter writer) throws ContributionWriteException, XMLStreamException { - writeStartDocument(writer, SCA10_NS, SCA_DEFINITIONS, - new XAttr(TARGET_NAMESPACE, definitions.getTargetNamespace())); - + public void write(SCADefinitions definitions, XMLStreamWriter writer) throws ContributionWriteException, + XMLStreamException { + + writeStartDocument(writer, SCA10_NS, SCA_DEFINITIONS, new XAttr(TARGET_NAMESPACE, definitions + .getTargetNamespace())); + for (Intent policyIntent : definitions.getPolicyIntents()) { extensionProcessor.write(policyIntent, writer); } - + for (PolicySet policySet : definitions.getPolicySets()) { extensionProcessor.write(policySet, writer); } - + for (IntentAttachPointType bindingType : definitions.getBindingTypes()) { extensionProcessor.write(bindingType, writer); } - + for (IntentAttachPointType implType : definitions.getImplementationTypes()) { extensionProcessor.write(implType, writer); } writeEndDocument(writer); } - + public void resolve(SCADefinitions scaDefns, ModelResolver resolver) throws ContributionResolveException { // start by adding all of the top level artifacts into the resolver as there // are many cross artifact references in a definitions file and we don't want // to be dependent on the order things appear - - List simpleIntents = new ArrayList(); - List profileIntents = new ArrayList(); - List qualifiedIntents = new ArrayList(); + + List simpleIntents = new ArrayList(); + List profileIntents = new ArrayList(); + List qualifiedIntents = new ArrayList(); List simplePolicySets = new ArrayList(); List referredPolicySets = new ArrayList(); - + for (Intent policyIntent : scaDefns.getPolicyIntents()) { - if (policyIntent instanceof ProfileIntent) - profileIntents.add((ProfileIntent)policyIntent); - else if (policyIntent instanceof QualifiedIntent) - qualifiedIntents.add((QualifiedIntent)policyIntent); - else simpleIntents.add(policyIntent); - - resolver.addModel(policyIntent); - } - + if (policyIntent instanceof ProfileIntent) + profileIntents.add((ProfileIntent)policyIntent); + else if (policyIntent instanceof QualifiedIntent) + qualifiedIntents.add((QualifiedIntent)policyIntent); + else + simpleIntents.add(policyIntent); + + resolver.addModel(policyIntent); + } + for (PolicySet policySet : scaDefns.getPolicySets()) { if (policySet.getReferencedPolicySets().isEmpty()) simplePolicySets.add(policySet); - else referredPolicySets.add(policySet); - + else + referredPolicySets.add(policySet); + resolver.addModel(policySet); } - + for (IntentAttachPointType bindingType : scaDefns.getBindingTypes()) { resolver.addModel(bindingType); } - + for (IntentAttachPointType implType : scaDefns.getImplementationTypes()) { resolver.addModel(implType); } - + // now resolve everything to ensure that any references between // artifacts are satisfied - + for (Intent policyIntent : simpleIntents) extensionProcessor.resolve(policyIntent, resolver); - + for (ProfileIntent policyIntent : profileIntents) extensionProcessor.resolve(policyIntent, resolver); - + for (QualifiedIntent policyIntent : qualifiedIntents) extensionProcessor.resolve(policyIntent, resolver); - + for (PolicySet policySet : simplePolicySets) extensionProcessor.resolve(policySet, resolver); - - for (PolicySet policySet : referredPolicySets) - extensionProcessor.resolve(policySet, resolver); - + + for (PolicySet policySet : referredPolicySets) + extensionProcessor.resolve(policySet, resolver); + for (int count = 0, size = scaDefns.getBindingTypes().size(); count < size; count++) { IntentAttachPointType bindingType = scaDefns.getBindingTypes().get(count); extensionProcessor.resolve(bindingType, resolver); } - + for (int count = 0, size = scaDefns.getImplementationTypes().size(); count < size; count++) { IntentAttachPointType implType = scaDefns.getImplementationTypes().get(count); extensionProcessor.resolve(implType, resolver); } } - + public QName getArtifactType() { return SCA_DEFINITIONS_QNAME; } - + public Class getModelType() { return SCADefinitions.class; } diff --git a/branches/sca-equinox/modules/definitions/pom.xml b/branches/sca-equinox/modules/definitions/pom.xml index 8e6d0cfebb..e2935c1590 100644 --- a/branches/sca-equinox/modules/definitions/pom.xml +++ b/branches/sca-equinox/modules/definitions/pom.xml @@ -60,7 +60,10 @@ ${tuscany.version} org.apache.tuscany.sca.definitions ${pom.name} - org.apache.tuscany.sca.definitions* + + org.apache.tuscany.sca.definitions, + org.apache.tuscany.sca.definitions.util + diff --git a/branches/sca-equinox/modules/definitions/src/main/java/org/apache/tuscany/sca/definitions/DefaultDefinitionsFactory.java b/branches/sca-equinox/modules/definitions/src/main/java/org/apache/tuscany/sca/definitions/DefaultDefinitionsFactory.java new file mode 100644 index 0000000000..8b1df067ba --- /dev/null +++ b/branches/sca-equinox/modules/definitions/src/main/java/org/apache/tuscany/sca/definitions/DefaultDefinitionsFactory.java @@ -0,0 +1,32 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.sca.definitions; + +import org.apache.tuscany.sca.definitions.impl.SCADefinitionsImpl; + +/** + * Default Implementation of DefinitionsFactory + */ +public class DefaultDefinitionsFactory implements DefinitionsFactory { + + public SCADefinitions createDefinitions() { + return new SCADefinitionsImpl(); + } + +} diff --git a/branches/sca-equinox/modules/definitions/src/main/java/org/apache/tuscany/sca/definitions/DefinitionsFactory.java b/branches/sca-equinox/modules/definitions/src/main/java/org/apache/tuscany/sca/definitions/DefinitionsFactory.java new file mode 100644 index 0000000000..8f9fa3f075 --- /dev/null +++ b/branches/sca-equinox/modules/definitions/src/main/java/org/apache/tuscany/sca/definitions/DefinitionsFactory.java @@ -0,0 +1,31 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.sca.definitions; + +/** + * Factory interface to create SCA definitions model + * + */ +public interface DefinitionsFactory { + /** + * Create an instance of SCA definitions + * @return a new instance of SCA definitions + */ + SCADefinitions createDefinitions(); +} diff --git a/branches/sca-equinox/modules/definitions/src/main/resources/META-INF/services/org.apache.tuscany.sca.definitions.DefinitionsFactory b/branches/sca-equinox/modules/definitions/src/main/resources/META-INF/services/org.apache.tuscany.sca.definitions.DefinitionsFactory new file mode 100644 index 0000000000..521d94f518 --- /dev/null +++ b/branches/sca-equinox/modules/definitions/src/main/resources/META-INF/services/org.apache.tuscany.sca.definitions.DefinitionsFactory @@ -0,0 +1,17 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you 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. +org.apache.tuscany.sca.definitions.DefaultDefinitionsFactory \ No newline at end of file -- cgit v1.2.3