summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--branches/sca-equinox/modules/definitions-xml/pom.xml2
-rw-r--r--branches/sca-equinox/modules/definitions-xml/src/main/java/org/apache/tuscany/sca/definitions/xml/SCADefinitionsDocumentProcessor.java99
-rw-r--r--branches/sca-equinox/modules/definitions-xml/src/main/java/org/apache/tuscany/sca/definitions/xml/SCADefinitionsProcessor.java150
-rw-r--r--branches/sca-equinox/modules/definitions/pom.xml5
-rw-r--r--branches/sca-equinox/modules/definitions/src/main/java/org/apache/tuscany/sca/definitions/DefaultDefinitionsFactory.java32
-rw-r--r--branches/sca-equinox/modules/definitions/src/main/java/org/apache/tuscany/sca/definitions/DefinitionsFactory.java31
-rw-r--r--branches/sca-equinox/modules/definitions/src/main/resources/META-INF/services/org.apache.tuscany.sca.definitions.DefinitionsFactory17
7 files changed, 212 insertions, 124 deletions
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 @@
<Bundle-Version>${tuscany.version}</Bundle-Version>
<Bundle-SymbolicName>org.apache.tuscany.sca.definitions.xml</Bundle-SymbolicName>
<Bundle-Description>${pom.name}</Bundle-Description>
- <Export-Package>org.apache.tuscany.sca.definitions.xml*</Export-Package>
+ <Export-Package></Export-Package>
</instructions>
</configuration>
</plugin>
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<SCADefinitions> {
+public class SCADefinitionsDocumentProcessor implements URLArtifactProcessor<SCADefinitions> {
private StAXArtifactProcessor<Object> 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<SC
*/
public SCADefinitionsDocumentProcessor(StAXArtifactProcessor<Object> staxProcessor,
XMLInputFactory inputFactory,
+ DefinitionsFactory definitionsFactory,
Monitor monitor) {
this.extensionProcessor = (StAXArtifactProcessor<Object>)staxProcessor;
this.inputFactory = inputFactory;
+ this.definitionsFactory = definitionsFactory;
this.monitor = monitor;
}
@@ -81,14 +83,15 @@ public class SCADefinitionsDocumentProcessor implements URLArtifactProcessor<SC
* @param modelFactories
* @param staxProcessor
*/
- public SCADefinitionsDocumentProcessor(FactoryExtensionPoint modelFactories,
- StAXArtifactProcessor<Object> staxProcessor,
- Monitor monitor) {
+ public SCADefinitionsDocumentProcessor(FactoryExtensionPoint modelFactories,
+ StAXArtifactProcessor<Object> staxProcessor,
+ Monitor monitor) {
this.extensionProcessor = (StAXArtifactProcessor<Object>)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<SC
* @param message
* @param model
*/
- private void error(String message, Object model, Object... messageParameters) {
- if (monitor != null) {
- Problem problem = monitor.createProblem(this.getClass().getName(), "definitions-xml-validation-messages", Severity.ERROR, model, message, (Object[])messageParameters);
- monitor.problem(problem);
- }
- }
-
+ private void error(String message, Object model, Object... messageParameters) {
+ if (monitor != null) {
+ Problem problem =
+ monitor.createProblem(this.getClass().getName(),
+ "definitions-xml-validation-messages",
+ Severity.ERROR,
+ model,
+ message,
+ (Object[])messageParameters);
+ monitor.problem(problem);
+ }
+ }
+
/**
* Report a exception.
*
@@ -110,17 +119,22 @@ public class SCADefinitionsDocumentProcessor implements URLArtifactProcessor<SC
* @param message
* @param model
*/
- private void error(String message, Object model, Exception ex) {
- if (monitor != null) {
- Problem problem = monitor.createProblem(this.getClass().getName(), "definitions-xml-validation-messages", Severity.ERROR, model, message, ex);
- monitor.problem(problem);
- }
- }
-
+ private void error(String message, Object model, Exception ex) {
+ if (monitor != null) {
+ Problem problem =
+ monitor.createProblem(this.getClass().getName(),
+ "definitions-xml-validation-messages",
+ Severity.ERROR,
+ model,
+ message,
+ ex);
+ monitor.problem(problem);
+ }
+ }
public SCADefinitions read(URL contributionURL, final URI uri, final URL url) throws ContributionReadException {
- InputStream urlStream = null;
- try {
+ InputStream urlStream = null;
+ try {
// Allow privileged access to open URL stream. Add FilePermission to added to security
// policy file.
try {
@@ -132,44 +146,43 @@ public class SCADefinitionsDocumentProcessor implements URLArtifactProcessor<SC
}
});
} catch (PrivilegedActionException e) {
- error("PrivilegedActionException", url, (IOException)e.getException());
+ error("PrivilegedActionException", url, (IOException)e.getException());
throw (IOException)e.getException();
}
-
+
//urlStream = createInputStream(url);
XMLStreamReader reader = inputFactory.createXMLStreamReader(url.toString(), urlStream);
-
- SCADefinitions definitions = new SCADefinitionsImpl();
+
+ SCADefinitions definitions = definitionsFactory.createDefinitions();
QName name = null;
int event;
- while ( reader.hasNext() ) {
+ while (reader.hasNext()) {
event = reader.next();
-
- if ( event == XMLStreamConstants.START_ELEMENT ||
- event == XMLStreamConstants.END_ELEMENT ) {
+
+ if (event == XMLStreamConstants.START_ELEMENT || event == XMLStreamConstants.END_ELEMENT) {
name = reader.getName();
- if ( name.equals(DEFINITIONS_QNAME) ) {
- if ( event == XMLStreamConstants.END_ELEMENT ) {
+ if (name.equals(DEFINITIONS_QNAME)) {
+ if (event == XMLStreamConstants.END_ELEMENT) {
return definitions;
- }
+ }
} else {
SCADefinitions aDefn = (SCADefinitions)extensionProcessor.read(reader);
SCADefinitionsUtil.aggregateSCADefinitions(aDefn, definitions);
}
}
}
-
+
return definitions;
} catch (XMLStreamException e) {
- ContributionReadException ce = new ContributionReadException(e);
- error("ContributionReadException", inputFactory, ce);
+ ContributionReadException ce = new ContributionReadException(e);
+ error("ContributionReadException", inputFactory, ce);
throw ce;
} catch (IOException e) {
- ContributionReadException ce = new ContributionReadException(e);
- error("ContributionReadException", inputFactory, ce);
+ ContributionReadException ce = new ContributionReadException(e);
+ error("ContributionReadException", inputFactory, ce);
throw ce;
} finally {
-
+
try {
if (urlStream != null) {
urlStream.close();
@@ -180,16 +193,16 @@ public class SCADefinitionsDocumentProcessor implements URLArtifactProcessor<SC
}
}
}
-
+
public void resolve(SCADefinitions scaDefinitions, ModelResolver resolver) throws ContributionResolveException {
SCADefinitionsUtil.stripDuplicates(scaDefinitions);
extensionProcessor.resolve(scaDefinitions, resolver);
}
-
+
public String getArtifactType() {
return "definitions.xml";
}
-
+
public Class<SCADefinitions> 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<SCADefinitions> {
-
+
private StAXArtifactProcessor<Object> 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<Object> extensionProcessor,
- ModelResolver modelResolver, Monitor monitor) {
- this.extensionProcessor = extensionProcessor;
- this.monitor = monitor;
- }
-
- public SCADefinitionsProcessor(ExtensionPointRegistry extensionPoints,
- StAXArtifactProcessor<Object> extensionProcessor,
- Monitor monitor) {
+
+ public SCADefinitionsProcessor(FactoryExtensionPoint factoryExtensionPoint,
+ StAXArtifactProcessor<Object> 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<Intent> simpleIntents = new ArrayList<Intent>();
- List<ProfileIntent> profileIntents = new ArrayList<ProfileIntent>();
- List<QualifiedIntent> qualifiedIntents = new ArrayList<QualifiedIntent>();
+
+ List<Intent> simpleIntents = new ArrayList<Intent>();
+ List<ProfileIntent> profileIntents = new ArrayList<ProfileIntent>();
+ List<QualifiedIntent> qualifiedIntents = new ArrayList<QualifiedIntent>();
List<PolicySet> simplePolicySets = new ArrayList<PolicySet>();
List<PolicySet> referredPolicySets = new ArrayList<PolicySet>();
-
+
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<SCADefinitions> 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 @@
<Bundle-Version>${tuscany.version}</Bundle-Version>
<Bundle-SymbolicName>org.apache.tuscany.sca.definitions</Bundle-SymbolicName>
<Bundle-Description>${pom.name}</Bundle-Description>
- <Export-Package>org.apache.tuscany.sca.definitions*</Export-Package>
+ <Export-Package>
+ org.apache.tuscany.sca.definitions,
+ org.apache.tuscany.sca.definitions.util
+ </Export-Package>
</instructions>
</configuration>
</plugin>
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