Modified: 
incubator/tuscany/java/sca/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/SCANodeImpl.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/SCANodeImpl.java?rev=597163&r1=597162&r2=597163&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/SCANodeImpl.java
 (original)
+++ 
incubator/tuscany/java/sca/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/SCANodeImpl.java
 Wed Nov 21 09:54:04 2007
@@ -189,6 +189,8 @@
             // make the node available to the model
             // this causes the runtime to start registering binding-sca 
service endpoints
             // with the domain proxy
+            // TBD - This code is due to be pulled out and combined with the 
register and 
+            //       resolution code that appears in this class
             ModelFactoryExtensionPoint factories = 
nodeRuntime.getExtensionPointRegistry().getExtensionPoint(ModelFactoryExtensionPoint.class);
             nodeFactory = new NodeFactoryImpl(this);
             factories.addFactory(nodeFactory); 
@@ -317,95 +319,76 @@
     }
     
     public void addContribution(String contributionURI, URL contributionURL, 
ClassLoader contributionClassLoader ) throws NodeException {
-       try {            
-            if (contributionURL != null) {
-                ModelResolver modelResolver = null;
-                
-                // if the contribution is to be resolved using a separate 
class loader
-                // then create a new model resolver
-                if (contributionClassLoader != null)  {
-                    modelResolver = new 
ModelResolverImpl(contributionClassLoader);
-                }
-                
-                // Add the contribution to the node
-                ContributionService contributionService = 
nodeRuntime.getContributionService();
-                Contribution contribution = 
contributionService.contribute(contributionURI, 
-                                                                           
contributionURL, 
-                                                                           
modelResolver, 
-                                                                           
false);
+        
+        if (nodeStarted){
+            throw new NodeException("Can't add contribution " + 
contributionURI + " when the node is running. Call stop() on the node first");
+        }
+       
+        if (contributionURI == null){
+            throw new NodeException("Contribution URI cannot be null");
+        }
+        
+        if (contributionURL == null){
+            throw new NodeException("Contribution URL cannot be null");
+        }
+        
+        if (contributions.containsKey(contributionURI)) {
+            throw new NodeException("Contribution " + contributionURI + " has 
already been added");
+        }
+        
+        try {          
+            ModelResolver modelResolver = null;
+            
+            // if the contribution is to be resolved using a separate class 
loader
+            // then create a new model resolver
+            if (contributionClassLoader != null)  {
+                modelResolver = new ModelResolverImpl(contributionClassLoader);
+            }
+            
+            // Add the contribution to the node
+            ContributionService contributionService = 
nodeRuntime.getContributionService();
+            Contribution contribution = 
contributionService.contribute(contributionURI, 
+                                                                       
contributionURL, 
+                                                                       
modelResolver, 
+                                                                       false);
+            
+            // remember the contribution
+            contributions.put(contributionURI, contribution);
                 
-                // remember the contribution
-                contributions.put(contributionURI, contribution);
-                    
-                // remember all the composites that have been found
-                for (DeployedArtifact artifact : contribution.getArtifacts()) {
-                    if (artifact.getModel() instanceof Composite) {
-                        Composite composite = (Composite)artifact.getModel();
-                        composites.put(composite.getName(), composite);
-                        compositeFiles.put(composite.getURI(), composite);
-                    }
+            // remember all the composites that have been found
+            for (DeployedArtifact artifact : contribution.getArtifacts()) {
+                if (artifact.getModel() instanceof Composite) {
+                    Composite composite = (Composite)artifact.getModel();
+                    composites.put(composite.getName(), composite);
+                    compositeFiles.put(composite.getURI(), composite);
                 }
-
-                // place all the deployable composites into the node level 
composite
-                for (Composite composite : contribution.getDeployables()) {
-                    nodeComposite.getIncludes().add(composite);
-                }  
-                
-                // add the contribution to the domain. It will generally 
already be there
-                // unless the contribution has been added to the node itself. 
-                ((SCADomainProxyImpl)scaDomain).registerContribution(nodeURI, 
contributionURI, contributionURL.toExternalForm());                  
-                
-            } else {
-                    throw new NodeException("Contribution " + contributionURL 
+ " not found");
-            }  
+            } 
             
+            // add the contribution to the domain. It will generally already 
be there
+            // unless the contribution has been added to the node itself. 
+            ((SCADomainProxyImpl)scaDomain).registerContribution(nodeURI, 
contributionURI, contributionURL.toExternalForm());                  
+        
         } catch (Exception ex) {
             throw new NodeException(ex);
         }        
     }
 
-    public void startContribution(String contributionURI) throws NodeException 
{
-        try {
-
-            Contribution contribution = contributions.get(contributionURI);
-            
-            if (contribution != null){
-                for (Composite composite : contribution.getDeployables()) {
-                        startComposite(composite);
-                }  
-            } else {
-                throw new NodeException("Contribution " + contributionURI + " 
not added");
-            }
-
-        } catch (ActivationException e) {
-            throw new NodeException(e);
-        } catch (CompositeBuilderException e) {
-            throw new NodeException(e);
-        }
-    }
-    
-    public void stopContribution(String contributionURI) throws NodeException {
-        try {
-
-            Contribution contribution = contributions.get(contributionURI);
-            
-            if (contribution != null){
-                for (Composite composite : contribution.getDeployables()) {
-                        stopComposite(composite);
-                }  
-            } else {
-                throw new NodeException("Contribution " + contributionURI + " 
not added");
-            }
-
-        } catch (ActivationException e) {
-            throw new NodeException(e);
-        } 
-    }    
-
     public void removeContribution(String contributionURI) throws 
NodeException {
+        
+        if (nodeStarted){
+            throw new NodeException("Can't remove contribution " + 
contributionURI + " when the node is running. Call stop() on the node first");
+        }
+       
+        if (contributionURI == null){
+            throw new NodeException("Contribution URI cannot be null");
+        }
+        
+        if (!contributions.containsKey(contributionURI)) {
+            throw new NodeException("Contribution " + contributionURI + " has 
not been added");
+        }        
+        
         try { 
-            stopContribution(contributionURI);
-            
+
             Contribution contribution = contributions.get(contributionURI);
             
             // remove the local record of composites associated with this 
contribution
@@ -420,14 +403,18 @@
             // remove the contribution from the contribution service
             nodeRuntime.getContributionService().remove(contributionURI);
             
-            // remove all the deployable composites from the node level 
composite
+            // remove any deployed composites from the node level composite
             for (Composite composite : contribution.getDeployables()) {
                 nodeComposite.getIncludes().remove(composite);
             }
             
             // remove the local record of the contribution
             contributions.remove(contributionURI);
-
+            
+            // remove the contribution from the domain. It will generally 
already be remove
+            // unless the contribution has been remove from the node itself. 
+            //((SCADomainProxyImpl)scaDomain).unregisterContribution(nodeURI, 
contributionURI);                  
+            
         } catch (ContributionException ex) {
             throw new NodeException(ex);
         }  
@@ -452,37 +439,77 @@
         }              
     }
     
+    private boolean isDeployable(Composite composite){
+        boolean deployable = false;
+        
+        for (Contribution contribution : contributions.values()){
+            if (contribution.getDeployables().contains(composite)) {
+                deployable = true;
+                break;
+            }
+        }
+        
+        return deployable;
+    }
+    
     public void addToDomainLevelComposite(QName compositeName) throws 
NodeException {
-        try {         
-            // if the named composite is not already in the list then add it
+        
+        if (nodeStarted){
+            throw new NodeException("Can't add composite " + 
compositeName.toString() + " when the node is running. Call stop() on the node 
first");
+        }
+       
+        // if no composite name is specified add all deployable composites
+        // to the domain
+        if (compositeName == null){
+            for (Contribution contribution : contributions.values()){
+                for (Composite composite : contribution.getDeployables()) {
+                    if (!nodeComposite.getIncludes().contains(composite)) {
+                        nodeComposite.getIncludes().add(composite);
+                    }
+                } 
+            }
+        } else {          
             Composite composite = composites.get(compositeName);
+            
             if (composite == null) {
-                throw new NodeException("Composite not found: " + 
compositeName);
+                throw new NodeException("Composite " + 
compositeName.toString() + " not found" );
             }
-                   
             
-            // include in top level domain
-            nodeComposite.getIncludes().add(composite);
-             
-        } catch (Exception ex) {
-            throw new NodeException(ex);
-        }          
+            if ( !isDeployable(composite)){
+                throw new NodeException("Composite " + 
compositeName.toString() + " is not deployable");
+            }
+            
+            // if the named composite is not already in the list then deploy it
+            if (!nodeComposite.getIncludes().contains(composite)) {
+                nodeComposite.getIncludes().add(composite);
+            }
+        }        
     }
     
     public void addToDomainLevelComposite(String compositePath) throws 
NodeException {
-        try {           
-            // if the composite is not already in the list then add it
-            Composite composite = compositeFiles.get(compositePath);
-            if (composite == null) {
-                throw new NodeException("Composite file not found: " + 
compositePath);
-            }       
-            
-            // include in top level domain    
-            nodeComposite.getIncludes().add(composite); 
-               
-        } catch (Exception ex) {
-            throw new NodeException(ex);
-        }         
+        
+        if (nodeStarted){
+            throw new NodeException("Can't add composite " + compositePath + " 
when the node is running. Call stop() on the node first");
+        }
+       
+        if (compositePath == null){
+            throw new NodeException("Composite path cannot be null");
+        }
+                 
+        Composite composite = compositeFiles.get(compositePath);
+        
+        if (composite == null) {
+            throw new NodeException("Composite file " + compositePath + " not 
found");
+        }     
+      
+        if ( !isDeployable(composite)){
+            throw new NodeException("Composite " + compositePath + " is not 
deployable");
+        }            
+        
+        // if the named composite is not already in the list then deploy it
+        if (!nodeComposite.getIncludes().contains(composite)) {
+            nodeComposite.getIncludes().add(composite);
+        }
     }
 
     /**

Modified: 
incubator/tuscany/java/sca/modules/node-impl/src/test/java/org/apache/tuscany/sca/node/impl/DomainDrivenTestCase.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/node-impl/src/test/java/org/apache/tuscany/sca/node/impl/DomainDrivenTestCase.java?rev=597163&r1=597162&r2=597163&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/modules/node-impl/src/test/java/org/apache/tuscany/sca/node/impl/DomainDrivenTestCase.java
 (original)
+++ 
incubator/tuscany/java/sca/modules/node-impl/src/test/java/org/apache/tuscany/sca/node/impl/DomainDrivenTestCase.java
 Wed Nov 21 09:54:04 2007
@@ -73,21 +73,17 @@
             domain.addContribution("nodeB", cl.getResource("nodeB/"));
             domain.addContribution("nodeC", cl.getResource("nodeC/"));
             
+            domain.addToDomainLevelComposite(new QName("http://sample";, 
"CalculatorA"));
+            domain.addToDomainLevelComposite(new QName("http://sample";, 
"CalculatorB"));
             domain.addToDomainLevelComposite(new QName("http://sample";, 
"CalculatorC"));
             
+            domain.startComposite(new QName("http://sample";, "CalculatorA"));
+            domain.startComposite(new QName("http://sample";, "CalculatorB"));
             domain.startComposite(new QName("http://sample";, "CalculatorC"));
             
             calculatorServiceA = domain.getService(CalculatorService.class, 
"CalculatorServiceComponentA");
             calculatorServiceB = domain.getService(CalculatorService.class, 
"CalculatorServiceComponentB");
             
-/*
-            // get a reference to various services in the domain            
-            calculatorServiceA = 
nodeA.getDomain().getService(CalculatorService.class, 
"CalculatorServiceComponentA");
-            calculatorServiceB = 
nodeB.getDomain().getService(CalculatorService.class, 
"CalculatorServiceComponentB");
-            
-            //addServiceB = domain.getService(AddService.class, 
"AddServiceComponentB");
-            addServiceB = nodeA.getDomain().getService(AddService.class, 
"AddServiceComponentB");
-*/            
             
         } catch(Exception ex){
             System.err.println(ex.toString());
@@ -106,7 +102,6 @@
 
     @Test
     public void testCalculator() throws Exception {       
-        /*
         // Calculate
         Assert.assertEquals(calculatorServiceA.add(3, 2), 5.0);
         Assert.assertEquals(calculatorServiceA.subtract(3, 2), 1.0);
@@ -116,6 +111,5 @@
         Assert.assertEquals(calculatorServiceB.subtract(3, 2), 1.0);
         Assert.assertEquals(calculatorServiceB.multiply(3, 2), 6.0);
         Assert.assertEquals(calculatorServiceB.divide(3, 2), 1.5);
-      */ 
     }
 }

Modified: 
incubator/tuscany/java/sca/modules/node-impl/src/test/java/org/apache/tuscany/sca/node/impl/NodeDrivenTestCase.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/node-impl/src/test/java/org/apache/tuscany/sca/node/impl/NodeDrivenTestCase.java?rev=597163&r1=597162&r2=597163&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/modules/node-impl/src/test/java/org/apache/tuscany/sca/node/impl/NodeDrivenTestCase.java
 (original)
+++ 
incubator/tuscany/java/sca/modules/node-impl/src/test/java/org/apache/tuscany/sca/node/impl/NodeDrivenTestCase.java
 Wed Nov 21 09:54:04 2007
@@ -66,20 +66,23 @@
             
             SCANodeFactory nodeFactory = SCANodeFactory.newInstance();
             
-            // rely on meta data to start composite
+            // sca-contribution.xml test
             nodeA = nodeFactory.createSCANode("http://localhost:8100/nodeA";, 
"http://localhost:9999";);
             nodeA.addContribution("nodeA", cl.getResource("nodeA/"));
+            nodeA.addToDomainLevelComposite(new QName("http://sample";, 
"CalculatorA"));
             nodeA.start();
 
-            // rely on meta data to start composite
+            // sca-deployables test
             nodeB = nodeFactory.createSCANode("http://localhost:8200/nodeB";, 
"http://localhost:9999";);
             nodeB.addContribution("nodeB", cl.getResource("nodeB/"));
+            nodeB.addToDomainLevelComposite(new QName("http://sample";, 
"CalculatorB"));
             nodeB.start();
 
-            // explicitly ask for composite to be started
+            // sca-deployables test
             nodeC = nodeFactory.createSCANode("http://localhost:8300/nodeC";, 
"http://localhost:9999";);
             nodeC.addContribution("nodeC", cl.getResource("nodeC/"));
             nodeC.addToDomainLevelComposite(new QName("http://sample";, 
"CalculatorC")); 
+            nodeC.addToDomainLevelComposite(new QName("http://sample";, 
"CalculatorC"));
             nodeC.start();
 
             SCADomainFinder domainFinder = SCADomainFinder.newInstance();

Modified: 
incubator/tuscany/java/sca/modules/node-impl/src/test/java/org/apache/tuscany/sca/node/impl/StandaloneNodeTestCase.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/node-impl/src/test/java/org/apache/tuscany/sca/node/impl/StandaloneNodeTestCase.java?rev=597163&r1=597162&r2=597163&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/modules/node-impl/src/test/java/org/apache/tuscany/sca/node/impl/StandaloneNodeTestCase.java
 (original)
+++ 
incubator/tuscany/java/sca/modules/node-impl/src/test/java/org/apache/tuscany/sca/node/impl/StandaloneNodeTestCase.java
 Wed Nov 21 09:54:04 2007
@@ -110,7 +110,9 @@
     @Test
     public void testAddOtherContributionsAndStartNode() throws Exception {     
  
         node.addContribution("nodeB", cl.getResource("nodeB/"));
+        node.addToDomainLevelComposite(new QName("http://sample";, 
"CalculatorB"));
         node.addContribution("nodeD", cl.getResource("nodeD/"));
+        node.addToDomainLevelComposite(new QName("http://sample";, 
"CalculatorD"));
         node.start();
         subtractServiceC = node.getDomain().getService(SubtractService.class, 
"SubtractServiceComponentC");
         calculatorServiceD = 
node.getDomain().getService(CalculatorService.class, 
"CalculatorServiceComponentD");
@@ -168,6 +170,7 @@
     public void testAddContributionBackAgain() throws Exception {       
        
         node.addContribution("nodeD", cl.getResource("nodeD/"));  
+        node.addToDomainLevelComposite(new QName("http://sample";, 
"CalculatorD"));
         node.start();
         
         calculatorServiceD = 
node.getDomain().getService(CalculatorService.class, 
"CalculatorServiceComponentD");

Modified: 
incubator/tuscany/java/sca/samples/calculator-distributed/src/test/java/calculator/DomainInMemoryTestCase.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/samples/calculator-distributed/src/test/java/calculator/DomainInMemoryTestCase.java?rev=597163&r1=597162&r2=597163&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/samples/calculator-distributed/src/test/java/calculator/DomainInMemoryTestCase.java
 (original)
+++ 
incubator/tuscany/java/sca/samples/calculator-distributed/src/test/java/calculator/DomainInMemoryTestCase.java
 Wed Nov 21 09:54:04 2007
@@ -66,16 +66,19 @@
             
             nodeA = nodeFactory.createSCANode("http://localhost:8085/nodeA";, 
"http://localhost:9999";);
             nodeA.addContribution("nodeA", cl.getResource("nodeA/"));
+            nodeA.addToDomainLevelComposite(new QName("http://sample";, 
"Calculator"));
             nodeA.start();
 
             
             nodeB = nodeFactory.createSCANode("http://localhost:8086/nodeB";, 
"http://localhost:9999";);
             nodeB.addContribution("nodeB", cl.getResource("nodeB/"));
+            nodeB.addToDomainLevelComposite(new QName("http://sample";, 
"Calculator"));
             nodeB.start();
 
             
             nodeC = nodeFactory.createSCANode("http://localhost:8087/nodeC";, 
"http://localhost:9999";);
             nodeC.addContribution("nodeC", cl.getResource("nodeC/"));
+            nodeC.addToDomainLevelComposite(new QName("http://sample";, 
"Calculator"));
             nodeC.start();
 
             SCADomainFinder domainFinder = SCADomainFinder.newInstance();



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

Reply via email to