You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by js...@apache.org on 2008/02/26 17:55:00 UTC

svn commit: r631293 - in /incubator/tuscany/java/sca/modules/contribution-xml/src/main/java/org/apache/tuscany/sca/contribution/xml: ContributionDocumentProcessor.java ContributionModelResolver.java ContributionProcessor.java

Author: jsdelfino
Date: Tue Feb 26 08:54:58 2008
New Revision: 631293

URL: http://svn.apache.org/viewvc?rev=631293&view=rev
Log:
Implementations of contribution document processor, artifact processor and resolver in line with what we do for all other artifact types.

Added:
    incubator/tuscany/java/sca/modules/contribution-xml/src/main/java/org/apache/tuscany/sca/contribution/xml/ContributionDocumentProcessor.java   (with props)
    incubator/tuscany/java/sca/modules/contribution-xml/src/main/java/org/apache/tuscany/sca/contribution/xml/ContributionModelResolver.java   (with props)
    incubator/tuscany/java/sca/modules/contribution-xml/src/main/java/org/apache/tuscany/sca/contribution/xml/ContributionProcessor.java   (with props)

Added: incubator/tuscany/java/sca/modules/contribution-xml/src/main/java/org/apache/tuscany/sca/contribution/xml/ContributionDocumentProcessor.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/contribution-xml/src/main/java/org/apache/tuscany/sca/contribution/xml/ContributionDocumentProcessor.java?rev=631293&view=auto
==============================================================================
--- incubator/tuscany/java/sca/modules/contribution-xml/src/main/java/org/apache/tuscany/sca/contribution/xml/ContributionDocumentProcessor.java (added)
+++ incubator/tuscany/java/sca/modules/contribution-xml/src/main/java/org/apache/tuscany/sca/contribution/xml/ContributionDocumentProcessor.java Tue Feb 26 08:54:58 2008
@@ -0,0 +1,97 @@
+/*
+ * 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.contribution.xml;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URI;
+import java.net.URL;
+
+import javax.xml.stream.XMLInputFactory;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamReader;
+
+import org.apache.tuscany.sca.contribution.Contribution;
+import org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor;
+import org.apache.tuscany.sca.contribution.processor.URLArtifactProcessor;
+import org.apache.tuscany.sca.contribution.resolver.ModelResolver;
+import org.apache.tuscany.sca.contribution.service.ContributionReadException;
+import org.apache.tuscany.sca.contribution.service.ContributionResolveException;
+
+/**
+ * URLArtifactProcessor that handles contribution.xml files.
+ * 
+ * @version $Rev$ $Date$
+ */
+public class ContributionDocumentProcessor implements URLArtifactProcessor<Contribution>{
+    protected final StAXArtifactProcessor staxProcessor;
+    protected final XMLInputFactory inputFactory;
+
+    public ContributionDocumentProcessor(StAXArtifactProcessor staxProcessor, XMLInputFactory inputFactory) {
+        super();
+        this.staxProcessor = staxProcessor; 
+        this.inputFactory = inputFactory;
+    }
+    
+    public String getArtifactType() {
+        return null;
+    }
+    
+    public Class<Contribution> getModelType() {
+        return Contribution.class;
+    }
+    
+    public Contribution read(URL contributionURL, URI uri, URL url) throws ContributionReadException {
+        InputStream urlStream = null;
+        try {
+            
+            // Create a stream reader
+            urlStream = url.openStream();
+            XMLStreamReader reader = inputFactory.createXMLStreamReader(url.toString(), urlStream);
+            reader.nextTag();
+            
+            // Read the composite model
+            Contribution contribution = (Contribution)staxProcessor.read(reader);
+            if (contribution != null) {
+                contribution.setURI(uri.toString());
+            }
+
+            return contribution;
+            
+        } catch (XMLStreamException e) {
+            throw new ContributionReadException(e);
+        } catch (IOException e) {
+            throw new ContributionReadException(e);
+        } finally {
+            try {
+                if (urlStream != null) {
+                    urlStream.close();
+                    urlStream = null;
+                }
+            } catch (IOException ioe) {
+                //ignore
+            }
+        }
+    }
+    
+    public void resolve(Contribution contribution, ModelResolver resolver) throws ContributionResolveException {
+        staxProcessor.resolve(contribution, resolver);
+    }
+
+}

Propchange: incubator/tuscany/java/sca/modules/contribution-xml/src/main/java/org/apache/tuscany/sca/contribution/xml/ContributionDocumentProcessor.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/modules/contribution-xml/src/main/java/org/apache/tuscany/sca/contribution/xml/ContributionDocumentProcessor.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: incubator/tuscany/java/sca/modules/contribution-xml/src/main/java/org/apache/tuscany/sca/contribution/xml/ContributionModelResolver.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/contribution-xml/src/main/java/org/apache/tuscany/sca/contribution/xml/ContributionModelResolver.java?rev=631293&view=auto
==============================================================================
--- incubator/tuscany/java/sca/modules/contribution-xml/src/main/java/org/apache/tuscany/sca/contribution/xml/ContributionModelResolver.java (added)
+++ incubator/tuscany/java/sca/modules/contribution-xml/src/main/java/org/apache/tuscany/sca/contribution/xml/ContributionModelResolver.java Tue Feb 26 08:54:58 2008
@@ -0,0 +1,61 @@
+/*
+ * 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.contribution.xml;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.tuscany.sca.contribution.Contribution;
+import org.apache.tuscany.sca.contribution.ModelFactoryExtensionPoint;
+import org.apache.tuscany.sca.contribution.resolver.ModelResolver;
+
+/**
+ * A Model Resolver for Contribution models.
+ *
+ * @version $Rev$ $Date$
+ */
+public class ContributionModelResolver implements ModelResolver {
+
+    private Map<String, Contribution> map = new HashMap<String, Contribution>();
+    
+    public ContributionModelResolver(ModelFactoryExtensionPoint modelFactories) {
+    }
+
+    public void addModel(Object resolved) {
+        Contribution contribution = (Contribution)resolved;
+        map.put(contribution.getURI(), contribution);
+    }
+    
+    public Object removeModel(Object resolved) {
+        return map.remove(((Contribution)resolved).getURI());
+    }
+    
+    public <T> T resolveModel(Class<T> modelClass, T unresolved) {
+        
+        // Lookup a contribution for the given URI
+        String uri = ((Contribution)unresolved).getURI();
+        Contribution resolved = (Contribution) map.get(uri);
+        if (resolved != null) {
+            return modelClass.cast(resolved);
+        }
+        return (T)unresolved;
+    }
+    
+}

Propchange: incubator/tuscany/java/sca/modules/contribution-xml/src/main/java/org/apache/tuscany/sca/contribution/xml/ContributionModelResolver.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/modules/contribution-xml/src/main/java/org/apache/tuscany/sca/contribution/xml/ContributionModelResolver.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: incubator/tuscany/java/sca/modules/contribution-xml/src/main/java/org/apache/tuscany/sca/contribution/xml/ContributionProcessor.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/contribution-xml/src/main/java/org/apache/tuscany/sca/contribution/xml/ContributionProcessor.java?rev=631293&view=auto
==============================================================================
--- incubator/tuscany/java/sca/modules/contribution-xml/src/main/java/org/apache/tuscany/sca/contribution/xml/ContributionProcessor.java (added)
+++ incubator/tuscany/java/sca/modules/contribution-xml/src/main/java/org/apache/tuscany/sca/contribution/xml/ContributionProcessor.java Tue Feb 26 08:54:58 2008
@@ -0,0 +1,164 @@
+/*
+ * 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.contribution.xml;
+
+import static javax.xml.stream.XMLStreamConstants.START_ELEMENT;
+
+import javax.xml.namespace.QName;
+import javax.xml.stream.XMLStreamConstants;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamReader;
+import javax.xml.stream.XMLStreamWriter;
+
+import org.apache.tuscany.sca.assembly.AssemblyFactory;
+import org.apache.tuscany.sca.assembly.Composite;
+import org.apache.tuscany.sca.contribution.Contribution;
+import org.apache.tuscany.sca.contribution.ContributionFactory;
+import org.apache.tuscany.sca.contribution.Export;
+import org.apache.tuscany.sca.contribution.Import;
+import org.apache.tuscany.sca.contribution.processor.BaseStAXArtifactProcessor;
+import org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor;
+import org.apache.tuscany.sca.contribution.resolver.ModelResolver;
+import org.apache.tuscany.sca.contribution.service.ContributionReadException;
+import org.apache.tuscany.sca.contribution.service.ContributionResolveException;
+import org.apache.tuscany.sca.contribution.service.ContributionWriteException;
+
+/**
+ * Processor for contribution metadata
+ * 
+ * @version $Rev$ $Date$
+ */
+public class ContributionProcessor extends BaseStAXArtifactProcessor implements StAXArtifactProcessor<Contribution> {
+    
+    private static final String SCA10_NS = "http://www.osoa.org/xmlns/sca/1.0";
+    
+    private static final QName CONTRIBUTION_QNAME = new QName(SCA10_NS, "contribution");
+    private static final QName DEPLOYABLE_QNAME = new QName(SCA10_NS, "deployable");
+    
+    private final AssemblyFactory assemblyFactory;
+    private final ContributionFactory contributionFactory;
+    
+    private final StAXArtifactProcessor<Object> extensionProcessor;
+
+    public ContributionProcessor(AssemblyFactory assemblyFactory, ContributionFactory contributionFactory, StAXArtifactProcessor<Object> extensionProcessor) {
+        this.assemblyFactory = assemblyFactory;
+        this.contributionFactory = contributionFactory;
+        this.extensionProcessor = extensionProcessor;
+    }
+    
+    
+    public QName getArtifactType() {
+        return CONTRIBUTION_QNAME;
+    }
+
+    public Class<Contribution> getModelType() {
+        return Contribution.class;
+    }
+
+    public Contribution read(XMLStreamReader reader) throws ContributionReadException, XMLStreamException {
+        Contribution contribution = null;
+        QName name = null;
+        
+        while (reader.hasNext()) {
+            int event = reader.getEventType();
+            switch (event) {
+                case START_ELEMENT:
+                    name = reader.getName();
+                    
+                    if (CONTRIBUTION_QNAME.equals(name)) {
+
+                        // Read <contribution>
+                        contribution = this.contributionFactory.createContribution();
+                        
+                    } else if (DEPLOYABLE_QNAME.equals(name)) {
+                        
+                        
+                        // Read <deployable>
+                        QName compositeName = getQName(reader, "composite");
+                        if (compositeName == null) {
+                            throw new ContributionReadException("Attribute 'composite' is missing");
+                        }
+
+                        if (contribution != null) {
+                            Composite composite = assemblyFactory.createComposite();
+                            composite.setName(compositeName);
+                            composite.setUnresolved(true);
+                            contribution.getDeployables().add(composite);
+                            
+                        }
+                    } else{
+
+                        // Read an extension element
+                        Object extension = extensionProcessor.read(reader);
+                        if (extension != null && contribution != null) {
+                            if (extension instanceof Import) {
+                                contribution.getImports().add((Import)extension);
+                            } else if (extension instanceof Export) {
+                                contribution.getExports().add((Export)extension);
+                            }
+                        }
+                    }
+                    break;
+                    
+                case XMLStreamConstants.END_ELEMENT:
+                    if (CONTRIBUTION_QNAME.equals(reader.getName())) {
+                        return contribution;
+                    }
+                    break;        
+            }
+            
+            //Read the next element
+            if (reader.hasNext()) {
+                reader.next();
+            }
+        }
+        
+        return contribution;
+    }
+
+    public void write(Contribution contribution, XMLStreamWriter writer) throws ContributionWriteException, XMLStreamException {
+        
+        // Write <contribution>
+        writeStartDocument(writer, CONTRIBUTION_QNAME.getNamespaceURI(), CONTRIBUTION_QNAME.getLocalPart());
+
+        // Write <import>
+        for (Import imp: contribution.getImports()) {
+            extensionProcessor.write(imp, writer);
+        }
+        
+        // Write <export>
+        for (Export export: contribution.getExports()) {
+            extensionProcessor.write(export, writer);
+        }
+    
+        // Write <deployable>
+        for (Composite deployable: contribution.getDeployables()) {
+            writeStart(writer, DEPLOYABLE_QNAME.getNamespaceURI(), DEPLOYABLE_QNAME.getLocalPart(),
+                       new XAttr("composite", deployable.getName()));
+            writeEnd(writer);
+        }
+        
+        writeEndDocument(writer);
+    }
+
+    public void resolve(Contribution model, ModelResolver resolver) throws ContributionResolveException {
+        //FIXME Add code to resolve imports / exports here using
+        // the given model resolver
+    }
+}

Propchange: incubator/tuscany/java/sca/modules/contribution-xml/src/main/java/org/apache/tuscany/sca/contribution/xml/ContributionProcessor.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/modules/contribution-xml/src/main/java/org/apache/tuscany/sca/contribution/xml/ContributionProcessor.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date



---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-commits-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-commits-help@ws.apache.org