Calculator Sample
=================
This sample implements a simple calculator using SCA components. 

The README in the samples directory (the directory above this) provides 
general instructions about building and running samples. Take a look there 
first. 

If you just want to run it to see what happens open a command prompt, navigate
to this sample directory and do:

java -jar <tuscany-install>/modules/tuscany-node-launcher.jar Calculator.composite target/sample-calculator-lean.jar

Sample Overview
---------------
The sample provides a single calculator service with a default SCA (java) 
binding. The CalculatorClient exercises this interface by calling add, 
subtract, multiply and divide operations. This results in messages passing to 
the appropriate components in the composite across the local wires.

calculator/
  src/
    main/
      java/
        calculator/
          CalculatorService.java  - the first component, calls +-/* as 
                                    appropriate
          CalculatorServiceImpl.java
          AddService.java         - adds two numbers
          AddServiceImpl.java
          SubtractService.java    - subtracts one number from another
          SubtractServiceImpl.java
          MultiplyService.java    - multiplies two numbers
          MultiplyServiceImpl.java
          DivideService.java      - divides one number by another
          DivideServiceImpl.java
          CalculatorClient.java   - a client component that calls the
                                    Calculator services
      resources/
        Calculator.composite      - the SCA assembly for this sample
    test/
      java/
        calculator/
          CalculatorTestCase.java - JUnit test case 
  calculator.png                  - a pictorial representation of the sample 
                                    .composite file
  build.xml                       - the Ant build file
  pom.xml                         - the Maven build file        

Building And Running The Sample Using Ant
-----------------------------------------
With the binary distribution the sample can be built and run using Ant as 
follows

cd calculator
ant compile
ant run

You should see the following output from the run target.

run:
     [java] 3 + 2=5.0
     [java] 3 - 2=1.0
     [java] 3 * 2=6.0
     [java] 3 / 2=1.5

Building And Running The Sample Using Maven 
-------------------------------------------
With either the binary or source distributions the sample can be built and run 
using Maven as follows. 

cd calculator
mvn

You should see the following output from the test phase.

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running calculator.CalculatorTestCase
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.272 sec

Results :

Tests run: 1, Failures: 0, Errors: 0, Skipped: 0

This shows that the Junit test cases have run successfully. 
