summaryrefslogtreecommitdiffstats
path: root/java/sca/otest/current/tests/src/main/foo/tuscany/TuscanyRuntimeBridge.java
blob: 1b5b76e4b6a0d550134a90b4920e9625b77eb6f9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
package tuscany;

import org.apache.tuscany.sca.node.Contribution;
import org.apache.tuscany.sca.node.ContributionLocationHelper;
import org.apache.tuscany.sca.node.Node;
import org.apache.tuscany.sca.node.NodeFactory;

import client.RuntimeBridge;
import client.TestConfiguration;

/**
 * An implementation of the Runtime Bridge for the Apache Tuscany SCA runtime (version 2.x)
 * @author Kelvin Goodson
 *
 */
public class TuscanyRuntimeBridge implements RuntimeBridge {
	
	static final String CONTRIBUTION_LOCATION_PROPKEY = "OASIS_TESTENV_CONTRIBUTION_LOCATION";
	
    protected NodeFactory launcher;
    protected Node node;
    TestConfiguration testConfiguration = null;
    
    public TuscanyRuntimeBridge() {

    }
        
	public TestConfiguration getTestConfiguration() {
		return testConfiguration;
	}

	public void setTestConfiguration(TestConfiguration testConfiguration) {
		this.testConfiguration = testConfiguration;
	}

	public boolean startContribution(String contributionLocation,
			                         String[] contributionNames) throws Exception {
		try {
		// Tuscany specific code which starts the contribution(s) holding the test
        launcher = NodeFactory.newInstance();

        Contribution[] contributions = new Contribution[contributionNames.length];
        String[] contributionURIs = getContributionURIs( contributionLocation );
        for( int i = 0; i < contributions.length ; i++ ) { 
        	contributions[i] = new Contribution(contributionNames[i], contributionURIs[i]);
        } // end for
        
			node = launcher.createNode(testConfiguration.getComposite(), contributions );
        System.out.println("SCA Node API ClassLoader: " + node.getClass().getClassLoader());
        // Start the node
        node.start();
		} catch (Exception e) {
			System.out.println( e.getMessage() );
			e.printStackTrace();
			throw e;
		} // end try

        return true;
	} // end method startContribution

	/**
     * Gets the location of the Contributions as URIs
     * @param contributionLocation - a location pattern URI, which contains one or more "%1"
     * substrings, which are substituted with the name of the contribution to get the URI of
     * the contribution
     * @return the contribution locations as an array of Strings
     */
    protected String[] getContributionURIs(String contributionLocation) throws Exception {
    	String[] locations;
    	locations = testConfiguration.getContributionNames();
    	
    	if( locations != null && contributionLocation != null ) {
	    	  	
    		for( int i=0; i < locations.length; i++ ) {
    			String aLocation = contributionLocation.replaceAll("%1", locations[i]);
		    			    
		    	locations[i] = aLocation;
    		} // end for    	  	
    	} else {
    		if( locations == null ) {
        		// No contribution specified - throw an Exception
    			throw new Exception("Unable to start SCA runtime - no contribution supplied - error");
    		} else {
    			// No contribution location supplied - throw an Exception
    			throw new Exception("Unable to start SCA runtime - no contribution location supplied - error");
    		} // end if 
    	} // end if
	    	
    	return locations;
    } // end getContributionURI
    
	public void stopContribution() {
        if (node != null) {
            node.stop();
            node.destroy();
        } // end if
        if (launcher != null) {
            launcher.destroy();
        } // end if
	} // end method stopContribution
	
	public String getContributionLocation(Class<?> testClass) {
    	return ContributionLocationHelper.getContributionLocation(testConfiguration.getTestClass());
	} // end method getContributionLocation
	
} // end class TuscanyRuntimeBridge