tuscany-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From n...@apache.org
Subject svn commit: r660340 [4/4] - in /incubator/tuscany/java/sca: itest/databindings/common/src/main/resources/xsd/ itest/wsdlless/src/main/java/bigbank/account/services/accountdata/ modules/ modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly...
Date Tue, 27 May 2008 00:09:11 GMT
Added: incubator/tuscany/java/sca/modules/xsd-xml/src/main/java/org/apache/tuscany/sca/xsd/xml/XSDModelResolver.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/xsd-xml/src/main/java/org/apache/tuscany/sca/xsd/xml/XSDModelResolver.java?rev=660340&view=auto
==============================================================================
--- incubator/tuscany/java/sca/modules/xsd-xml/src/main/java/org/apache/tuscany/sca/xsd/xml/XSDModelResolver.java
(added)
+++ incubator/tuscany/java/sca/modules/xsd-xml/src/main/java/org/apache/tuscany/sca/xsd/xml/XSDModelResolver.java
Mon May 26 17:08:32 2008
@@ -0,0 +1,237 @@
+/*
+ * 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.xsd.xml;
+
+import java.io.IOException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.tuscany.sca.contribution.Artifact;
+import org.apache.tuscany.sca.contribution.Contribution;
+import org.apache.tuscany.sca.contribution.Import;
+import org.apache.tuscany.sca.contribution.ModelFactoryExtensionPoint;
+import org.apache.tuscany.sca.contribution.namespace.NamespaceImport;
+import org.apache.tuscany.sca.contribution.resolver.ModelResolver;
+import org.apache.tuscany.sca.contribution.service.ContributionRuntimeException;
+import org.apache.tuscany.sca.xsd.DefaultXSDFactory;
+import org.apache.tuscany.sca.xsd.XSDFactory;
+import org.apache.tuscany.sca.xsd.XSDefinition;
+import org.apache.ws.commons.schema.XmlSchema;
+import org.apache.ws.commons.schema.XmlSchemaCollection;
+import org.apache.ws.commons.schema.XmlSchemaInclude;
+import org.apache.ws.commons.schema.resolver.URIResolver;
+import org.xml.sax.InputSource;
+
+/**
+ * A Model Resolver for XSD models.
+ * 
+ * @version $Rev$ $Date$
+ */
+public class XSDModelResolver implements ModelResolver {
+    private XSDFactory factory;
+    private Contribution contribution;
+    private Map<String, List<XSDefinition>> map = new HashMap<String, List<XSDefinition>>();
+    private XmlSchemaCollection schemaCollection;
+
+    public XSDModelResolver(Contribution contribution, ModelFactoryExtensionPoint modelFactories)
{
+        this.contribution = contribution;
+        this.schemaCollection = new XmlSchemaCollection();
+        schemaCollection.setSchemaResolver(new URIResolverImpl(contribution));
+        this.factory = new DefaultXSDFactory();
+    }
+
+    public void addModel(Object resolved) {
+        XSDefinition definition = (XSDefinition)resolved;
+        List<XSDefinition> list = map.get(definition.getNamespace());
+        if (list == null) {
+            list = new ArrayList<XSDefinition>();
+            map.put(definition.getNamespace(), list);
+        }
+        list.add(definition);
+    }
+
+    public Object removeModel(Object resolved) {
+        XSDefinition definition = (XSDefinition)resolved;
+        List<XSDefinition> list = map.get(definition.getNamespace());
+        if (list == null) {
+            return null;
+        } else {
+            return list.remove(definition);
+        }
+    }
+
+    public <T> T resolveModel(Class<T> modelClass, T unresolved) {
+
+        XSDefinition definition = (XSDefinition)unresolved;
+        // Lookup a definition for the given namespace
+        String namespace = definition.getNamespace();
+        List<XSDefinition> list = map.get(namespace);
+        if (list != null && definition.getDocument() != null) {
+            // Set the document for the inline schema
+            int index = list.indexOf(definition);
+            if (index != -1) {
+                list.get(index).setDocument(definition.getDocument());
+            }
+        }
+        if (list == null && definition.getDocument() != null) {
+            // Hit for the 1st time
+            list = new ArrayList<XSDefinition>();
+            list.add(definition);
+            map.put(namespace, list);
+        }
+        XSDefinition resolved = null;
+        try {
+            resolved = aggregate(list);
+        } catch (IOException e) {
+            throw new ContributionRuntimeException(e);
+        }
+        if (resolved != null && !resolved.isUnresolved()) {
+            return modelClass.cast(resolved);
+        }
+
+        // No definition found, delegate the resolution to the imports
+        for (Import import_ : this.contribution.getImports()) {
+            if (import_ instanceof NamespaceImport) {
+                NamespaceImport namespaceImport = (NamespaceImport)import_;
+                if (namespaceImport.getNamespace().equals(namespace)) {
+
+                    // Delegate the resolution to the import resolver
+                    resolved =
+                        namespaceImport.getModelResolver().resolveModel(XSDefinition.class,
(XSDefinition)unresolved);
+                    if (!resolved.isUnresolved()) {
+                        return modelClass.cast(resolved);
+                    }
+                }
+            }
+        }
+        return modelClass.cast(unresolved);
+    }
+
+    private void loadOnDemand(XSDefinition definition) throws IOException {
+        if (definition.getSchema() != null) {
+            return;
+        }
+        if (definition.getDocument() != null) {
+            String uri = null;
+            if (definition.getLocation() != null) {
+                uri = definition.getLocation().toString();
+            }
+            XmlSchema schema = schemaCollection.read(definition.getDocument(), uri, null);
+            definition.setSchemaCollection(schemaCollection);
+            definition.setSchema(schema);
+            definition.setUnresolved(false);
+        } else if (definition.getLocation() != null) {
+            if (definition.getLocation().getFragment() != null) {
+                // It's an inline schema
+                return;
+            }
+            // Read an XSD document
+            InputSource xsd = XMLDocumentHelper.getInputSource(definition.getLocation().toURL());
+            XmlSchema schema = schemaCollection.read(xsd, null);
+            definition.setSchemaCollection(schemaCollection);
+            definition.setSchema(schema);
+        }
+    }
+
+    /**
+     * Create a facade XmlSchema which includes all the definitions
+     * 
+     * @param definitions A list of the XmlSchema under the same target
+     *                namespace
+     * @return The aggregated XmlSchema
+     */
+    private XSDefinition aggregate(List<XSDefinition> definitions) throws IOException
{
+        if (definitions == null || definitions.size() == 0) {
+            return null;
+        }
+        if (definitions.size() == 1) {
+            XSDefinition d = definitions.get(0);
+            loadOnDemand(d);
+            return d;
+        }
+        XSDefinition aggregated = factory.createXSDefinition();
+        for (XSDefinition d : definitions) {
+            loadOnDemand(d);
+        }
+        String ns = definitions.get(0).getNamespace();
+        XmlSchema facade = new XmlSchema(ns, schemaCollection);
+
+        for (XmlSchema d : schemaCollection.getXmlSchemas()) {
+            if (ns.equals(d.getTargetNamespace())) {
+                XmlSchemaInclude include = new XmlSchemaInclude();
+                include.setSchema(d);
+                include.setSourceURI(d.getSourceURI());
+                include.setSchemaLocation(d.getSourceURI());
+                facade.getIncludes().add(include);
+                facade.getItems().add(include);
+            }
+        }
+        aggregated.setUnresolved(true);
+        aggregated.setSchema(facade);
+        aggregated.setNamespace(ns);
+        aggregated.setUnresolved(false);
+
+        // FIXME: [rfeng] This is hacky
+        //definitions.clear();
+        //definitions.add(aggregated);
+        return aggregated;
+    }
+
+    /**
+     * URI resolver implementation for XML schema
+     */
+    public static class URIResolverImpl implements URIResolver {
+        private Contribution contribution;
+
+        public URIResolverImpl(Contribution contribution) {
+            this.contribution = contribution;
+        }
+
+        public org.xml.sax.InputSource resolveEntity(java.lang.String targetNamespace,
+                                                     java.lang.String schemaLocation,
+                                                     java.lang.String baseUri) {
+            try {
+                if (schemaLocation == null || schemaLocation.startsWith("/")) {
+                    return null;
+                }
+                URL url = null;
+                if (schemaLocation.startsWith("/")) {
+                    // The URI is relative to the contribution
+                    String uri = schemaLocation.substring(1);
+                    for (Artifact a : contribution.getArtifacts()) {
+                        if (a.getURI().equals(uri)) {
+                            url = new URL(a.getLocation());
+                            break;
+                        }
+                    }
+                } else {
+                    url = new URL(new URL(baseUri), schemaLocation);
+                }
+                return XMLDocumentHelper.getInputSource(url);
+            } catch (IOException e) {
+                return null;
+            }
+        }
+    }
+
+}

Added: incubator/tuscany/java/sca/modules/xsd-xml/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.processor.URLArtifactProcessor
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/xsd-xml/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.processor.URLArtifactProcessor?rev=660340&view=auto
==============================================================================
--- incubator/tuscany/java/sca/modules/xsd-xml/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.processor.URLArtifactProcessor
(added)
+++ incubator/tuscany/java/sca/modules/xsd-xml/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.processor.URLArtifactProcessor
Mon May 26 17:08:32 2008
@@ -0,0 +1,19 @@
+# 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. 
+
+# Implementation class for the artifact processor extension
+org.apache.tuscany.sca.xsd.xml.XSDDocumentProcessor;type=.xsd,model=org.apache.tuscany.sca.xsd.XSDefinition

Added: incubator/tuscany/java/sca/modules/xsd-xml/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.resolver.ModelResolver
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/xsd-xml/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.resolver.ModelResolver?rev=660340&view=auto
==============================================================================
--- incubator/tuscany/java/sca/modules/xsd-xml/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.resolver.ModelResolver
(added)
+++ incubator/tuscany/java/sca/modules/xsd-xml/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.resolver.ModelResolver
Mon May 26 17:08:32 2008
@@ -0,0 +1,18 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+# 
+#   http://www.apache.org/licenses/LICENSE-2.0
+# 
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License. 
+
+org.apache.tuscany.sca.xsd.xml.XSDModelResolver;model=org.apache.tuscany.sca.xsd.XSDefinition

Added: incubator/tuscany/java/sca/modules/xsd-xml/src/test/java/org/apache/tuscany/sca/xsd/xml/XMLDocumentHelperTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/xsd-xml/src/test/java/org/apache/tuscany/sca/xsd/xml/XMLDocumentHelperTestCase.java?rev=660340&view=auto
==============================================================================
--- incubator/tuscany/java/sca/modules/xsd-xml/src/test/java/org/apache/tuscany/sca/xsd/xml/XMLDocumentHelperTestCase.java
(added)
+++ incubator/tuscany/java/sca/modules/xsd-xml/src/test/java/org/apache/tuscany/sca/xsd/xml/XMLDocumentHelperTestCase.java
Mon May 26 17:08:32 2008
@@ -0,0 +1,49 @@
+/*
+ * 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.xsd.xml;
+
+import java.net.URL;
+
+import junit.framework.Assert;
+
+import org.junit.Before;
+import org.junit.Test;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class XMLDocumentHelperTestCase {
+    private URL xsd;
+
+    /**
+     * @throws java.lang.Exception
+     */
+    @Before
+    public void setUp() throws Exception {
+        xsd = getClass().getResource("/xsd/greeting.xsd");
+    }
+
+    @Test
+    public void testReadTNS() throws Exception {
+        String tns = XMLDocumentHelper.readTargetNamespace(xsd, XMLDocumentHelper.XSD, true,
null);
+        Assert.assertEquals("http://greeting", tns);
+    }
+
+}

Added: incubator/tuscany/java/sca/modules/xsd-xml/src/test/java/org/apache/tuscany/sca/xsd/xml/XSDDocumentProcessorTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/xsd-xml/src/test/java/org/apache/tuscany/sca/xsd/xml/XSDDocumentProcessorTestCase.java?rev=660340&view=auto
==============================================================================
--- incubator/tuscany/java/sca/modules/xsd-xml/src/test/java/org/apache/tuscany/sca/xsd/xml/XSDDocumentProcessorTestCase.java
(added)
+++ incubator/tuscany/java/sca/modules/xsd-xml/src/test/java/org/apache/tuscany/sca/xsd/xml/XSDDocumentProcessorTestCase.java
Mon May 26 17:08:32 2008
@@ -0,0 +1,90 @@
+/*
+ * 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.xsd.xml;
+
+import java.net.URI;
+import java.net.URL;
+
+import javax.xml.namespace.QName;
+
+import junit.framework.Assert;
+
+import org.apache.tuscany.sca.contribution.ModelFactoryExtensionPoint;
+import org.apache.tuscany.sca.contribution.processor.ExtensibleURLArtifactProcessor;
+import org.apache.tuscany.sca.contribution.processor.URLArtifactProcessor;
+import org.apache.tuscany.sca.contribution.processor.URLArtifactProcessorExtensionPoint;
+import org.apache.tuscany.sca.contribution.resolver.ModelResolver;
+import org.apache.tuscany.sca.core.DefaultExtensionPointRegistry;
+import org.apache.tuscany.sca.core.ExtensionPointRegistry;
+import org.apache.tuscany.sca.xsd.XSDefinition;
+import org.apache.ws.commons.schema.XmlSchemaInclude;
+import org.apache.ws.commons.schema.XmlSchemaObjectCollection;
+import org.apache.ws.commons.schema.XmlSchemaType;
+import org.junit.Before;
+import org.junit.Test;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class XSDDocumentProcessorTestCase {
+    private URLArtifactProcessor<Object> documentProcessor;
+    private ModelResolver resolver;
+
+    /**
+     * @throws java.lang.Exception
+     */
+    @Before
+    public void setUp() throws Exception {
+        ExtensionPointRegistry extensionPoints = new DefaultExtensionPointRegistry();
+        URLArtifactProcessorExtensionPoint documentProcessors = extensionPoints.getExtensionPoint(URLArtifactProcessorExtensionPoint.class);
+        documentProcessor = new ExtensibleURLArtifactProcessor(documentProcessors, null);
+        ModelFactoryExtensionPoint modelFactories = extensionPoints.getExtensionPoint(ModelFactoryExtensionPoint.class);
+        resolver = new XSDModelResolver(null, modelFactories);
+    }
+
+    @Test
+    public void testXSD() throws Exception {
+        URL url = getClass().getResource("/xsd/greeting.xsd");
+        XSDefinition definition = (XSDefinition)documentProcessor.read(null, URI.create("xsd/greeting.xsd"),
url);
+        Assert.assertNull(definition.getSchema());
+        Assert.assertEquals("http://greeting", definition.getNamespace());
+        URL url1 = getClass().getResource("/xsd/name.xsd");
+        XSDefinition definition1 = (XSDefinition)documentProcessor.read(null, URI.create("xsd/name.xsd"),
url1);
+        Assert.assertNull(definition1.getSchema());
+        Assert.assertEquals("http://greeting", definition1.getNamespace());
+        resolver.addModel(definition);
+        XSDefinition resolved = resolver.resolveModel(XSDefinition.class, definition);
+        XmlSchemaObjectCollection collection = resolved.getSchema().getIncludes();
+        Assert.assertTrue(collection.getCount() == 1);
+        XmlSchemaType type =
+            ((XmlSchemaInclude)collection.getItem(0)).getSchema().getTypeByName(new QName("http://greeting",
"Name"));
+        Assert.assertNotNull(type);
+        resolver.addModel(definition1);
+        resolved = resolver.resolveModel(XSDefinition.class, definition);
+        collection = resolved.getSchema().getIncludes();
+        Assert.assertTrue(collection.getCount() == 2);
+        XmlSchemaType type1 =
+            ((XmlSchemaInclude)collection.getItem(0)).getSchema().getTypeByName(new QName("http://greeting",
"Name"));
+        XmlSchemaType type2 =
+            ((XmlSchemaInclude)collection.getItem(1)).getSchema().getTypeByName(new QName("http://greeting",
"Name"));
+        Assert.assertTrue(type1 != null || type2 != null);
+    }
+
+}

Added: incubator/tuscany/java/sca/modules/xsd-xml/src/test/resources/xsd/greeting.xsd
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/xsd-xml/src/test/resources/xsd/greeting.xsd?rev=660340&view=auto
==============================================================================
--- incubator/tuscany/java/sca/modules/xsd-xml/src/test/resources/xsd/greeting.xsd (added)
+++ incubator/tuscany/java/sca/modules/xsd-xml/src/test/resources/xsd/greeting.xsd Mon May
26 17:08:32 2008
@@ -0,0 +1,29 @@
+<?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.
+-->
+<schema targetNamespace="http://greeting" xmlns="http://www.w3.org/2001/XMLSchema">
+    <include schemaLocation="name.xsd" />
+    <complexType name="Greeting">
+        <sequence>
+            <element name="message" type="string" />
+            <element name="name" type="Name" />
+        </sequence>
+    </complexType>
+
+</schema>
\ No newline at end of file

Added: incubator/tuscany/java/sca/modules/xsd-xml/src/test/resources/xsd/name.xsd
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/xsd-xml/src/test/resources/xsd/name.xsd?rev=660340&view=auto
==============================================================================
--- incubator/tuscany/java/sca/modules/xsd-xml/src/test/resources/xsd/name.xsd (added)
+++ incubator/tuscany/java/sca/modules/xsd-xml/src/test/resources/xsd/name.xsd Mon May 26
17:08:32 2008
@@ -0,0 +1,29 @@
+<?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.
+-->
+<schema targetNamespace="http://greeting" xmlns="http://www.w3.org/2001/XMLSchema">
+
+    <complexType name="Name">
+        <sequence>
+            <element name="firstName" type="string" />
+            <element name="lastName" type="string" />
+        </sequence>
+    </complexType>
+
+</schema>
\ No newline at end of file

Added: incubator/tuscany/java/sca/modules/xsd/pom.xml
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/xsd/pom.xml?rev=660340&view=auto
==============================================================================
--- incubator/tuscany/java/sca/modules/xsd/pom.xml (added)
+++ incubator/tuscany/java/sca/modules/xsd/pom.xml Mon May 26 17:08:32 2008
@@ -0,0 +1,79 @@
+<?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-incubating-SNAPSHOT</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+    <artifactId>tuscany-xsd</artifactId>
+    <name>Apache Tuscany SCA XSD Model</name>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.tuscany.sca</groupId>
+            <artifactId>tuscany-assembly</artifactId>
+            <version>2.0-incubating-SNAPSHOT</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.ws.commons.schema</groupId>
+            <artifactId>XmlSchema</artifactId>
+            <version>1.3.2</version>
+        </dependency>
+    </dependencies>
+
+    <repositories>
+        <!-- Apache repository for Web Services artifacts -->
+        <repository>
+            <id>apache.ws.zone</id>
+            <name>Apache WS Zone Repository</name>
+            <url>http://ws.zones.apache.org/repository2</url>
+            <releases>
+                <enabled>true</enabled>
+            </releases>
+            <snapshots>
+                <enabled>false</enabled>
+            </snapshots>
+        </repository>
+    </repositories>
+
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.felix</groupId>
+                <artifactId>maven-bundle-plugin</artifactId>
+
+                <configuration>
+                    <instructions>
+                        <Bundle-Version>${tuscany.version}</Bundle-Version>
+                        <Bundle-SymbolicName>org.apache.tuscany.sca.xsd</Bundle-SymbolicName>
+                        <Bundle-Description>${pom.name}</Bundle-Description>
+                        <Export-Package>org.apache.tuscany.sca.xsd*</Export-Package>
+                    </instructions>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+
+</project>

Added: incubator/tuscany/java/sca/modules/xsd/src/main/java/org/apache/tuscany/sca/xsd/DefaultXSDFactory.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/xsd/src/main/java/org/apache/tuscany/sca/xsd/DefaultXSDFactory.java?rev=660340&view=auto
==============================================================================
--- incubator/tuscany/java/sca/modules/xsd/src/main/java/org/apache/tuscany/sca/xsd/DefaultXSDFactory.java
(added)
+++ incubator/tuscany/java/sca/modules/xsd/src/main/java/org/apache/tuscany/sca/xsd/DefaultXSDFactory.java
Mon May 26 17:08:32 2008
@@ -0,0 +1,30 @@
+/*
+ * 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.xsd;
+
+import org.apache.tuscany.sca.xsd.impl.XSDFactoryImpl;
+
+/**
+ * A factory for XSD definitions
+ * 
+ * @version $Rev$ $Date$
+ */
+public class DefaultXSDFactory extends XSDFactoryImpl implements XSDFactory {
+
+}

Added: incubator/tuscany/java/sca/modules/xsd/src/main/java/org/apache/tuscany/sca/xsd/XSDFactory.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/xsd/src/main/java/org/apache/tuscany/sca/xsd/XSDFactory.java?rev=660340&view=auto
==============================================================================
--- incubator/tuscany/java/sca/modules/xsd/src/main/java/org/apache/tuscany/sca/xsd/XSDFactory.java
(added)
+++ incubator/tuscany/java/sca/modules/xsd/src/main/java/org/apache/tuscany/sca/xsd/XSDFactory.java
Mon May 26 17:08:32 2008
@@ -0,0 +1,35 @@
+/*
+ * 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.xsd;
+
+/**
+ * Factory for XSD definitions
+ * 
+ * @version $Rev$ $Date$
+ */
+public interface XSDFactory {
+    
+    /**
+     * Creates a new XML Schema definition.
+     * 
+     * @return a new XML Schema definition
+     */
+    XSDefinition createXSDefinition();
+
+}

Added: incubator/tuscany/java/sca/modules/xsd/src/main/java/org/apache/tuscany/sca/xsd/XSDefinition.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/xsd/src/main/java/org/apache/tuscany/sca/xsd/XSDefinition.java?rev=660340&view=auto
==============================================================================
--- incubator/tuscany/java/sca/modules/xsd/src/main/java/org/apache/tuscany/sca/xsd/XSDefinition.java
(added)
+++ incubator/tuscany/java/sca/modules/xsd/src/main/java/org/apache/tuscany/sca/xsd/XSDefinition.java
Mon May 26 17:08:32 2008
@@ -0,0 +1,103 @@
+/*
+ * 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.xsd;
+
+import java.net.URI;
+
+import javax.xml.namespace.QName;
+
+import org.apache.tuscany.sca.assembly.Base;
+import org.apache.ws.commons.schema.XmlSchema;
+import org.apache.ws.commons.schema.XmlSchemaCollection;
+import org.apache.ws.commons.schema.XmlSchemaElement;
+import org.apache.ws.commons.schema.XmlSchemaType;
+import org.w3c.dom.Document;
+
+/**
+ * Represents an XML Schema definition.
+ *
+ * @version $Rev: 633545 $ $Date: 2008-03-04 16:52:24 +0000 (Tue, 04 Mar 2008) $
+ */
+public interface XSDefinition extends Base {
+    XmlSchemaCollection getSchemaCollection();
+
+    void setSchemaCollection(XmlSchemaCollection schemaCollection);
+
+    /**
+     * Returns the XmlSchema definition model
+     * @return the XmlSchema definition model
+     */
+    XmlSchema getSchema();
+
+    /**
+     * Sets the XmlSchema definition model
+     * @param definition the XmlSchema definition model
+     */
+    void setSchema(XmlSchema definition);
+
+    /**
+     * Returns the namespace of this XmlSchema definition.
+     * @return the namespace of this XmlSchema definition
+     */
+    String getNamespace();
+
+    /**
+     * Sets the namespace of this XmlSchema definition.
+     * @param namespace the namespace of this XmlSchema definition
+     */
+    void setNamespace(String namespace);
+
+    /**
+     * Get the location of the XSD
+     * @return
+     */
+    URI getLocation();
+
+    /**
+     * Set the location of the XSD
+     * @param uri
+     */
+    void setLocation(URI uri);
+
+    /**
+     * Get the DOM representation of the XSD
+     * @return
+     */
+    Document getDocument();
+
+    /**
+     * Set the DOM representation of the XSD
+     * @param document
+     */
+    void setDocument(Document document);
+
+    /**
+     * Get the XSD element by QName
+     * @param name
+     * @return The XSD element
+     */
+    XmlSchemaElement getXmlSchemaElement(QName name);
+
+    /**
+     * @param name Get the XSD type by QName
+     * @return The XSD type
+     */
+    XmlSchemaType getXmlSchemaType(QName name);
+}

Added: incubator/tuscany/java/sca/modules/xsd/src/main/java/org/apache/tuscany/sca/xsd/impl/XSDFactoryImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/xsd/src/main/java/org/apache/tuscany/sca/xsd/impl/XSDFactoryImpl.java?rev=660340&view=auto
==============================================================================
--- incubator/tuscany/java/sca/modules/xsd/src/main/java/org/apache/tuscany/sca/xsd/impl/XSDFactoryImpl.java
(added)
+++ incubator/tuscany/java/sca/modules/xsd/src/main/java/org/apache/tuscany/sca/xsd/impl/XSDFactoryImpl.java
Mon May 26 17:08:32 2008
@@ -0,0 +1,35 @@
+/*
+ * 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.xsd.impl;
+
+import org.apache.tuscany.sca.xsd.XSDefinition;
+import org.apache.tuscany.sca.xsd.XSDFactory;
+
+/**
+ * A factory for XSD definitions
+ * 
+ * @version $Rev$ $Date$
+ */
+public abstract class XSDFactoryImpl implements XSDFactory {
+    
+    public XSDefinition createXSDefinition() {
+        return new XSDefinitionImpl();
+    }
+
+}

Added: incubator/tuscany/java/sca/modules/xsd/src/main/java/org/apache/tuscany/sca/xsd/impl/XSDefinitionImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/xsd/src/main/java/org/apache/tuscany/sca/xsd/impl/XSDefinitionImpl.java?rev=660340&view=auto
==============================================================================
--- incubator/tuscany/java/sca/modules/xsd/src/main/java/org/apache/tuscany/sca/xsd/impl/XSDefinitionImpl.java
(added)
+++ incubator/tuscany/java/sca/modules/xsd/src/main/java/org/apache/tuscany/sca/xsd/impl/XSDefinitionImpl.java
Mon May 26 17:08:32 2008
@@ -0,0 +1,222 @@
+/*
+ * 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.xsd.impl;
+
+import java.net.URI;
+import java.util.Iterator;
+
+import javax.xml.namespace.QName;
+
+import org.apache.tuscany.sca.xsd.XSDefinition;
+import org.apache.ws.commons.schema.XmlSchema;
+import org.apache.ws.commons.schema.XmlSchemaCollection;
+import org.apache.ws.commons.schema.XmlSchemaElement;
+import org.apache.ws.commons.schema.XmlSchemaImport;
+import org.apache.ws.commons.schema.XmlSchemaInclude;
+import org.apache.ws.commons.schema.XmlSchemaObject;
+import org.apache.ws.commons.schema.XmlSchemaType;
+import org.w3c.dom.Document;
+
+/**
+ * Represents a XML schema definition.
+ *
+ * @version $Rev: 582399 $ $Date: 2007-10-05 22:28:30 +0100 (Fri, 05 Oct 2007) $
+ */
+public class XSDefinitionImpl implements XSDefinition {
+    private XmlSchemaCollection schemaCollection = new XmlSchemaCollection();
+    private XmlSchema schema;
+    private String namespace;
+    private URI location;
+    private Document document;
+    private boolean unresolved;
+
+    public XSDefinitionImpl() {
+    }
+
+    public XmlSchema getSchema() {
+        return schema;
+    }
+
+    public void setSchema(XmlSchema definition) {
+        this.schema = definition;
+    }
+
+    public boolean isUnresolved() {
+        return unresolved;
+    }
+
+    public void setUnresolved(boolean undefined) {
+        this.unresolved = undefined;
+    }
+
+    public String getNamespace() {
+        if (isUnresolved()) {
+            return namespace;
+        } else if (schema != null) {
+            return schema.getTargetNamespace();
+        } else {
+            return namespace;
+        }
+    }
+
+    public void setNamespace(String namespace) {
+        if (!isUnresolved()) {
+            throw new IllegalStateException();
+        } else {
+            this.namespace = namespace;
+        }
+    }
+
+    /**
+     * @return the location
+     */
+    public URI getLocation() {
+        return location;
+    }
+
+    /**
+     * @param location the location to set
+     */
+    public void setLocation(URI location) {
+        this.location = location;
+    }
+
+    /**
+     * @return the document
+     */
+    public Document getDocument() {
+        return document;
+    }
+
+    /**
+     * @param document the document to set
+     */
+    public void setDocument(Document document) {
+        this.document = document;
+    }
+
+    /**
+     * @return the schemaCollection
+     */
+    public XmlSchemaCollection getSchemaCollection() {
+        return schemaCollection;
+    }
+
+    /**
+     * @param schemaCollection the schemaCollection to set
+     */
+    public void setSchemaCollection(XmlSchemaCollection schemaCollection) {
+        this.schemaCollection = schemaCollection;
+    }
+
+    /**
+     * @see java.lang.Object#hashCode()
+     */
+    @Override
+    public int hashCode() {
+        final int prime = 31;
+        int result = 1;
+        result = prime * result + ((location == null) ? 0 : location.hashCode());
+        result = prime * result + ((namespace == null) ? 0 : namespace.hashCode());
+        return result;
+    }
+
+    /**
+     * @see java.lang.Object#equals(java.lang.Object)
+     */
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj)
+            return true;
+        if (obj == null)
+            return false;
+        if (!(obj instanceof XSDefinitionImpl))
+            return false;
+        final XSDefinitionImpl other = (XSDefinitionImpl)obj;
+        if (location == null) {
+            if (other.location != null)
+                return false;
+        } else if (!location.equals(other.location))
+            return false;
+        if (namespace == null) {
+            if (other.namespace != null)
+                return false;
+        } else if (!namespace.equals(other.namespace))
+            return false;
+        return true;
+    }
+
+    public static <T extends XmlSchemaObject> T getXmlSchemaObject(XmlSchema schema,
QName name, Class<T> type) {
+        if (schema != null) {
+            XmlSchemaObject object = null;
+            if (type == XmlSchemaElement.class) {
+                object = schema.getElementByName(name);
+            } else if (type == XmlSchemaType.class) {
+                object = schema.getTypeByName(name);
+            }
+            if (object != null) {
+                return type.cast(object);
+            }
+            for (Iterator i = schema.getIncludes().getIterator(); i.hasNext();) {
+                XmlSchemaObject obj = (XmlSchemaObject)i.next();
+                XmlSchema ext = null;
+                if (obj instanceof XmlSchemaInclude) {
+                    ext = ((XmlSchemaInclude)obj).getSchema();
+                }
+                if (obj instanceof XmlSchemaImport) {
+                    ext = ((XmlSchemaImport)obj).getSchema();
+                }
+                object = getXmlSchemaObject(ext, name, type);
+                if (object != null) {
+                    return type.cast(object);
+                }
+            }
+        }
+        return null;
+    }
+
+    public XmlSchemaElement getXmlSchemaElement(QName name) {
+        if (schema != null) {
+            XmlSchemaElement element = getXmlSchemaObject(schema, name, XmlSchemaElement.class);
+            if (element != null) {
+                return element;
+            }
+        }
+
+        if (schemaCollection != null) {
+            return schemaCollection.getElementByQName(name);
+        }
+        return null;
+    }
+
+    public XmlSchemaType getXmlSchemaType(QName name) {
+        if (schema != null) {
+            XmlSchemaType type = getXmlSchemaObject(schema, name, XmlSchemaType.class);
+            if (type != null) {
+                return type;
+            }
+        }
+        if (schemaCollection != null) {
+            return schemaCollection.getTypeByQName(name);
+        }
+        return null;
+    }
+
+}

Added: incubator/tuscany/java/sca/modules/xsd/src/main/resources/META-INF/services/org.apache.tuscany.sca.xsd.XSDFactory
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/xsd/src/main/resources/META-INF/services/org.apache.tuscany.sca.xsd.XSDFactory?rev=660340&view=auto
==============================================================================
--- incubator/tuscany/java/sca/modules/xsd/src/main/resources/META-INF/services/org.apache.tuscany.sca.xsd.XSDFactory
(added)
+++ incubator/tuscany/java/sca/modules/xsd/src/main/resources/META-INF/services/org.apache.tuscany.sca.xsd.XSDFactory
Mon May 26 17:08:32 2008
@@ -0,0 +1,18 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+# 
+#   http://www.apache.org/licenses/LICENSE-2.0
+# 
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License. 
+
+org.apache.tuscany.sca.xsd.DefaultXSDFactory
\ No newline at end of file



Mime
View raw message