From 756bf45a97409eb42ecd2e478abbbee4101ae997 Mon Sep 17 00:00:00 2001 From: rfeng Date: Thu, 22 Oct 2009 17:12:05 +0000 Subject: Remove tuscany-scdl module as it is now replaced by tuscany-deployment Adjust itest-scdl to use the Deployer from tuscany-deployment git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@828787 13f79535-47bb-0310-9956-ffa450edef68 --- java/sca/itest/scdl/pom.xml | 24 +- .../sca/itest/scdl/ContributionTestCase.java | 14 +- .../tuscany/sca/itest/scdl/SCDLTestCase.java | 14 +- .../itest/scdl/ValidateDependenciesTestCase.java | 2 +- java/sca/modules/pom.xml | 3 +- java/sca/modules/scdl/LICENSE | 205 --------- java/sca/modules/scdl/META-INF/MANIFEST.MF | 33 -- java/sca/modules/scdl/NOTICE | 6 - java/sca/modules/scdl/pom.xml | 72 ---- .../org/apache/tuscany/sca/scdl/Contributions.java | 160 ------- .../org/apache/tuscany/sca/scdl/SCDLUtils.java | 465 --------------------- 11 files changed, 46 insertions(+), 952 deletions(-) delete mode 100644 java/sca/modules/scdl/LICENSE delete mode 100644 java/sca/modules/scdl/META-INF/MANIFEST.MF delete mode 100644 java/sca/modules/scdl/NOTICE delete mode 100644 java/sca/modules/scdl/pom.xml delete mode 100644 java/sca/modules/scdl/src/main/java/org/apache/tuscany/sca/scdl/Contributions.java delete mode 100644 java/sca/modules/scdl/src/main/java/org/apache/tuscany/sca/scdl/SCDLUtils.java diff --git a/java/sca/itest/scdl/pom.xml b/java/sca/itest/scdl/pom.xml index 2ed073493f..54e1c132ec 100644 --- a/java/sca/itest/scdl/pom.xml +++ b/java/sca/itest/scdl/pom.xml @@ -32,11 +32,31 @@ org.apache.tuscany.sca - tuscany-scdl + tuscany-deployment 2.0-SNAPSHOT + + org.apache.tuscany.sca + tuscany-implementation-java + 2.0-SNAPSHOT + + + org.apache.tuscany.sca + tuscany-binding-jsonp + 2.0-SNAPSHOT + + + org.apache.tuscany.sca + tuscany-binding-rmi + 2.0-SNAPSHOT + + + org.apache.tuscany.sca + tuscany-binding-jms + 2.0-SNAPSHOT + - + diff --git a/java/sca/itest/scdl/src/test/java/org/apache/tuscany/sca/itest/scdl/ContributionTestCase.java b/java/sca/itest/scdl/src/test/java/org/apache/tuscany/sca/itest/scdl/ContributionTestCase.java index 22370f4e39..c56545dd3b 100644 --- a/java/sca/itest/scdl/src/test/java/org/apache/tuscany/sca/itest/scdl/ContributionTestCase.java +++ b/java/sca/itest/scdl/src/test/java/org/apache/tuscany/sca/itest/scdl/ContributionTestCase.java @@ -19,6 +19,9 @@ package org.apache.tuscany.sca.itest.scdl; +import java.io.File; +import java.net.URL; +import java.util.Arrays; import java.util.List; import junit.framework.Assert; @@ -28,8 +31,10 @@ import org.apache.tuscany.sca.assembly.Composite; import org.apache.tuscany.sca.assembly.Implementation; import org.apache.tuscany.sca.assembly.Reference; import org.apache.tuscany.sca.contribution.Contribution; +import org.apache.tuscany.sca.deployment.DefaultDeployer; +import org.apache.tuscany.sca.deployment.Deployer; import org.apache.tuscany.sca.implementation.java.JavaImplementation; -import org.apache.tuscany.sca.scdl.SCDLUtils; +import org.apache.tuscany.sca.monitor.Monitor; import org.junit.After; import org.junit.Before; import org.junit.Test; @@ -41,7 +46,12 @@ public class ContributionTestCase { @Test public void testRead() throws Exception { - Contribution contribution = SCDLUtils.readContribution("../../samples/calculator/target/sample-calculator.jar"); + Deployer deployer = new DefaultDeployer(); + File file = new File("../../samples/calculator/target/sample-calculator.jar"); + URL url = file.toURI().toURL(); + Monitor monitor = deployer.createMonitor(); + Contribution contribution = deployer.loadContribution(url.toURI(), url, monitor); + deployer.build(Arrays.asList(contribution), null, monitor); // Ferkle around in the contribution verifying it looks as expected Assert.assertNotNull(contribution); diff --git a/java/sca/itest/scdl/src/test/java/org/apache/tuscany/sca/itest/scdl/SCDLTestCase.java b/java/sca/itest/scdl/src/test/java/org/apache/tuscany/sca/itest/scdl/SCDLTestCase.java index a21de6f819..18fb9394bf 100644 --- a/java/sca/itest/scdl/src/test/java/org/apache/tuscany/sca/itest/scdl/SCDLTestCase.java +++ b/java/sca/itest/scdl/src/test/java/org/apache/tuscany/sca/itest/scdl/SCDLTestCase.java @@ -19,7 +19,7 @@ package org.apache.tuscany.sca.itest.scdl; -import java.io.InputStream; +import java.net.URL; import javax.xml.stream.XMLStreamException; @@ -32,7 +32,10 @@ import org.apache.tuscany.sca.binding.jms.JMSBinding; import org.apache.tuscany.sca.binding.jsonp.JSONPBinding; import org.apache.tuscany.sca.binding.rmi.RMIBinding; import org.apache.tuscany.sca.contribution.processor.ContributionReadException; -import org.apache.tuscany.sca.scdl.SCDLUtils; +import org.apache.tuscany.sca.core.DefaultExtensionPointRegistry; +import org.apache.tuscany.sca.core.ExtensionPointRegistry; +import org.apache.tuscany.sca.core.UtilityExtensionPoint; +import org.apache.tuscany.sca.deployment.Deployer; import org.junit.Test; /** @@ -42,8 +45,11 @@ public class SCDLTestCase { @Test public void testRead() throws ContributionReadException, XMLStreamException { - InputStream r = getClass().getClassLoader().getResourceAsStream("test.composite"); - Composite composite = SCDLUtils.readComposite(r); + ExtensionPointRegistry registry = new DefaultExtensionPointRegistry(); + Deployer deployer = registry.getExtensionPoint(UtilityExtensionPoint.class).getUtility(Deployer.class); + + URL r = getClass().getResource("/test.composite"); + Composite composite = deployer.loadXMLDocument(r, null); Assert.assertNotNull(composite); Component JavaComp = composite.getComponent("JavaComponent"); diff --git a/java/sca/itest/scdl/src/test/java/org/apache/tuscany/sca/itest/scdl/ValidateDependenciesTestCase.java b/java/sca/itest/scdl/src/test/java/org/apache/tuscany/sca/itest/scdl/ValidateDependenciesTestCase.java index edb6ec85e6..44695e5dde 100644 --- a/java/sca/itest/scdl/src/test/java/org/apache/tuscany/sca/itest/scdl/ValidateDependenciesTestCase.java +++ b/java/sca/itest/scdl/src/test/java/org/apache/tuscany/sca/itest/scdl/ValidateDependenciesTestCase.java @@ -68,6 +68,6 @@ public class ValidateDependenciesTestCase { Assert.assertTrue(dependenciesDir.exists()); File[] dependencyFiles = dependenciesDir.listFiles(); - Assert.assertEquals(25, dependencyFiles.length); + Assert.assertEquals(20, dependencyFiles.length); } } diff --git a/java/sca/modules/pom.xml b/java/sca/modules/pom.xml index d277137991..a69f055942 100644 --- a/java/sca/modules/pom.xml +++ b/java/sca/modules/pom.xml @@ -98,10 +98,9 @@ policy-logging sca-api sca-client-impl - scdl stripes xsd - + contribution-osgi implementation-osgi implementation-osgi-runtime diff --git a/java/sca/modules/scdl/LICENSE b/java/sca/modules/scdl/LICENSE deleted file mode 100644 index 6e529a25c4..0000000000 --- a/java/sca/modules/scdl/LICENSE +++ /dev/null @@ -1,205 +0,0 @@ - - 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. - - - diff --git a/java/sca/modules/scdl/META-INF/MANIFEST.MF b/java/sca/modules/scdl/META-INF/MANIFEST.MF deleted file mode 100644 index 2246e4c1a9..0000000000 --- a/java/sca/modules/scdl/META-INF/MANIFEST.MF +++ /dev/null @@ -1,33 +0,0 @@ -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 diff --git a/java/sca/modules/scdl/NOTICE b/java/sca/modules/scdl/NOTICE deleted file mode 100644 index 51042eab05..0000000000 --- a/java/sca/modules/scdl/NOTICE +++ /dev/null @@ -1,6 +0,0 @@ -${pom.name} -Copyright (c) 2005 - 2009 The Apache Software Foundation - -This product includes software developed by -The Apache Software Foundation (http://www.apache.org/). - diff --git a/java/sca/modules/scdl/pom.xml b/java/sca/modules/scdl/pom.xml deleted file mode 100644 index de13920bb0..0000000000 --- a/java/sca/modules/scdl/pom.xml +++ /dev/null @@ -1,72 +0,0 @@ - - - - 4.0.0 - - org.apache.tuscany.sca - tuscany-modules - 2.0-SNAPSHOT - ../pom.xml - - tuscany-scdl - Apache Tuscany SCA SCDL - - - - org.apache.tuscany.sca - tuscany-implementation-java - 2.0-SNAPSHOT - - - org.apache.tuscany.sca - tuscany-implementation-bpel - 2.0-SNAPSHOT - - - org.apache.tuscany.sca - tuscany-binding-jms - 2.0-SNAPSHOT - - - org.apache.tuscany.sca - tuscany-binding-jsonp - 2.0-SNAPSHOT - - - org.apache.tuscany.sca - tuscany-binding-rmi - 2.0-SNAPSHOT - - - - org.apache.tuscany.sca - tuscany-binding-ws - 2.0-SNAPSHOT - - - - org.apache.tuscany.sca - tuscany-assembly-xml - 2.0-SNAPSHOT - - - - - diff --git a/java/sca/modules/scdl/src/main/java/org/apache/tuscany/sca/scdl/Contributions.java b/java/sca/modules/scdl/src/main/java/org/apache/tuscany/sca/scdl/Contributions.java deleted file mode 100644 index dc35af5da6..0000000000 --- a/java/sca/modules/scdl/src/main/java/org/apache/tuscany/sca/scdl/Contributions.java +++ /dev/null @@ -1,160 +0,0 @@ -/* - * 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 contributions = new ArrayList(); - private String location; - private String uri; - private Object model; - private byte[] contents; - private boolean unresolved; - private ModelResolver modelResolver; - private List dependencies = new ArrayList(); - - public Contributions(List 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 getContributions() { - return contributions; - } - - public List getArtifacts() { - return (List)(Object)contributions; - } - - public List getDependencies() { - return dependencies; - } - - public ClassLoader getClassLoader() { - //FIXME Remove later - return null; - } - - public void setClassLoader(ClassLoader classLoader) { - //FIXME Remove later - } - - public List getDeployables() { - List deployables = new ArrayList(); - for (Contribution contribution: contributions) { - deployables.addAll(contribution.getDeployables()); - } - return deployables; - } - - public List getExports() { - List exports = new ArrayList(); - for (Contribution contribution: contributions) { - exports.addAll(contribution.getExports()); - } - return exports; - } - - public List getImports() { - List imports = new ArrayList(); - 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 getAttributeExtensions() { - // TODO Auto-generated method stub - return null; - } - - public List getExtensions() { - // TODO Auto-generated method stub - return null; - } - - public Set getTypes() { - return Collections.emptySet(); - } -} diff --git a/java/sca/modules/scdl/src/main/java/org/apache/tuscany/sca/scdl/SCDLUtils.java b/java/sca/modules/scdl/src/main/java/org/apache/tuscany/sca/scdl/SCDLUtils.java deleted file mode 100644 index 05908c18f6..0000000000 --- a/java/sca/modules/scdl/src/main/java/org/apache/tuscany/sca/scdl/SCDLUtils.java +++ /dev/null @@ -1,465 +0,0 @@ -/* - * 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.ProcessorContext; -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.ExtensionPointRegistry; -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(); - ProcessorContext context = new ProcessorContext(extensionPoints); - 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 staxProcessor = - new ExtensibleStAXArtifactProcessor(staxProcessors, inputFactory, null); - XMLStreamReader reader = inputFactory.createXMLStreamReader(is); - Composite composite = (Composite)staxProcessor.read(reader, context); - - List 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(); - ProcessorContext context = new ProcessorContext(extensionPoints); - 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 contributionProcessor = - (ExtendedURLArtifactProcessor)docProcessorExtensions.getProcessor(Contribution.class); - - File f = new File(location); - List contributions = new ArrayList(); - contributions.add(contributionProcessor.read(null, f.toURI(), f.toURI().toURL(), context)); - - 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)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); - systemContribution.setModelResolver(modelResolverSys); - systemContribution.setUnresolved(true); - - // create an artifact to represent the system defintions and - // add it to the contribution - List 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) { - try { - 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); - } finally { - monitor.popContext(); - } - } - - ExtensibleModelResolver modelResolver = - new ExtensibleModelResolver(new Contributions(contributions), modelResolvers, modelFactories); - - contributionProcessor.resolve(systemContribution, modelResolver, context); - contributions.add(systemContribution); - - // TODO - Now we can calculate applicable policy sets for each composite - - // pre-resolve the contributions - contributionsPreresolve(contributionProcessor, contributions, modelResolver, context); - - // Build the contribution dependencies - Set resolved = new HashSet(); - 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, context); - } - } - } - - // // 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> bindingMap = new HashMap>(); - //// 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>(), 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 contributionProcessor, - List contributions, - ModelResolver resolver, - ProcessorContext context) throws ContributionResolveException { - - for (Contribution contribution : contributions) { - contributionProcessor.preResolve(contribution, resolver, context); - } // end for - } // end method contributionsPreresolve - - private static void buildDependencies(Contribution contribution, List contributions, Monitor monitor) { - contribution.getDependencies().clear(); - - List dependencies = new ArrayList(); - Set set = new HashSet(); - - 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 contributions, - List dependencies, - Set 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 matchingExports = new ArrayList(); - 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 loadContributions(ExtensionPointRegistry extensionPoints, String s, ProcessorContext context) - throws MalformedURLException, ContributionReadException, XMLStreamException, IOException, - UnsupportedEncodingException, Exception { - List contributions = new ArrayList(); - - 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 contributionProcessor = - (ExtendedURLArtifactProcessor)docProcessorExtensions.getProcessor(Contribution.class); - - // Load the contribution - Contribution contribution = contributionProcessor.read(null, contributionURI, contributionURL, context); - 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(ExtensionPointRegistry extensionPoints, - Contribution contribution, - Reader xml, - String location, - boolean attached, - ProcessorContext context) throws XMLStreamException, - ContributionReadException { - - XMLInputFactory inputFactory = XMLInputFactory.newInstance(); - XMLStreamReader reader = inputFactory.createXMLStreamReader(xml); - reader.nextTag(); - - StAXArtifactProcessorExtensionPoint xmlProcessors = - extensionPoints.getExtensionPoint(StAXArtifactProcessorExtensionPoint.class); - StAXArtifactProcessor compositeProcessor = xmlProcessors.getProcessor(Composite.class); - - // Read the composite model - Composite composite = (Composite)compositeProcessor.read(reader, context); - 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; - } -} -- cgit v1.2.3