Added: 
tuscany/java/sca/modules/node-impl2/src/main/java/org/apache/tuscany/sca/workspace/processor/impl/ContributionInfoProcessor.java
URL: 
http://svn.apache.org/viewvc/tuscany/java/sca/modules/node-impl2/src/main/java/org/apache/tuscany/sca/workspace/processor/impl/ContributionInfoProcessor.java?rev=772526&view=auto
==============================================================================
--- 
tuscany/java/sca/modules/node-impl2/src/main/java/org/apache/tuscany/sca/workspace/processor/impl/ContributionInfoProcessor.java
 (added)
+++ 
tuscany/java/sca/modules/node-impl2/src/main/java/org/apache/tuscany/sca/workspace/processor/impl/ContributionInfoProcessor.java
 Thu May  7 07:07:11 2009
@@ -0,0 +1,227 @@
+/*
+ * 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.workspace.processor.impl;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URI;
+import java.net.URL;
+import java.net.URLConnection;
+import java.util.List;
+
+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.ContributionMetadata;
+import org.apache.tuscany.sca.contribution.DefaultExport;
+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.ExtensibleURLArtifactProcessor;
+import org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor;
+import org.apache.tuscany.sca.contribution.processor.URLArtifactProcessor;
+import 
org.apache.tuscany.sca.contribution.processor.URLArtifactProcessorExtensionPoint;
+import org.apache.tuscany.sca.contribution.resolver.ClassReference;
+import org.apache.tuscany.sca.contribution.resolver.DefaultModelResolver;
+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.contribution.scanner.ContributionScanner;
+import org.apache.tuscany.sca.core.ExtensionPointRegistry;
+import org.apache.tuscany.sca.core.FactoryExtensionPoint;
+import org.apache.tuscany.sca.monitor.Monitor;
+import 
org.apache.tuscany.sca.workspace.scanner.impl.DirectoryContributionScanner;
+import org.apache.tuscany.sca.workspace.scanner.impl.JarContributionScanner;
+
+/**
+ * URLArtifactProcessor that handles contribution files and returns a 
contribution
+ * info model.
+ *
+ * @version $Rev: 767701 $ $Date: 2009-04-22 23:49:55 +0100 (Wed, 22 Apr 2009) 
$
+ */
+public class ContributionInfoProcessor implements 
URLArtifactProcessor<Contribution>{
+    private ContributionFactory contributionFactory;
+    private ModelResolverExtensionPoint modelResolvers;
+    private FactoryExtensionPoint modelFactories;
+    private URLArtifactProcessorExtensionPoint artifactProcessors;
+    private URLArtifactProcessor<Object> artifactProcessor;
+    private StAXArtifactProcessor<Object> extensionProcessor;
+
+    public ContributionInfoProcessor(ExtensionPointRegistry extensionPoints, 
StAXArtifactProcessor<Object> extensionProcessor, Monitor monitor) {
+        this.modelFactories = 
extensionPoints.getExtensionPoint(FactoryExtensionPoint.class);
+        this.modelResolvers = 
extensionPoints.getExtensionPoint(ModelResolverExtensionPoint.class);
+        hackResolvers(modelResolvers);
+        URLArtifactProcessorExtensionPoint artifactProcessors = 
extensionPoints.getExtensionPoint(URLArtifactProcessorExtensionPoint.class);
+        this.artifactProcessors = artifactProcessors;
+        this.artifactProcessor = new 
ExtensibleURLArtifactProcessor(artifactProcessors, monitor);
+        this.extensionProcessor = extensionProcessor;
+        this.contributionFactory = 
modelFactories.getFactory(ContributionFactory.class);
+    }
+
+    public ContributionInfoProcessor(FactoryExtensionPoint modelFactories, 
ModelResolverExtensionPoint modelResolvers, URLArtifactProcessor<Object> 
artifactProcessor) {
+        this.modelFactories = modelFactories;
+        this.modelResolvers = modelResolvers;
+        hackResolvers(modelResolvers);
+        this.artifactProcessor = artifactProcessor;
+        this.contributionFactory = 
modelFactories.getFactory(ContributionFactory.class);
+    }
+
+    public String getArtifactType() {
+        return ".contribution/info";
+    }
+
+    public Class<Contribution> getModelType() {
+        return null;
+    }
+
+    public Contribution read(URL parentURL, URI contributionURI, URL 
contributionURL) throws ContributionReadException {
+
+        // Create contribution model
+        Contribution contribution = contributionFactory.createContribution();
+        contribution.setURI(contributionURI.toString());
+        contribution.setLocation(contributionURL.toString());
+        ModelResolver modelResolver = new 
ExtensibleModelResolver(contribution, modelResolvers, modelFactories);
+        contribution.setModelResolver(modelResolver);
+        contribution.setUnresolved(true);
+
+        // Create a contribution scanner
+        ContributionScanner scanner;
+        if ("file".equals(contributionURL.getProtocol()) && new 
File(contributionURL.getFile()).isDirectory()) {
+            scanner = new DirectoryContributionScanner();
+        } else {
+            scanner = new JarContributionScanner();
+        }
+
+        // Read generated and user sca-contribution.xml files
+        boolean contributionMetadata = false;
+        for (String path: new String[]{
+                                       
Contribution.SCA_CONTRIBUTION_GENERATED_META,
+                                       Contribution.SCA_CONTRIBUTION_META}) {
+            URL url = scanner.getArtifactURL(contributionURL, path);
+            try {
+                // Check if the file actually exists before trying to read it
+                URLConnection connection = url.openConnection();
+                connection.setUseCaches(false);
+                InputStream is = connection.getInputStream();
+                is.close();
+            } catch (IOException e) {
+                continue;
+            }
+            contributionMetadata = true;
+
+            // Read the sca-contribution.xml file
+            ContributionMetadata c = 
(ContributionMetadata)artifactProcessor.read(contributionURL, URI.create(path), 
url);
+            contribution.getImports().addAll(c.getImports());
+            contribution.getExports().addAll(c.getExports());
+            contribution.getDeployables().addAll(c.getDeployables());
+            contribution.getExtensions().addAll(c.getExtensions());
+            
contribution.getAttributeExtensions().addAll(c.getAttributeExtensions());
+        }
+
+        // If no sca-contribution.xml file was provided then consider
+        // all composites in the contribution as deployables, and also
+        // read any files that are explicitly asssigned artifact processors
+        // as they are likely to provide relevant metadata info
+        if (!contributionMetadata) {
+            List<String> artifactURIs;
+            try {
+                artifactURIs = scanner.getArtifacts(contributionURL);
+            } catch (ContributionReadException e) {
+                artifactURIs = null;
+            }
+            if (artifactURIs != null) {
+                for (String artifactURI: artifactURIs) {
+                    boolean read = false;
+                    if (artifactURI.endsWith(".composite")) {
+                        read = true;
+                    } else {
+                        int s= artifactURI.lastIndexOf("/");
+                        String fileName = artifactURI.substring(s + 1);
+                        if (artifactProcessors.getProcessor(fileName) != null) 
{
+                            read = true;
+                        }
+                    }
+                    if (read) {
+                        URL artifactURL = 
scanner.getArtifactURL(contributionURL, artifactURI);
+
+                        // Read each artifact
+                        Object model = artifactProcessor.read(contributionURL, 
URI.create(artifactURI), artifactURL);
+
+                        // In the absence of more info, consider all 
composites as deployable
+                        if (model instanceof Composite) {
+                            
contribution.getDeployables().add((Composite)model);
+                        }
+                    }
+                }
+            }
+
+            // Add default contribution import and export
+            DefaultImport defaultImport = 
contributionFactory.createDefaultImport();
+            defaultImport.setModelResolver(new DefaultModelResolver());
+            contribution.getImports().add(defaultImport);
+            DefaultExport defaultExport = 
contributionFactory.createDefaultExport();
+            contribution.getExports().add(defaultExport);
+        }
+
+        return contribution;
+    }
+
+    public void resolve(Contribution contribution, ModelResolver resolver) 
throws ContributionResolveException {
+
+        // Mark the contribution model resolved
+        ModelResolver contributionResolver = contribution.getModelResolver();
+        contribution.setUnresolved(false);
+        contributionResolver.addModel(contribution);
+
+        // Resolve imports and exports
+        for (Export export: contribution.getExports()) {
+            if (export instanceof DefaultExport) {
+
+                // Initialize the default export's resolver
+                export.setModelResolver(contributionResolver);
+
+            } else {
+                extensionProcessor.resolve(export, contributionResolver);
+            }
+        }
+        for (Import import_: contribution.getImports()) {
+            extensionProcessor.resolve(import_, contributionResolver);
+        }
+
+    }
+
+    /**
+     * FIXME Temporary hack for testing the ClassLoaderModelResolver.
+     *
+     * @param modelResolvers
+     */
+    private static void hackResolvers(ModelResolverExtensionPoint 
modelResolvers) {
+        Class<?> resolverClass = 
modelResolvers.getResolver(ClassReference.class);
+        if (resolverClass==null || 
!resolverClass.getName().equals("org.apache.tuscany.sca.contribution.java.impl.ClassLoaderModelResolver"))
 {
+            try {
+                Class<?> loaderResolverClass = 
Class.forName("org.apache.tuscany.sca.contribution.java.impl.ClassLoaderModelResolver",
 true, ContributionContentProcessor.class.getClassLoader());
+                modelResolvers.addResolver(ClassReference.class, (Class<? 
extends ModelResolver>)loaderResolverClass);
+            } catch (ClassNotFoundException e) {
+            }
+        }
+    }
+}

Added: 
tuscany/java/sca/modules/node-impl2/src/main/java/org/apache/tuscany/sca/workspace/scanner/impl/DirectoryContributionScanner.java
URL: 
http://svn.apache.org/viewvc/tuscany/java/sca/modules/node-impl2/src/main/java/org/apache/tuscany/sca/workspace/scanner/impl/DirectoryContributionScanner.java?rev=772526&view=auto
==============================================================================
--- 
tuscany/java/sca/modules/node-impl2/src/main/java/org/apache/tuscany/sca/workspace/scanner/impl/DirectoryContributionScanner.java
 (added)
+++ 
tuscany/java/sca/modules/node-impl2/src/main/java/org/apache/tuscany/sca/workspace/scanner/impl/DirectoryContributionScanner.java
 Thu May  7 07:07:11 2009
@@ -0,0 +1,107 @@
+/*
+ * 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.workspace.scanner.impl;
+
+import java.io.File;
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.tuscany.sca.contribution.processor.ContributionReadException;
+import org.apache.tuscany.sca.contribution.scanner.ContributionScanner;
+
+/**
+ * Folder contribution processor.
+ * 
+ * @version $Rev: 704156 $ $Date: 2008-10-13 17:31:59 +0100 (Mon, 13 Oct 2008) 
$
+ */
+public class DirectoryContributionScanner implements ContributionScanner {
+
+    public DirectoryContributionScanner() {
+    }
+
+    public String getContributionType() {
+        return "application/vnd.tuscany.folder";
+    }
+
+    public URL getArtifactURL(URL contributionURL, String artifact) throws 
ContributionReadException {
+        File directory = directory(contributionURL);
+        File file = new File(directory, artifact);
+        try {
+            return file.toURI().toURL();
+        } catch (MalformedURLException e) {
+            throw new ContributionReadException(e);
+        }
+    }
+
+    public List<String> getArtifacts(URL contributionURL) throws 
ContributionReadException {
+        File directory = directory(contributionURL);
+        List<String> artifacts = new ArrayList<String>();
+        try {
+            traverse(artifacts, directory, directory);
+        } catch (IOException e) {
+            throw new ContributionReadException(e);
+        }
+        return artifacts;
+    }
+
+    /**
+     * Recursively traverse a root directory
+     * 
+     * @param fileList
+     * @param file
+     * @param root
+     * @throws IOException
+     */
+    private static void traverse(List<String> fileList, File file, File root) 
throws IOException {
+        if (file.isFile()) {
+            fileList.add(root.toURI().relativize(file.toURI()).toString());
+        } else if (file.isDirectory()) {
+            String uri = root.toURI().relativize(file.toURI()).toString();
+            if (uri.endsWith("/")) {
+                uri = uri.substring(0, uri.length() - 1);
+            }
+            fileList.add(uri);
+            
+            File[] files = file.listFiles();
+            for (File f: files) {
+                if (!f.getName().startsWith(".")) {
+                    traverse(fileList, f, root);
+                }
+            }
+        }
+    }
+
+    private static File directory(URL url) throws ContributionReadException {
+        File file;
+        try {
+            file = new File(url.toURI());
+        } catch (URISyntaxException e) {
+            throw new ContributionReadException(e);
+        }
+        if (!file.exists() || !file.isDirectory()) {
+            throw new ContributionReadException(url.toString());
+        }
+        return file;
+    }
+}

Added: 
tuscany/java/sca/modules/node-impl2/src/main/java/org/apache/tuscany/sca/workspace/scanner/impl/JarContributionScanner.java
URL: 
http://svn.apache.org/viewvc/tuscany/java/sca/modules/node-impl2/src/main/java/org/apache/tuscany/sca/workspace/scanner/impl/JarContributionScanner.java?rev=772526&view=auto
==============================================================================
--- 
tuscany/java/sca/modules/node-impl2/src/main/java/org/apache/tuscany/sca/workspace/scanner/impl/JarContributionScanner.java
 (added)
+++ 
tuscany/java/sca/modules/node-impl2/src/main/java/org/apache/tuscany/sca/workspace/scanner/impl/JarContributionScanner.java
 Thu May  7 07:07:11 2009
@@ -0,0 +1,121 @@
+/*
+ * 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.workspace.scanner.impl;
+
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLConnection;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import java.util.jar.JarEntry;
+import java.util.jar.JarInputStream;
+
+import org.apache.tuscany.sca.contribution.processor.ContributionReadException;
+import org.apache.tuscany.sca.contribution.scanner.ContributionScanner;
+
+/**
+ * JAR Contribution processor.
+ * 
+ * @version $Rev: 704156 $ $Date: 2008-10-13 17:31:59 +0100 (Mon, 13 Oct 2008) 
$
+ */
+public class JarContributionScanner implements ContributionScanner {
+
+    public JarContributionScanner() {
+    }
+
+    public String getContributionType() {
+        return "application/x-compressed";
+    }
+
+    public URL getArtifactURL(URL contributionURL, String artifact) throws 
ContributionReadException {
+        try {
+            URL url;
+            if (contributionURL.toString().startsWith("jar:")) {
+                url = new URL(contributionURL, artifact.toString());
+            } else {
+                url = new URL("jar:" + contributionURL.toExternalForm() + "!/" 
+ artifact);
+            }
+            return url;
+        } catch (MalformedURLException e) {
+            throw new ContributionReadException(e);
+        }
+    }
+
+    public List<String> getArtifacts(URL contributionURL) throws 
ContributionReadException {
+
+        // Assume the URL references a JAR file
+        try {
+            URLConnection connection = contributionURL.openConnection();
+            connection.setUseCaches(false);
+            JarInputStream jar = new 
JarInputStream(connection.getInputStream());
+            try {
+                Set<String> names = new HashSet<String>();
+                while (true) {
+                    JarEntry entry = jar.getNextJarEntry();
+                    if (entry == null) {
+                        // EOF
+                        break;
+                    }
+
+                    String name = entry.getName(); 
+                    if (name.length() != 0 && !name.startsWith(".")) {
+                        
+                        // Trim trailing /
+                        if (name.endsWith("/")) {
+                            name = name.substring(0, name.length() - 1);
+                        }
+
+                        // Add the entry name
+                        if (!names.contains(name)) {
+                            names.add(name);
+                            
+                            // Add parent folder names to the list too
+                            for (;;) {
+                                int s = name.lastIndexOf('/');
+                                if (s == -1) {
+                                    name = "";
+                                } else {
+                                    name = name.substring(0, s);
+                                }
+                                if (name.length() != 0 && 
!names.contains(name)) {
+                                    names.add(name);
+                                } else {
+                                    break;
+                                }
+                            }
+                        }
+                    }
+                }
+                
+                // Return list of URIs
+                List<String> artifacts = new ArrayList<String>(names);
+                return artifacts;
+                
+            } finally {
+                jar.close();
+            }
+        } catch (IOException e) {
+            throw new ContributionReadException(e);
+        }
+    }
+}

Added: 
tuscany/java/sca/modules/node-impl2/src/main/resources/META-INF/services/org.apache.tuscany.sca.node.NodeFactory
URL: 
http://svn.apache.org/viewvc/tuscany/java/sca/modules/node-impl2/src/main/resources/META-INF/services/org.apache.tuscany.sca.node.NodeFactory?rev=772526&view=auto
==============================================================================
--- 
tuscany/java/sca/modules/node-impl2/src/main/resources/META-INF/services/org.apache.tuscany.sca.node.NodeFactory
 (added)
+++ 
tuscany/java/sca/modules/node-impl2/src/main/resources/META-INF/services/org.apache.tuscany.sca.node.NodeFactory
 Thu May  7 07:07:11 2009
@@ -0,0 +1,17 @@
+# 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.node.impl.NodeFactoryImpl
\ No newline at end of file

Added: 
tuscany/java/sca/modules/node-impl2/src/main/resources/META-INF/services/org.oasisopen.sca.client.SCAClientFactory
URL: 
http://svn.apache.org/viewvc/tuscany/java/sca/modules/node-impl2/src/main/resources/META-INF/services/org.oasisopen.sca.client.SCAClientFactory?rev=772526&view=auto
==============================================================================
--- 
tuscany/java/sca/modules/node-impl2/src/main/resources/META-INF/services/org.oasisopen.sca.client.SCAClientFactory
 (added)
+++ 
tuscany/java/sca/modules/node-impl2/src/main/resources/META-INF/services/org.oasisopen.sca.client.SCAClientFactory
 Thu May  7 07:07:11 2009
@@ -0,0 +1 @@
+org.apache.tuscany.sca.node.impl.SCAClientFactoryImpl

Added: tuscany/java/sca/modules/node-impl2/src/test/java/hello/HelloWorld.java
URL: 
http://svn.apache.org/viewvc/tuscany/java/sca/modules/node-impl2/src/test/java/hello/HelloWorld.java?rev=772526&view=auto
==============================================================================
--- tuscany/java/sca/modules/node-impl2/src/test/java/hello/HelloWorld.java 
(added)
+++ tuscany/java/sca/modules/node-impl2/src/test/java/hello/HelloWorld.java Thu 
May  7 07:07:11 2009
@@ -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 hello;
+
+import org.oasisopen.sca.annotation.Remotable;
+
+/**
+ * HelloWorld interface
+ */
+...@remotable
+public interface HelloWorld {
+    String hello(String name);
+}

Added: 
tuscany/java/sca/modules/node-impl2/src/test/java/hello/HelloWorldImpl.java
URL: 
http://svn.apache.org/viewvc/tuscany/java/sca/modules/node-impl2/src/test/java/hello/HelloWorldImpl.java?rev=772526&view=auto
==============================================================================
--- tuscany/java/sca/modules/node-impl2/src/test/java/hello/HelloWorldImpl.java 
(added)
+++ tuscany/java/sca/modules/node-impl2/src/test/java/hello/HelloWorldImpl.java 
Thu May  7 07:07:11 2009
@@ -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 hello;
+
+/**
+ * HelloWorldImpl
+ */
+public class HelloWorldImpl implements HelloWorld {
+    public String hello(String name) {
+        System.out.println("Hello: " + name);
+        return "Hello, " + name;
+    }
+}

Added: 
tuscany/java/sca/modules/node-impl2/src/test/java/org/apache/tuscany/sca/node/impl/NodeImplTestCase.java
URL: 
http://svn.apache.org/viewvc/tuscany/java/sca/modules/node-impl2/src/test/java/org/apache/tuscany/sca/node/impl/NodeImplTestCase.java?rev=772526&view=auto
==============================================================================
--- 
tuscany/java/sca/modules/node-impl2/src/test/java/org/apache/tuscany/sca/node/impl/NodeImplTestCase.java
 (added)
+++ 
tuscany/java/sca/modules/node-impl2/src/test/java/org/apache/tuscany/sca/node/impl/NodeImplTestCase.java
 Thu May  7 07:07:11 2009
@@ -0,0 +1,82 @@
+/*
+ * 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.node.impl;
+
+import hello.HelloWorld;
+
+import java.io.File;
+
+import org.apache.tuscany.sca.node.Contribution;
+import org.apache.tuscany.sca.node.Node;
+import org.apache.tuscany.sca.node.NodeFactory;
+import org.junit.Assert;
+import org.junit.Test;
+
+/**
+ * Test case for NodeImpl
+ */
+public class NodeImplTestCase {
+    private static String composite =
+        "<composite 
xmlns=\"http://docs.oasis-open.org/ns/opencsa/sca/200903\""; + " 
xmlns:tuscany=\"http://tuscany.apache.org/xmlns/sca/1.1\"";
+            + " targetNamespace=\"http://sample/composite\"";
+            + " xmlns:sc=\"http://sample/composite\"";
+            + " name=\"HelloWorld2\">"
+            + " <component name=\"HelloWorld2\">"
+            + " <implementation.java class=\"hello.HelloWorldImpl\"/>"
+            + " </component>"
+            + " </composite>";
+
+    @Test
+    public void testNodeWithCompositeContent() {
+        NodeFactory factory = new NodeFactoryImpl();
+        Contribution contribution = new Contribution("c1", new 
File("target/test-classes").toURI().toString());
+        String compositeURI = "HelloWorld.composite";
+//        Node node = factory.createNode(compositeURI, composite, 
contribution);
+//        testNode2(node);
+    }
+    
+//    @Test
+//    public void testNodeWithRelativeCompositeURI() {
+//        NodeFactory factory = new NodeFactoryImpl();
+//        Contribution contribution = new Contribution("c1", new 
File("target/test-classes").toURI().toString());
+//        String compositeURI = "HelloWorld.composite";
+//        Node node = factory.createNode(compositeURI, contribution);
+//        testNode(node);
+//    }
+//
+//    @Test
+//    public void testDefaultNode() {
+//        testNode(new NodeFactoryImpl().createNode());
+//    }
+//    
+//    private void testNode(Node node) {
+//        node.start();
+//        HelloWorld hw = node.getService(HelloWorld.class, "HelloWorld");
+//        Assert.assertEquals("Hello, Node", hw.hello("Node"));
+//        node.stop();
+//    }
+        
+    private void testNode2(Node node) {
+        node.start();
+        HelloWorld hw = node.getService(HelloWorld.class, "HelloWorld2");
+        Assert.assertEquals("Hello, Node", hw.hello("Node"));
+        node.stop();
+    }
+}

Added: 
tuscany/java/sca/modules/node-impl2/src/test/resources/HelloWorld.composite
URL: 
http://svn.apache.org/viewvc/tuscany/java/sca/modules/node-impl2/src/test/resources/HelloWorld.composite?rev=772526&view=auto
==============================================================================
--- tuscany/java/sca/modules/node-impl2/src/test/resources/HelloWorld.composite 
(added)
+++ tuscany/java/sca/modules/node-impl2/src/test/resources/HelloWorld.composite 
Thu May  7 07:07:11 2009
@@ -0,0 +1,30 @@
+<?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.    
+-->
+<composite xmlns="http://docs.oasis-open.org/ns/opencsa/sca/200903";
+    xmlns:tuscany="http://docs.oasis-open.org/ns/opencsa/sca/200903";
+       targetNamespace="http://sample/composite";
+       xmlns:sc="http://sample/composite";
+       name="HelloWorld">
+
+    <component name="HelloWorld">
+        <implementation.java class="hello.HelloWorldImpl"/>
+    </component>
+
+</composite>

Added: 
tuscany/java/sca/modules/node-impl2/src/test/resources/META-INF/sca-contribution.xml
URL: 
http://svn.apache.org/viewvc/tuscany/java/sca/modules/node-impl2/src/test/resources/META-INF/sca-contribution.xml?rev=772526&view=auto
==============================================================================
--- 
tuscany/java/sca/modules/node-impl2/src/test/resources/META-INF/sca-contribution.xml
 (added)
+++ 
tuscany/java/sca/modules/node-impl2/src/test/resources/META-INF/sca-contribution.xml
 Thu May  7 07:07:11 2009
@@ -0,0 +1,24 @@
+<?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.    
+-->
+
+<contribution xmlns="http://docs.oasis-open.org/ns/opencsa/sca/200903"; 
+              xmlns:sc="http://sample/composite";>
+    <deployable composite="sc:HelloWorld" />
+</contribution>


Reply via email to