Author: jkaputin
Date: Thu Sep 29 10:22:14 2005
New Revision: 292485

URL: http://svn.apache.org/viewcvs?rev=292485&view=rev
Log:
Work in progress on building the component model from

the xml representation. ElementDeclarations in progress.

Added:
    
incubator/woden/java/src/org/apache/woden/internal/util/ComponentModelBuilder.java

Added: 
incubator/woden/java/src/org/apache/woden/internal/util/ComponentModelBuilder.java
URL: 
http://svn.apache.org/viewcvs/incubator/woden/java/src/org/apache/woden/internal/util/ComponentModelBuilder.java?rev=292485&view=auto
==============================================================================
--- 
incubator/woden/java/src/org/apache/woden/internal/util/ComponentModelBuilder.java
 (added)
+++ 
incubator/woden/java/src/org/apache/woden/internal/util/ComponentModelBuilder.java
 Thu Sep 29 10:22:14 2005
@@ -0,0 +1,171 @@
+/*

+ * Copyright 2005 Apached Software Foundation 

+ *

+ * 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.

+ */

+package org.apache.woden.internal.util;

+

+import java.util.Collection;

+import java.util.Iterator;

+import java.util.List;

+import java.util.Vector;

+

+import org.apache.woden.internal.wsdl20.DescriptionImpl;

+import org.apache.woden.schema.Schema;

+import org.apache.woden.schema.SchemaImport;

+import org.apache.woden.wsdl20.Description;

+import org.apache.woden.wsdl20.xml.DescriptionElement;

+import org.apache.woden.wsdl20.xml.TypesElement;

+import org.apache.xerces.xs.XSConstants;

+import org.apache.xerces.xs.XSElementDeclaration;

+import org.apache.xerces.xs.XSModel;

+import org.apache.xerces.xs.XSNamedMap;

+

+/**

+ * Converts the xml representation of a WSDL document to the WSDL

+ * component model representation defined by the W3C WSDL 2.0 spec.

+ * The xml model is contained within a DescriptionElement object.

+ * The component model is contained within a Description object.

+ * 

+ * @author [EMAIL PROTECTED]

+ */

+public class ComponentModelBuilder {

+    

+    private DescriptionElement fDescElement;

+    private Description fDescComponent;

+    

+    //TODO support for other (non-Schema) type systems

+    

+    //Collection of Schema objects

+    private List fInScopeSchemas = new Vector();

+    

+    //Collection of schema target namespace Strings

+    private List fInScopeSchemaNamespaces = new Vector();

+    

+    /*

+     * Takes a DescriptionElement and converts its WSDL XML model

+     * to a WSDL component model returned as a Description.

+     */

+    public Description xmlToComponent(DescriptionElement descElement)

+    {

+        fDescElement = descElement;

+        fDescComponent = new DescriptionImpl();

+        

+        //TODO conversion logic follows

+        

+        collectImportedWsdl();

+        collectInScopeSchemas();

+        buildElementDeclarations();

+        buildTypeDefinitions();

+        

+        return fDescComponent;

+    }

+    

+    /*

+     * Navigate the wsdl imports and collect all imported DescriptionElements.

+     */

+    private void collectImportedWsdl()

+    {

+    }

+

+    /*

+     * Navigate the inlined and imported schemas and collect all schemas and

+     * schema namespaces that are in scope (i.e. visible by the WSDL according

+     * to the W3C WSDL 2.0 spec).

+     */

+    private void collectInScopeSchemas() 

+    {

+        //TODO schemas inlined in wsdl:imported docs

+        

+        //TODO ensure only schemas and schema namespaces in scope per

+        //W3C WSDL 2.0 spec are collected.

+        

+        TypesElement types = fDescElement.getTypesElement();

+        

+        Schema s = null;

+        SchemaImport si = null;

+        

+        //collect all inlined schemas

+        Collection schemaArrays = types.getSchemas().values();

+        Iterator sIterator = schemaArrays.iterator();

+        while(sIterator.hasNext())

+        {

+            Schema[] schemaArray = (Schema[])sIterator.next();

+            for(int i=0; i < schemaArray.length; i++)

+            {

+                s = schemaArray[i];

+                fInScopeSchemas.add(s);

+                fInScopeSchemaNamespaces.add(s.getTargetNamespace());

+            }

+        }

+        

+        //collect all imported schemas

+        Collection schemaImportArrays = types.getSchemaImports().values();

+        Iterator siIterator = schemaImportArrays.iterator();

+        while(siIterator.hasNext())

+        {

+            SchemaImport[] schemaImportArray = 
(SchemaImport[])siIterator.next();

+            for(int i=0; i < schemaImportArray.length; i++)

+            {

+                si = schemaImportArray[i];

+                fInScopeSchemaNamespaces.add(si.getNamespace());

+                s = si.getSchema();

+                if(s != null) {

+                    fInScopeSchemas.add(s);

+                }

+            }

+        }

+        

+        //We now have a 'flattened' collection of all inlined and imported 

+        //schemas (i.e. as XSModel objects) and a collection of the inlined

+        //and imported schema namespace Strings (i.e. the in-scope namespaces).

+        //These can now be used to extract the in-scope element declarations 

+        //and type definitions.

+        

+    }

+

+    /*

+     * Extract from the collections of in-scope schemas and schema namespaces

+     * the element declarations.

+     */

+    private void buildElementDeclarations()

+    {

+        Schema schema = null;

+        XSModel xsModel = null;

+        List elementDeclarations = new Vector();

+        

+        Iterator i = fInScopeSchemas.iterator();

+        while(i.hasNext())

+        {

+            schema = (Schema)i.next();

+            xsModel = schema.getSchemaContent();

+            

+            XSNamedMap xsNamedMap = 

+                xsModel.getComponents(XSConstants.ELEMENT_DECLARATION);

+          

+            //TODO w.i.p.

+        }

+        

+    }

+        

+    /*

+     * Extract from the collections of in-scope schemas and schema namespaces

+     * the type definitions.

+     */

+

+    private void buildTypeDefinitions()

+    {

+        

+    }

+    

+}




---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to