You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by an...@apache.org on 2009/09/14 12:28:20 UTC

svn commit: r814564 - in /tuscany/java/sca/modules/scdl: ./ META-INF/ src/ src/main/ src/main/java/ src/main/java/org/ src/main/java/org/apache/ src/main/java/org/apache/tuscany/ src/main/java/org/apache/tuscany/sca/ src/main/java/org/apache/tuscany/sc...

Author: antelder
Date: Mon Sep 14 10:28:19 2009
New Revision: 814564

URL: http://svn.apache.org/viewvc?rev=814564&view=rev
Log:
Start prototype of a module for scdl processing. Based on a ML conversation from a while back talking about wanting the model and xml modules being useable without the runtime modules. This lets you load SCA contributions creating the Tuscany model objects

Added:
    tuscany/java/sca/modules/scdl/   (with props)
    tuscany/java/sca/modules/scdl/LICENSE
    tuscany/java/sca/modules/scdl/META-INF/
    tuscany/java/sca/modules/scdl/META-INF/MANIFEST.MF
    tuscany/java/sca/modules/scdl/NOTICE
    tuscany/java/sca/modules/scdl/pom.xml
    tuscany/java/sca/modules/scdl/src/
    tuscany/java/sca/modules/scdl/src/main/
    tuscany/java/sca/modules/scdl/src/main/java/
    tuscany/java/sca/modules/scdl/src/main/java/org/
    tuscany/java/sca/modules/scdl/src/main/java/org/apache/
    tuscany/java/sca/modules/scdl/src/main/java/org/apache/tuscany/
    tuscany/java/sca/modules/scdl/src/main/java/org/apache/tuscany/sca/
    tuscany/java/sca/modules/scdl/src/main/java/org/apache/tuscany/sca/scdl/
    tuscany/java/sca/modules/scdl/src/main/java/org/apache/tuscany/sca/scdl/Contributions.java
    tuscany/java/sca/modules/scdl/src/main/java/org/apache/tuscany/sca/scdl/SCDLUtils.java
    tuscany/java/sca/modules/scdl/src/main/resources/
    tuscany/java/sca/modules/scdl/src/test/
    tuscany/java/sca/modules/scdl/src/test/java/

Propchange: tuscany/java/sca/modules/scdl/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Mon Sep 14 10:28:19 2009
@@ -0,0 +1,20 @@
+target
+work
+dojo
+*.iws
+*.ipr
+*.iml
+derby.log
+maven.log
+maven-eclipse.xml
+build.xml
+build-dependency.xml
+velocity.log*
+junit*.properties
+surefire*.properties
+.project
+.classpath
+.settings
+.deployables
+.wtpmodules
+.externalToolBuilders

Added: tuscany/java/sca/modules/scdl/LICENSE
URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/scdl/LICENSE?rev=814564&view=auto
==============================================================================
--- tuscany/java/sca/modules/scdl/LICENSE (added)
+++ tuscany/java/sca/modules/scdl/LICENSE Mon Sep 14 10:28:19 2009
@@ -0,0 +1,205 @@
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   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.
+
+
+

Added: tuscany/java/sca/modules/scdl/META-INF/MANIFEST.MF
URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/scdl/META-INF/MANIFEST.MF?rev=814564&view=auto
==============================================================================
--- tuscany/java/sca/modules/scdl/META-INF/MANIFEST.MF (added)
+++ tuscany/java/sca/modules/scdl/META-INF/MANIFEST.MF Mon Sep 14 10:28:19 2009
@@ -0,0 +1,33 @@
+Manifest-Version: 1.0
+Export-Package: org.apache.tuscany.sca.scdl;version="2.0.0"
+Tool: Bnd-0.0.255
+Bundle-Name: Apache Tuscany SCA SCDL
+Created-By: 1.6.0_07 (Sun Microsystems Inc.)
+Bundle-Vendor: The Apache Software Foundation
+Bundle-Version: 2.0.0
+Bnd-LastModified: 1225397097203
+Bundle-ManifestVersion: 2
+Bundle-License: http://www.apache.org/licenses/LICENSE-2.0.txt
+Bundle-Description: Apache Tuscany SCA SCDL
+Import-Package: javax.xml.transform.stream,
+ org.apache.tuscany.sca.assembly;version="2.0.0",
+ org.apache.tuscany.sca.contribution;version="2.0.0",
+ org.apache.tuscany.sca.contribution.processor;version="2.0.0",
+ org.apache.tuscany.sca.contribution.resolver;version="2.0.0",
+ org.apache.tuscany.sca.core;version="2.0.0",
+ org.apache.tuscany.sca.definitions;version="2.0.0",
+ org.apache.tuscany.sca.definitions.util;version="2.0.0",
+ org.apache.tuscany.sca.definitions.xml;version="2.0.0",
+ org.apache.tuscany.sca.extensibility;version="2.0.0",
+ org.apache.tuscany.sca.interfacedef;version="2.0.0",
+ org.apache.tuscany.sca.common.java.io;version="2.0.0",
+ org.apache.tuscany.sca.monitor;version="2.0.0",
+ org.apache.tuscany.sca.policy;version="2.0.0",
+ org.apache.tuscany.sca.policy.impl;version="2.0.0",
+ org.apache.tuscany.sca.policy.util;version="2.0.0",
+ org.apache.tuscany.sca.scdl;version="2.0.0",
+ org.w3c.dom,
+ org.xml.sax
+Bundle-SymbolicName: org.apache.tuscany.sca.scdl
+Bundle-DocURL: http://www.apache.org/
+Bundle-RequiredExecutionEnvironment: J2SE-1.5,JavaSE-1.6

Added: tuscany/java/sca/modules/scdl/NOTICE
URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/scdl/NOTICE?rev=814564&view=auto
==============================================================================
--- tuscany/java/sca/modules/scdl/NOTICE (added)
+++ tuscany/java/sca/modules/scdl/NOTICE Mon Sep 14 10:28:19 2009
@@ -0,0 +1,6 @@
+${pom.name}
+Copyright (c) 2005 - 2009 The Apache Software Foundation
+
+This product includes software developed by
+The Apache Software Foundation (http://www.apache.org/).
+

Added: tuscany/java/sca/modules/scdl/pom.xml
URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/scdl/pom.xml?rev=814564&view=auto
==============================================================================
--- tuscany/java/sca/modules/scdl/pom.xml (added)
+++ tuscany/java/sca/modules/scdl/pom.xml Mon Sep 14 10:28:19 2009
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * 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.    
+-->
+<project>
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.apache.tuscany.sca</groupId>
+        <artifactId>tuscany-modules</artifactId>
+        <version>2.0-SNAPSHOT</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+    <artifactId>tuscany-scdl</artifactId>
+    <name>Apache Tuscany SCA SCDL</name>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.tuscany.sca</groupId>
+            <artifactId>tuscany-implementation-java</artifactId>
+            <version>2.0-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.tuscany.sca</groupId>
+            <artifactId>tuscany-implementation-bpel</artifactId>
+            <version>2.0-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.tuscany.sca</groupId>
+            <artifactId>tuscany-binding-jms</artifactId>
+            <version>2.0-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.tuscany.sca</groupId>
+            <artifactId>tuscany-binding-jsonp</artifactId>
+            <version>2.0-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.tuscany.sca</groupId>
+            <artifactId>tuscany-binding-rmi</artifactId>
+            <version>2.0-SNAPSHOT</version>
+        </dependency>
+
+<!-- TODO: leave out WS binding for now as it drags in entire runtime 
+        <dependency>
+            <groupId>org.apache.tuscany.sca</groupId>
+            <artifactId>tuscany-binding-ws-xml</artifactId>
+            <version>2.0-SNAPSHOT</version>
+        </dependency>
+-->
+
+        <dependency>
+            <groupId>org.apache.tuscany.sca</groupId>
+            <artifactId>tuscany-definitions-xml</artifactId>
+            <version>2.0-SNAPSHOT</version>
+        </dependency>
+
+    </dependencies>
+
+</project>

Added: tuscany/java/sca/modules/scdl/src/main/java/org/apache/tuscany/sca/scdl/Contributions.java
URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/scdl/src/main/java/org/apache/tuscany/sca/scdl/Contributions.java?rev=814564&view=auto
==============================================================================
--- tuscany/java/sca/modules/scdl/src/main/java/org/apache/tuscany/sca/scdl/Contributions.java (added)
+++ tuscany/java/sca/modules/scdl/src/main/java/org/apache/tuscany/sca/scdl/Contributions.java Mon Sep 14 10:28:19 2009
@@ -0,0 +1,160 @@
+/*
+ * 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.scdl;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Set;
+
+import org.apache.tuscany.sca.assembly.Composite;
+import org.apache.tuscany.sca.assembly.Extension;
+import org.apache.tuscany.sca.contribution.Artifact;
+import org.apache.tuscany.sca.contribution.Contribution;
+import org.apache.tuscany.sca.contribution.Export;
+import org.apache.tuscany.sca.contribution.Import;
+import org.apache.tuscany.sca.contribution.resolver.ModelResolver;
+
+/**
+ * A Contribution impl wrapping multiple other contributions
+ * Currently the sole reason for this is so
+ */
+public class Contributions implements Contribution {
+
+    private List<Contribution> contributions = new ArrayList<Contribution>();
+    private String location;
+    private String uri;
+    private Object model;
+    private byte[] contents;
+    private boolean unresolved;
+    private ModelResolver modelResolver;
+    private List<Contribution> dependencies = new ArrayList<Contribution>();
+
+    public Contributions(List<Contribution> contributions) {
+        this.contributions = contributions;
+    }
+
+    public String getLocation() {
+        return location;
+    }
+
+    public Object getModel() {
+        return model;
+    }
+
+    public String getURI() {
+        return uri;
+    }
+
+    public void setLocation(String location) {
+        this.location = location;
+    }
+
+    public void setModel(Object model) {
+        this.model = model;
+    }
+
+    public byte[] getContents() {
+        return contents;
+    }
+
+    public void setContents(byte[] contents) {
+        this.contents = contents;
+    }
+
+    public void setURI(String uri) {
+        this.uri = uri;
+    }
+
+    public boolean isUnresolved() {
+        return unresolved;
+    }
+
+    public void setUnresolved(boolean unresolved) {
+        this.unresolved = unresolved;
+    }
+
+    public List<Contribution> getContributions() {
+        return contributions;
+    }
+
+    public List<Artifact> getArtifacts() {
+        return (List<Artifact>)(Object)contributions;
+    }
+
+    public List<Contribution> getDependencies() {
+        return dependencies;
+    }
+
+    public ClassLoader getClassLoader() {
+        //FIXME Remove later
+        return null;
+    }
+
+    public void setClassLoader(ClassLoader classLoader) {
+        //FIXME Remove later
+    }
+
+    public List<Composite> getDeployables() {
+        List<Composite> deployables = new ArrayList<Composite>();
+        for (Contribution contribution: contributions) {
+            deployables.addAll(contribution.getDeployables());
+        }
+        return deployables;
+    }
+
+    public List<Export> getExports() {
+        List<Export> exports = new ArrayList<Export>();
+        for (Contribution contribution: contributions) {
+            exports.addAll(contribution.getExports());
+        }
+        return exports;
+    }
+
+    public List<Import> getImports() {
+        List<Import> imports = new ArrayList<Import>();
+        for (Contribution contribution: contributions) {
+            imports.addAll(contribution.getImports());
+        }
+        return imports;
+    }
+
+    public ModelResolver getModelResolver() {
+        return modelResolver;
+    }
+
+    public void setModelResolver(ModelResolver modelResolver) {
+        this.modelResolver = modelResolver;
+    }
+
+    public List<Extension> getAttributeExtensions() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public List<Object> getExtensions() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public Set<String> getTypes() {
+        return Collections.emptySet();
+    }
+}

Added: tuscany/java/sca/modules/scdl/src/main/java/org/apache/tuscany/sca/scdl/SCDLUtils.java
URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/scdl/src/main/java/org/apache/tuscany/sca/scdl/SCDLUtils.java?rev=814564&view=auto
==============================================================================
--- tuscany/java/sca/modules/scdl/src/main/java/org/apache/tuscany/sca/scdl/SCDLUtils.java (added)
+++ tuscany/java/sca/modules/scdl/src/main/java/org/apache/tuscany/sca/scdl/SCDLUtils.java Mon Sep 14 10:28:19 2009
@@ -0,0 +1,431 @@
+/*
+ * 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.scdl;
+
+import static org.apache.tuscany.sca.common.java.io.IOHelper.createURI;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.Reader;
+import java.io.UnsupportedEncodingException;
+import java.net.MalformedURLException;
+import java.net.URI;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import javax.xml.stream.XMLInputFactory;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamReader;
+
+import org.apache.tuscany.sca.assembly.Composite;
+import org.apache.tuscany.sca.contribution.Artifact;
+import org.apache.tuscany.sca.contribution.Contribution;
+import org.apache.tuscany.sca.contribution.ContributionFactory;
+import org.apache.tuscany.sca.contribution.DefaultImport;
+import org.apache.tuscany.sca.contribution.Export;
+import org.apache.tuscany.sca.contribution.Import;
+import org.apache.tuscany.sca.contribution.processor.ContributionReadException;
+import org.apache.tuscany.sca.contribution.processor.ContributionResolveException;
+import org.apache.tuscany.sca.contribution.processor.DefaultStAXArtifactProcessorExtensionPoint;
+import org.apache.tuscany.sca.contribution.processor.ExtendedURLArtifactProcessor;
+import org.apache.tuscany.sca.contribution.processor.ExtensibleStAXArtifactProcessor;
+import org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor;
+import org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessorExtensionPoint;
+import org.apache.tuscany.sca.contribution.processor.URLArtifactProcessorExtensionPoint;
+import org.apache.tuscany.sca.contribution.resolver.DefaultImportModelResolver;
+import org.apache.tuscany.sca.contribution.resolver.ExtensibleModelResolver;
+import org.apache.tuscany.sca.contribution.resolver.ModelResolver;
+import org.apache.tuscany.sca.contribution.resolver.ModelResolverExtensionPoint;
+import org.apache.tuscany.sca.core.DefaultExtensionPointRegistry;
+import org.apache.tuscany.sca.core.FactoryExtensionPoint;
+import org.apache.tuscany.sca.core.UtilityExtensionPoint;
+import org.apache.tuscany.sca.definitions.Definitions;
+import org.apache.tuscany.sca.definitions.DefinitionsFactory;
+import org.apache.tuscany.sca.definitions.util.DefinitionsUtil;
+import org.apache.tuscany.sca.definitions.xml.DefinitionsExtensionPoint;
+import org.apache.tuscany.sca.monitor.Monitor;
+import org.apache.tuscany.sca.monitor.MonitorFactory;
+import org.apache.tuscany.sca.monitor.Problem;
+
+public class SCDLUtils {
+
+//  private static final String SCA11_TUSCANY_NS = "http://tuscany.apache.org/xmlns/sca/1.1";
+
+    public static Composite readComposite(InputStream is) throws XMLStreamException, ContributionReadException {
+        DefaultExtensionPointRegistry extensionPoints = new DefaultExtensionPointRegistry();
+        XMLInputFactory inputFactory = XMLInputFactory.newInstance();
+        UtilityExtensionPoint utilities = extensionPoints.getExtensionPoint(UtilityExtensionPoint.class);
+        MonitorFactory monitorFactory = utilities.getUtility(MonitorFactory.class);
+        Monitor monitor = monitorFactory.createMonitor();
+        StAXArtifactProcessorExtensionPoint staxProcessors = new DefaultStAXArtifactProcessorExtensionPoint(extensionPoints);
+        StAXArtifactProcessor<Object> staxProcessor = new ExtensibleStAXArtifactProcessor(staxProcessors, inputFactory, null, monitor);
+        XMLStreamReader reader = inputFactory.createXMLStreamReader(is);
+        Composite composite = (Composite)staxProcessor.read(reader);
+        
+        List<Problem> ps = monitor.getProblems();
+        if (ps.size() > 0) {
+            throw new ContributionReadException(ps.get(0).toString());
+        }
+        
+        return composite;
+    }
+
+    public static Contribution readContribution(String location) throws Exception {
+        
+        DefaultExtensionPointRegistry extensionPoints = new DefaultExtensionPointRegistry();
+        extensionPoints.start();
+        
+        UtilityExtensionPoint utilities = extensionPoints.getExtensionPoint(UtilityExtensionPoint.class);
+        MonitorFactory monitorFactory = utilities.getUtility(MonitorFactory.class);
+        Monitor monitor = monitorFactory.createMonitor();
+        URLArtifactProcessorExtensionPoint docProcessorExtensions = extensionPoints.getExtensionPoint(URLArtifactProcessorExtensionPoint.class);
+        ExtendedURLArtifactProcessor<Contribution> contributionProcessor = (ExtendedURLArtifactProcessor<Contribution>) docProcessorExtensions.getProcessor(Contribution.class);
+        
+        File f = new File(location);
+        List<Contribution> contributions = new ArrayList<Contribution>();
+        contributions.add(contributionProcessor.read(null, f.toURI(), f.toURI().toURL()));
+
+        FactoryExtensionPoint modelFactories = extensionPoints.getExtensionPoint(FactoryExtensionPoint.class);
+//        AssemblyFactory assemblyFactory = new RuntimeAssemblyFactory(extensionPoints);
+//        modelFactories.addFactory(assemblyFactory);
+
+        monitor = monitorFactory.createMonitor();
+
+        ContributionFactory contributionFactory = modelFactories.getFactory(ContributionFactory.class);
+
+        contributionProcessor = (ExtendedURLArtifactProcessor<Contribution>) docProcessorExtensions.getProcessor(Contribution.class);
+
+        ModelResolverExtensionPoint modelResolvers = extensionPoints.getExtensionPoint(ModelResolverExtensionPoint.class);
+
+        DefinitionsFactory definitionsFactory = modelFactories.getFactory(DefinitionsFactory.class);
+        Definitions systemDefinitions = definitionsFactory.createDefinitions();
+
+        // create a system contribution to hold the definitions. The contribution
+        // will be extended later with definitions from application contributions
+        Contribution systemContribution = contributionFactory.createContribution();
+        systemContribution.setURI("http://tuscany.apache.org/SystemContribution");
+        systemContribution.setLocation("http://tuscany.apache.org/SystemContribution");
+        ModelResolver modelResolverSys = new ExtensibleModelResolver(systemContribution, modelResolvers, modelFactories, monitor);
+        systemContribution.setModelResolver(modelResolverSys);
+        systemContribution.setUnresolved(true);
+
+        // create an artifact to represent the system defintions and
+        // add it to the contribution
+        List<Artifact> systemArtifacts = systemContribution.getArtifacts();
+        Artifact definitionsArtifact = contributionFactory.createArtifact();
+        definitionsArtifact.setURI("http://tuscany.apache.org/SystemContribution/Definitions");
+        definitionsArtifact.setLocation("Derived");
+        definitionsArtifact.setModel(systemDefinitions);
+        systemArtifacts.add(definitionsArtifact);
+
+        // Build an aggregated SCA definitions model. Must be done before we try and
+        // resolve any contributions or composites as they may depend on the full
+        // definitions.xml picture
+
+        monitor.pushContext("Extension points definitions");
+        DefinitionsExtensionPoint definitionsExtensionPoint = extensionPoints.getExtensionPoint(DefinitionsExtensionPoint.class);
+        for(Definitions defs: definitionsExtensionPoint.getDefinitions()) {
+            DefinitionsUtil.aggregate(defs, systemDefinitions, monitor);
+        }
+        monitor.popContext();
+        
+        // get all definitions.xml artifacts from contributions and aggregate
+        // into the system contribution. In turn add a default import into
+        // each contribution so that for unresolved items the resolution
+        // processing will look in the system contribution
+        for (Contribution contribution: contributions) {
+            monitor.pushContext("Contribution: " + contribution.getURI());
+            // aggregate definitions
+            for (Artifact artifact : contribution.getArtifacts()) {
+                Object model = artifact.getModel();
+                if (model instanceof Definitions) {
+                    monitor.pushContext("Definitions: " + artifact.getLocation());
+                    DefinitionsUtil.aggregate((Definitions)model, systemDefinitions, monitor);
+                    monitor.popContext();
+                }
+            }
+
+            // create a default import and wire it up to the system contribution
+            // model resolver. This is the trick that makes the resolution processing
+            // skip over to the system contribution if resolution is unsuccessful
+            // in the current contribution
+            DefaultImport defaultImport = contributionFactory.createDefaultImport();
+            defaultImport.setModelResolver(systemContribution.getModelResolver());
+            contribution.getImports().add(defaultImport);
+            monitor.popContext();
+        }
+
+        ExtensibleModelResolver modelResolver = new ExtensibleModelResolver(new Contributions(contributions), modelResolvers, modelFactories, monitor);
+
+        contributionProcessor.resolve(systemContribution, modelResolver);
+        contributions.add(systemContribution);
+
+        // TODO - Now we can calculate applicable policy sets for each composite
+
+        // pre-resolve the contributions
+        contributionsPreresolve(contributionProcessor, contributions, modelResolver);
+
+        // Build the contribution dependencies
+        Set<Contribution> resolved = new HashSet<Contribution>();
+        for (Contribution contribution: contributions) {
+            buildDependencies(contribution, contributions, monitor);
+
+            // Resolve contributions
+            for (Contribution dependency: contribution.getDependencies()) {
+                if (!resolved.contains(dependency)) {
+                    resolved.add(dependency);
+                    contributionProcessor.resolve(dependency, modelResolver);
+                }
+            }
+        }
+
+//    // Create a top level composite to host our composite
+//    // This is temporary to make the activator happy
+//        AssemblyFactory assemblyFactory = modelFactories.getFactory(AssemblyFactory.class);
+////      AssemblyFactory assemblyFactory = new RuntimeAssemblyFactory(extensionPoints);
+////      modelFactories.addFactory(assemblyFactory);
+//    Composite tempComposite = assemblyFactory.createComposite();
+//    tempComposite.setName(new QName(SCA11_TUSCANY_NS, "_tempComposite"));
+//    tempComposite.setURI(SCA11_TUSCANY_NS);
+//
+//    for (Contribution contribution : contributions) {
+//        for (Composite composite : contribution.getDeployables()) {
+//            // Include the node composite in the top-level composite
+//            tempComposite.getIncludes().add(composite);
+//        }
+//    }
+//
+//    
+//    CompositeActivator compositeActivator = extensionPoints.getExtensionPoint(UtilityExtensionPoint.class).getUtility(CompositeActivator.class);
+//
+//        // get the top level composite for this node
+//        compositeActivator.setDomainComposite(tempComposite);
+//
+//        // Activate the composite
+//        compositeActivator.activate(compositeActivator.getDomainComposite());
+//
+//        // Start the composite
+//        compositeActivator.start(compositeActivator.getDomainComposite());
+//    
+//    
+////    // TODO - EPR - create a binding map to pass down into the builders
+////    //              for use during URI calculation.
+////    Map<QName, List<String>> bindingMap = new HashMap<QName, List<String>>();
+////    for (BindingConfiguration config : configuration.getBindings()) {
+////        bindingMap.put(config.getBindingType(), config.getBaseURIs());
+////    }
+//
+//        CompositeBuilderExtensionPoint compositeBuilders = extensionPoints.getExtensionPoint(CompositeBuilderExtensionPoint.class);
+//        CompositeBuilder compositeBuilder = compositeBuilders.getCompositeBuilder("org.apache.tuscany.sca.assembly.builder.CompositeBuilder");
+//    ((CompositeBuilderTmp)compositeBuilder).build(tempComposite, systemDefinitions, new HashMap<QName, List<String>>(), monitor);
+////    analyzeProblems();
+//
+////    endpointReferenceBuilder.buildtimeBuild(tempComposite);
+////    analyzeProblems();
+//
+////    return tempComposite;
+////    Composite xxx = configureNode(extensionPoints, cs, monitor);
+    return contributions.get(0);
+
+}
+    /**
+     * Pre-resolve phase for contributions, to set up handling of imports and exports prior to full resolution
+     * @param contributionProcessor 
+     * @param contributions - the contributions to preresolve
+     * @param resolver - the ModelResolver to use
+     * @throws ContributionResolveException
+     */
+    private static void contributionsPreresolve( ExtendedURLArtifactProcessor<Contribution> contributionProcessor, List<Contribution> contributions, ModelResolver resolver )
+        throws ContributionResolveException {
+
+        for( Contribution contribution : contributions ) {
+                contributionProcessor.preResolve(contribution, resolver);
+        } // end for
+    } // end method contributionsPreresolve
+
+    private static void buildDependencies(Contribution contribution, List<Contribution> contributions, Monitor monitor) {
+        contribution.getDependencies().clear();
+
+        List<Contribution> dependencies = new ArrayList<Contribution>();
+        Set<Contribution> set = new HashSet<Contribution>();
+
+        dependencies.add(contribution);
+        set.add(contribution);
+        addContributionDependencies(contribution, contributions, dependencies, set, monitor);
+
+        Collections.reverse(dependencies);
+
+        contribution.getDependencies().addAll(dependencies);
+    }
+    /**
+     * Analyze a contribution and add its dependencies to the given dependency set.
+     */
+    private static void addContributionDependencies(Contribution contribution, List<Contribution> contributions, List<Contribution> dependencies, Set<Contribution> set, Monitor monitor) {
+
+        // Go through the contribution imports
+        for (Import import_: contribution.getImports()) {
+            boolean resolved = false;
+
+            // Go through all contribution candidates and their exports
+            List<Export> matchingExports = new ArrayList<Export>();
+            for (Contribution dependency: contributions) {
+                if (dependency == contribution) {
+                    // Do not self import
+                    continue;
+                }
+                for (Export export: dependency.getExports()) {
+
+                    // If an export from a contribution matches the import in hand
+                    // add that contribution to the dependency set
+                    if (import_.match(export)) {
+                        resolved = true;
+                        matchingExports.add(export);
+
+                        if (!set.contains(dependency)) {
+                            set.add(dependency);
+                            dependencies.add(dependency);
+
+                            // Now add the dependencies of that contribution
+                            addContributionDependencies(dependency, contributions, dependencies, set, monitor);
+                        } // end if
+                    } // end if 
+                } // end for
+            } // end for
+
+            if (resolved) {
+                // Initialize the import's model resolver with a delegating model
+                // resolver which will delegate to the matching exports
+                import_.setModelResolver(new DefaultImportModelResolver(matchingExports));
+
+            } else {
+                // Record import resolution issue
+                if (!(import_ instanceof DefaultImport)) {
+                        // Add the (empty) matchingExports List and report a warning
+                        import_.setModelResolver(new DefaultImportModelResolver(matchingExports));
+//                    warning(monitor, "UnresolvedImport", import_, import_);
+                }
+            } // end if
+        }
+    }
+
+    
+    private static List<Contribution> loadContributions(DefaultExtensionPointRegistry extensionPoints, String s) throws MalformedURLException, ContributionReadException, XMLStreamException, IOException, UnsupportedEncodingException, Exception {
+        List<Contribution> contributions = new ArrayList<Contribution>();
+
+        URI contributionURI = createURI(s);
+
+        URI uri = createURI(s);
+        if (uri.getScheme() == null) {
+            uri = new File(s).toURI();
+        }
+        URL contributionURL = uri.toURL();
+
+            URLArtifactProcessorExtensionPoint docProcessorExtensions = extensionPoints.getExtensionPoint(URLArtifactProcessorExtensionPoint.class);
+            ExtendedURLArtifactProcessor<Contribution> contributionProcessor = (ExtendedURLArtifactProcessor<Contribution>) docProcessorExtensions.getProcessor(Contribution.class);
+
+            // Load the contribution
+            Contribution contribution = contributionProcessor.read(null, contributionURI, contributionURL);
+            contributions.add(contribution);
+
+            boolean attached = false;
+//            for (DeploymentComposite dc : contrib.getDeploymentComposites()) {
+//                if (dc.getContent() != null) {
+//                    Reader xml = new StringReader(dc.getContent());
+//                    attached = attachDeploymentComposite(extensionPoints, contribution, xml, null, attached);
+//                } else if (dc.getLocation() != null) {
+//                    URI dcURI = createURI(dc.getLocation());
+//                    if (!dcURI.isAbsolute()) {
+//                        Composite composite = null;
+//                        // The location is pointing to an artifact within the contribution
+//                        for (Artifact a : contribution.getArtifacts()) {
+//                            if (dcURI.toString().equals(a.getURI())) {
+//                                composite = (Composite)a.getModel();
+//                                if (!attached) {
+//                                    contribution.getDeployables().clear();
+//                                    attached = true;
+//                                }
+//                                contribution.getDeployables().add(composite);
+//                                break;
+//                            }
+//                        }
+//                        if (composite == null) {
+//                            // Not found
+//                            throw new ServiceRuntimeException("Deployment composite " + dcURI
+//                                + " cannot be found within contribution "
+//                                + contribution.getLocation());
+//                        }
+//                    } else {
+//                        URL url = dcURI.toURL();
+//                        InputStream is = openStream(url);
+//                        Reader xml = new InputStreamReader(is, "UTF-8");
+//                        attached = attachDeploymentComposite(extensionPoints, contribution, xml, url.toString(), attached);
+//                    }
+//                }
+////            analyzeProblems();
+//        }
+    return contributions;
+}
+
+    private boolean attachDeploymentComposite(DefaultExtensionPointRegistry extensionPoints, Contribution contribution, Reader xml, String location, boolean attached) throws XMLStreamException, ContributionReadException {
+
+        XMLInputFactory inputFactory = XMLInputFactory.newInstance();
+        XMLStreamReader reader = inputFactory.createXMLStreamReader(xml);
+        reader.nextTag();
+
+        StAXArtifactProcessorExtensionPoint xmlProcessors = extensionPoints.getExtensionPoint(StAXArtifactProcessorExtensionPoint.class);
+        StAXArtifactProcessor<Composite> compositeProcessor = xmlProcessors.getProcessor(Composite.class);
+        
+        // Read the composite model
+        Composite composite = (Composite)compositeProcessor.read(reader);
+        reader.close();
+
+        FactoryExtensionPoint modelFactories = extensionPoints.getExtensionPoint(FactoryExtensionPoint.class);
+        ContributionFactory contributionFactory = modelFactories.getFactory(ContributionFactory.class);
+        
+        // Create an artifact for the deployment composite
+        Artifact artifact = contributionFactory.createArtifact();
+        String uri = composite.getName().getLocalPart() + ".composite";
+        artifact.setURI(uri);
+        // Set the location to avoid NPE
+        if (location == null) {
+            location = uri;
+        }
+        artifact.setLocation(location);
+        artifact.setModel(composite);
+        artifact.setUnresolved(false);
+        // Add it to the contribution
+        contribution.getArtifacts().add(artifact);
+
+        // Replace the deployable composites with the deployment composites
+        // Clear the deployable composites if it's the first deployment composite
+        if (!attached) {
+            contribution.getDeployables().clear();
+            attached = true;
+        }
+        contribution.getDeployables().add(composite);
+
+        return attached;
+    }
+}