From 6c10a8b2c5a75f579cb55fc936d84f8953c493d0 Mon Sep 17 00:00:00 2001 From: slaws Date: Wed, 14 Apr 2010 17:59:45 +0000 Subject: Add some more parts to the simple banking sample git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@934063 13f79535-47bb-0310-9956-ffa450edef68 --- .../slaws/bank-challenge/bank-contribution/pom.xml | 50 ++----- .../src/main/java/bank/BankService.java | 40 ------ .../src/main/java/bank/Statement.java | 143 --------------------- .../src/main/java/bank/StockHolding.java | 58 --------- .../src/main/java/bank/StockQuote.java | 52 -------- .../src/main/java/bank/impl/BankServiceImpl.java | 27 +++- .../src/main/resources/Bank.composite | 2 + .../main/resources/META-INF/sca-contribution.xml | 1 + .../src/test/java/test/BankTestCase.java | 5 +- .../bank-challenge/client-sl-contribution/pom.xml | 92 +++++++++++++ .../src/main/java/client/impl/ClientImpl.java | 75 +++++++++++ .../src/main/resources/Client.composite | 30 +++++ .../main/resources/META-INF/sca-contribution.xml | 24 ++++ .../src/test/java/test/BankClientTestCase.java | 61 +++++++++ .../bank-challenge/common-contribution/pom.xml | 86 +++++++++++++ .../src/main/java/bank/BankService.java | 40 ++++++ .../src/main/java/bank/ChallengeControl.java | 32 +++++ .../src/main/java/bank/Statement.java | 143 +++++++++++++++++++++ .../src/main/java/bank/StockHolding.java | 58 +++++++++ .../src/main/java/bank/StockQuote.java | 52 ++++++++ .../main/resources/META-INF/sca-contribution.xml | 23 ++++ sandbox/slaws/bank-challenge/launcher/pom.xml | 92 +++++++++++++ .../main/java/launch/BankChallengeLauncher.java | 66 ++++++++++ sandbox/slaws/bank-challenge/pom.xml | 1 + 24 files changed, 914 insertions(+), 339 deletions(-) delete mode 100644 sandbox/slaws/bank-challenge/bank-contribution/src/main/java/bank/BankService.java delete mode 100644 sandbox/slaws/bank-challenge/bank-contribution/src/main/java/bank/Statement.java delete mode 100644 sandbox/slaws/bank-challenge/bank-contribution/src/main/java/bank/StockHolding.java delete mode 100644 sandbox/slaws/bank-challenge/bank-contribution/src/main/java/bank/StockQuote.java create mode 100644 sandbox/slaws/bank-challenge/client-sl-contribution/pom.xml create mode 100644 sandbox/slaws/bank-challenge/client-sl-contribution/src/main/java/client/impl/ClientImpl.java create mode 100644 sandbox/slaws/bank-challenge/client-sl-contribution/src/main/resources/Client.composite create mode 100644 sandbox/slaws/bank-challenge/client-sl-contribution/src/main/resources/META-INF/sca-contribution.xml create mode 100644 sandbox/slaws/bank-challenge/client-sl-contribution/src/test/java/test/BankClientTestCase.java create mode 100644 sandbox/slaws/bank-challenge/common-contribution/pom.xml create mode 100644 sandbox/slaws/bank-challenge/common-contribution/src/main/java/bank/BankService.java create mode 100644 sandbox/slaws/bank-challenge/common-contribution/src/main/java/bank/ChallengeControl.java create mode 100644 sandbox/slaws/bank-challenge/common-contribution/src/main/java/bank/Statement.java create mode 100644 sandbox/slaws/bank-challenge/common-contribution/src/main/java/bank/StockHolding.java create mode 100644 sandbox/slaws/bank-challenge/common-contribution/src/main/java/bank/StockQuote.java create mode 100644 sandbox/slaws/bank-challenge/common-contribution/src/main/resources/META-INF/sca-contribution.xml create mode 100644 sandbox/slaws/bank-challenge/launcher/pom.xml create mode 100644 sandbox/slaws/bank-challenge/launcher/src/main/java/launch/BankChallengeLauncher.java (limited to 'sandbox/slaws') diff --git a/sandbox/slaws/bank-challenge/bank-contribution/pom.xml b/sandbox/slaws/bank-challenge/bank-contribution/pom.xml index a4bdc9a4f1..2ee8455d1e 100644 --- a/sandbox/slaws/bank-challenge/bank-contribution/pom.xml +++ b/sandbox/slaws/bank-challenge/bank-contribution/pom.xml @@ -25,9 +25,9 @@ 2.0-SNAPSHOT ../../pom.xml - sandbox-bank-challenge - Apache Tuscany SCA Sandbox Bank Challenge - war + sandbox-bank-contribution + Apache Tuscany SCA Sandbox Bank Contribution + jar @@ -77,48 +77,16 @@ 4.8.1 test + + + org.apache.tuscany.sca + sandbox-common-contribution + 2.0-SNAPSHOT + ${artifactId} - - - org.codehaus.mojo - build-helper-maven-plugin - 1.4 - - - add-source - generate-sources - - add-resource - - - - - src/wsimportout - - - src/wsgenout - - - - - - - - org.apache.maven.plugins - maven-jar-plugin - 2.2 - - - - calculator.CalculatorClient - - - - - diff --git a/sandbox/slaws/bank-challenge/bank-contribution/src/main/java/bank/BankService.java b/sandbox/slaws/bank-challenge/bank-contribution/src/main/java/bank/BankService.java deleted file mode 100644 index bc13dfd21d..0000000000 --- a/sandbox/slaws/bank-challenge/bank-contribution/src/main/java/bank/BankService.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * 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 bank; - -import java.util.List; - -import org.oasisopen.sca.annotation.Remotable; - -/** - * The Bank service interface. - */ -@Remotable -public interface BankService { - - String createAccount(String customerName); - - Statement getStatement(String accountID); - - void buyEquity(String accountID, String equityCode, int number); - void sellEquity(String accountID, String equityCode, int number); - - StockQuote getStockQuote(String accountID, String equityCode); - List getAllStockQuotes(String accountID); -} diff --git a/sandbox/slaws/bank-challenge/bank-contribution/src/main/java/bank/Statement.java b/sandbox/slaws/bank-challenge/bank-contribution/src/main/java/bank/Statement.java deleted file mode 100644 index 97439736e1..0000000000 --- a/sandbox/slaws/bank-challenge/bank-contribution/src/main/java/bank/Statement.java +++ /dev/null @@ -1,143 +0,0 @@ -/* - * 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 bank; - -import java.io.Serializable; -import java.util.ArrayList; -import java.util.List; -import java.util.UUID; - - -/** - * A stock quote - */ -public class Statement implements Serializable { - - private String customerName; - private String accountID; - private long cashBalance; - private List stockHoldings; - private List transactions = new ArrayList(); - - public Statement(){ - if (this.stockHoldings == null){ - this.stockHoldings = new ArrayList(); - } - } - - public Statement(String customerName, String accountID, long cashBalance, List stockHoldings){ - this.customerName = customerName; - this.accountID = accountID; - this.cashBalance = cashBalance; - this.stockHoldings = stockHoldings; - - if (this.accountID == null){ - this.accountID = UUID.randomUUID().toString(); - } - - if (this.stockHoldings == null){ - this.stockHoldings = new ArrayList(); - } - } - - public String getCustomerName() { - return customerName; - } - - public String getAccountID() { - return accountID; - } - - public long getCashBalance() { - return cashBalance; - } - - public void creditCashBalance(long credit, String reason) { - this.cashBalance += credit; - transactions.add("credit " + credit + " : " + reason); - } - - public void debitCashBalance(long debit, String reason) { - this.cashBalance -= debit; - transactions.add("debit " + debit + " : " + reason); - } - - public List getStockHolding() { - return stockHoldings; - } - - public void creditStockHolding(StockHolding stock){ - stockHoldings.add(stock); - debitCashBalance(stock.getPrice() * stock.getNumberHeld(), - "bought " + stock.getNumberHeld() + " of " + stock.getStockCode() + " at " + stock.getPrice()); - } - - public void debitStockHolding(StockHolding stock){ - int numberToSell = stock.getNumberHeld(); - int numberSold = 0; - List toRemove = new ArrayList(); - - for (StockHolding stockHolding : stockHoldings){ - if (stockHolding.getStockCode().equals(stock.getStockCode())){ - if (stockHolding.getNumberHeld() > numberToSell){ - stockHolding.setNumberHeld(stockHolding.getNumberHeld() - numberToSell); - numberSold += numberToSell; - numberToSell = 0; - break; - } else { - numberSold += stockHolding.getNumberHeld(); - numberToSell -= stockHolding.getNumberHeld(); - stockHolding.setNumberHeld(0); - toRemove.add(stockHolding); - } - } - } - - stockHoldings.removeAll(toRemove); - - creditCashBalance(stock.getPrice() * numberSold, - "sold " + numberSold + " of " + stock.getStockCode() + " at " + stock.getPrice()); - } - - public List getTransactions() { - return transactions; - } - - @Override - public String toString() { - String returnString = - "customer name = " + customerName + - "\naccount Id = " + accountID + - "\nbalance = " + cashBalance + - "\nequities = \n"; - - for (StockHolding stock : stockHoldings){ - returnString += " stock " + stock.getStockCode() + " number held = " + stock.getNumberHeld() + "\n"; - } - - returnString += - "transactions = \n"; - - for(String transaction : transactions){ - returnString += " " + transaction + "\n"; - } - - return returnString; - } -} diff --git a/sandbox/slaws/bank-challenge/bank-contribution/src/main/java/bank/StockHolding.java b/sandbox/slaws/bank-challenge/bank-contribution/src/main/java/bank/StockHolding.java deleted file mode 100644 index 8bd0afd2be..0000000000 --- a/sandbox/slaws/bank-challenge/bank-contribution/src/main/java/bank/StockHolding.java +++ /dev/null @@ -1,58 +0,0 @@ -/* - * 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 bank; - -import java.io.Serializable; - -/** - * A stock quote - */ -public class StockHolding implements Serializable { - - private String stockCode; - private int numberHeld; - private long price; - - public StockHolding(String stockCode, int numberHeld, long price){ - this.stockCode = stockCode; - this.numberHeld = numberHeld; - this.price = price; - } - - public String getStockCode() { - return stockCode; - } - - public int getNumberHeld() { - return numberHeld; - } - - public void setNumberHeld(int numberHeld) { - this.numberHeld = numberHeld; - } - - public long getPrice() { - return price; - } - - @Override - public String toString() { - return stockCode + " - number=" + numberHeld + " - price=" + price; - } -} diff --git a/sandbox/slaws/bank-challenge/bank-contribution/src/main/java/bank/StockQuote.java b/sandbox/slaws/bank-challenge/bank-contribution/src/main/java/bank/StockQuote.java deleted file mode 100644 index 3bec8019b7..0000000000 --- a/sandbox/slaws/bank-challenge/bank-contribution/src/main/java/bank/StockQuote.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * 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 bank; - -import java.io.Serializable; - -/** - * A stock quote - */ -public class StockQuote implements Serializable { - - private String stockCode; - private long stockQuote; - - public StockQuote(String stockCode, long stockQuote){ - this.stockCode = stockCode; - this.stockQuote = stockQuote; - } - - public String getStockCode() { - return stockCode; - } - - public long getStockQuote() { - return stockQuote; - } - - public void setStockQuote(long stockQuote) { - this.stockQuote = stockQuote; - } - - @Override - public String toString() { - return stockCode + " - " + stockQuote; - } -} diff --git a/sandbox/slaws/bank-challenge/bank-contribution/src/main/java/bank/impl/BankServiceImpl.java b/sandbox/slaws/bank-challenge/bank-contribution/src/main/java/bank/impl/BankServiceImpl.java index 9b49f39ef1..a4e7ee8de2 100644 --- a/sandbox/slaws/bank-challenge/bank-contribution/src/main/java/bank/impl/BankServiceImpl.java +++ b/sandbox/slaws/bank-challenge/bank-contribution/src/main/java/bank/impl/BankServiceImpl.java @@ -27,6 +27,7 @@ import org.oasisopen.sca.annotation.Scope; import org.oasisopen.sca.annotation.Service; import bank.BankService; +import bank.ChallengeControl; import bank.Statement; import bank.StockHolding; import bank.StockQuote; @@ -34,9 +35,9 @@ import bank.StockQuote; /** * An implementation of the Bank service. */ -@Service(BankService.class) +@Service({BankService.class, ChallengeControl.class}) @Scope("COMPOSITE") -public class BankServiceImpl implements BankService { +public class BankServiceImpl implements BankService, ChallengeControl { protected int initialCredit = 1000; protected int overdrawnCost = 1; @@ -72,7 +73,7 @@ public class BankServiceImpl implements BankService { } } - // public interface + // BankService service implementation public String createAccount(String customerName) { for (Statement statement : accounts){ @@ -168,6 +169,26 @@ public class BankServiceImpl implements BankService { return stockQuote; } + // ChallengeControl service implmentation + + public void start() { + + } + + public void increment() { + + } + + public void stop() { + System.out.println("Customer report"); + System.out.println("==============="); + + for(Statement account : accounts){ + System.out.println("\n"); + System.out.println(account); + } + } + // private functions private void updateStockPrices(){ diff --git a/sandbox/slaws/bank-challenge/bank-contribution/src/main/resources/Bank.composite b/sandbox/slaws/bank-challenge/bank-contribution/src/main/resources/Bank.composite index 60919c0bfe..e774169dc2 100644 --- a/sandbox/slaws/bank-challenge/bank-contribution/src/main/resources/Bank.composite +++ b/sandbox/slaws/bank-challenge/bank-contribution/src/main/resources/Bank.composite @@ -26,6 +26,8 @@ + + diff --git a/sandbox/slaws/bank-challenge/bank-contribution/src/main/resources/META-INF/sca-contribution.xml b/sandbox/slaws/bank-challenge/bank-contribution/src/main/resources/META-INF/sca-contribution.xml index 1bc342a9af..1c475cae94 100644 --- a/sandbox/slaws/bank-challenge/bank-contribution/src/main/resources/META-INF/sca-contribution.xml +++ b/sandbox/slaws/bank-challenge/bank-contribution/src/main/resources/META-INF/sca-contribution.xml @@ -20,4 +20,5 @@ + \ No newline at end of file diff --git a/sandbox/slaws/bank-challenge/bank-contribution/src/test/java/test/BankTestCase.java b/sandbox/slaws/bank-challenge/bank-contribution/src/test/java/test/BankTestCase.java index cbfa6f815f..c3c2f1391e 100644 --- a/sandbox/slaws/bank-challenge/bank-contribution/src/test/java/test/BankTestCase.java +++ b/sandbox/slaws/bank-challenge/bank-contribution/src/test/java/test/BankTestCase.java @@ -38,8 +38,9 @@ public class BankTestCase{ @BeforeClass public static void setUpBeforeClass() throws Exception { - node = NodeFactory.newInstance().createNode((String)null, new String[] {"target/classes"}).start(); - bankService = node.getService(BankService.class, "BankServiceComponent"); + node = NodeFactory.newInstance().createNode((String)null, new String[] {"target/classes"}); + node.start(); + bankService = node.getService(BankService.class, "BankServiceComponent/BankService"); } @AfterClass diff --git a/sandbox/slaws/bank-challenge/client-sl-contribution/pom.xml b/sandbox/slaws/bank-challenge/client-sl-contribution/pom.xml new file mode 100644 index 0000000000..7b46a138cb --- /dev/null +++ b/sandbox/slaws/bank-challenge/client-sl-contribution/pom.xml @@ -0,0 +1,92 @@ + + + + 4.0.0 + + org.apache.tuscany.sca + tuscany-sca + 2.0-SNAPSHOT + ../../pom.xml + + sandbox-bank-client-sl-contribution + Apache Tuscany SCA Sandbox Bank Client SL Contribution + jar + + + + + org.apache.tuscany.sca + tuscany-sca-api + 2.0-SNAPSHOT + + + + org.apache.tuscany.sca + tuscany-node-api + 2.0-SNAPSHOT + + + + org.apache.tuscany.sca + tuscany-node-impl + 2.0-SNAPSHOT + runtime + + + + org.apache.tuscany.sca + tuscany-implementation-java-runtime + 2.0-SNAPSHOT + runtime + + + + org.apache.tuscany.sca + tuscany-binding-ws-runtime-axis2 + 2.0-SNAPSHOT + runtime + + + + org.apache.axis2 + axis2-webapp + 1.5.1 + war + + + + junit + junit + 4.8.1 + test + + + + org.apache.tuscany.sca + sandbox-common-contribution + 2.0-SNAPSHOT + + + + + + ${artifactId} + + diff --git a/sandbox/slaws/bank-challenge/client-sl-contribution/src/main/java/client/impl/ClientImpl.java b/sandbox/slaws/bank-challenge/client-sl-contribution/src/main/java/client/impl/ClientImpl.java new file mode 100644 index 0000000000..ab8b4de1b4 --- /dev/null +++ b/sandbox/slaws/bank-challenge/client-sl-contribution/src/main/java/client/impl/ClientImpl.java @@ -0,0 +1,75 @@ +/* + * 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 client.impl; + +import java.util.List; + +import org.oasisopen.sca.annotation.Reference; +import org.oasisopen.sca.annotation.Scope; +import org.oasisopen.sca.annotation.Service; + +import bank.BankService; +import bank.ChallengeControl; +import bank.Statement; +import bank.StockHolding; +import bank.StockQuote; + +/** + * An implementation of the Bank service. + */ +@Service(ChallengeControl.class) +@Scope("COMPOSITE") +public class ClientImpl implements ChallengeControl { + + @Reference + protected BankService bankService; + + private String customerName = "SL"; + private String accountID; + + public ClientImpl(){ + } + + public void start() { + System.out.println("Starting bank client for " + customerName); + accountID = bankService.createAccount(customerName); + System.out.println("Account ID for " + customerName + " = " + accountID); + } + + public void increment() { + System.out.println("Increment " + customerName); + + List stockQuotes = bankService.getAllStockQuotes(accountID); + + for (StockQuote stock : stockQuotes){ + bankService.buyEquity(accountID, stock.getStockCode(), 1); + } + + System.out.println("My statement " + bankService.getStatement(accountID)); + } + + public void stop() { + System.out.println("Stopping bank client for " + customerName); + Statement statement = bankService.getStatement(accountID); + + for (StockHolding holding : statement.getStockHolding()){ + bankService.sellEquity(accountID, holding.getStockCode(), holding.getNumberHeld()); + } + } +} diff --git a/sandbox/slaws/bank-challenge/client-sl-contribution/src/main/resources/Client.composite b/sandbox/slaws/bank-challenge/client-sl-contribution/src/main/resources/Client.composite new file mode 100644 index 0000000000..0d1ce9223a --- /dev/null +++ b/sandbox/slaws/bank-challenge/client-sl-contribution/src/main/resources/Client.composite @@ -0,0 +1,30 @@ + + + + + + + + + + diff --git a/sandbox/slaws/bank-challenge/client-sl-contribution/src/main/resources/META-INF/sca-contribution.xml b/sandbox/slaws/bank-challenge/client-sl-contribution/src/main/resources/META-INF/sca-contribution.xml new file mode 100644 index 0000000000..4906cd95b5 --- /dev/null +++ b/sandbox/slaws/bank-challenge/client-sl-contribution/src/main/resources/META-INF/sca-contribution.xml @@ -0,0 +1,24 @@ + + + + + + \ No newline at end of file diff --git a/sandbox/slaws/bank-challenge/client-sl-contribution/src/test/java/test/BankClientTestCase.java b/sandbox/slaws/bank-challenge/client-sl-contribution/src/test/java/test/BankClientTestCase.java new file mode 100644 index 0000000000..a6cec45ec4 --- /dev/null +++ b/sandbox/slaws/bank-challenge/client-sl-contribution/src/test/java/test/BankClientTestCase.java @@ -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 test; + +import static org.junit.Assert.assertEquals; + +import org.apache.tuscany.sca.node.Contribution; +import org.apache.tuscany.sca.node.Node; +import org.apache.tuscany.sca.node.NodeFactory; +import org.junit.AfterClass; +import org.junit.BeforeClass; +import org.junit.Test; + +import bank.ChallengeControl; + +/** + * Test the Bank service component. + */ +public class BankClientTestCase{ + private static Node node; + private static ChallengeControl bankClient; + + @BeforeClass + public static void setUpBeforeClass() throws Exception { + node = NodeFactory.newInstance().createNode(new Contribution("Common", "../common-contribution/target/classes"), + new Contribution("Bank", "../bank-contribution/target/classes"), + new Contribution("SLClient", "../client-sl-contribution/target/classes")); + node.start(); + bankClient = node.getService(ChallengeControl.class, "ClientComponentSL"); + } + + @AfterClass + public static void tearDownAfterClass() throws Exception { + node.stop(); + } + + @Test + public void testClient() throws Exception { + System.out.println("Start client"); + bankClient.start(); + bankClient.increment(); + System.out.println("Stop client"); + bankClient.stop(); + } +} diff --git a/sandbox/slaws/bank-challenge/common-contribution/pom.xml b/sandbox/slaws/bank-challenge/common-contribution/pom.xml new file mode 100644 index 0000000000..8c8f8b9704 --- /dev/null +++ b/sandbox/slaws/bank-challenge/common-contribution/pom.xml @@ -0,0 +1,86 @@ + + + + 4.0.0 + + org.apache.tuscany.sca + tuscany-sca + 2.0-SNAPSHOT + ../../pom.xml + + sandbox-common-contribution + Apache Tuscany SCA Sandbox Common Contribution + jar + + + + + org.apache.tuscany.sca + tuscany-sca-api + 2.0-SNAPSHOT + + + + org.apache.tuscany.sca + tuscany-node-api + 2.0-SNAPSHOT + + + + org.apache.tuscany.sca + tuscany-node-impl + 2.0-SNAPSHOT + runtime + + + + org.apache.tuscany.sca + tuscany-implementation-java-runtime + 2.0-SNAPSHOT + runtime + + + + org.apache.tuscany.sca + tuscany-binding-ws-runtime-axis2 + 2.0-SNAPSHOT + runtime + + + + org.apache.axis2 + axis2-webapp + 1.5.1 + war + + + + junit + junit + 4.8.1 + test + + + + + + ${artifactId} + + diff --git a/sandbox/slaws/bank-challenge/common-contribution/src/main/java/bank/BankService.java b/sandbox/slaws/bank-challenge/common-contribution/src/main/java/bank/BankService.java new file mode 100644 index 0000000000..bc13dfd21d --- /dev/null +++ b/sandbox/slaws/bank-challenge/common-contribution/src/main/java/bank/BankService.java @@ -0,0 +1,40 @@ +/* + * 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 bank; + +import java.util.List; + +import org.oasisopen.sca.annotation.Remotable; + +/** + * The Bank service interface. + */ +@Remotable +public interface BankService { + + String createAccount(String customerName); + + Statement getStatement(String accountID); + + void buyEquity(String accountID, String equityCode, int number); + void sellEquity(String accountID, String equityCode, int number); + + StockQuote getStockQuote(String accountID, String equityCode); + List getAllStockQuotes(String accountID); +} diff --git a/sandbox/slaws/bank-challenge/common-contribution/src/main/java/bank/ChallengeControl.java b/sandbox/slaws/bank-challenge/common-contribution/src/main/java/bank/ChallengeControl.java new file mode 100644 index 0000000000..c03f9a2c9c --- /dev/null +++ b/sandbox/slaws/bank-challenge/common-contribution/src/main/java/bank/ChallengeControl.java @@ -0,0 +1,32 @@ +/* + * 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 bank; + +import org.oasisopen.sca.annotation.Remotable; + +/** + * The Bank service interface. + */ +@Remotable +public interface ChallengeControl { + + void start(); + void increment(); + void stop(); +} diff --git a/sandbox/slaws/bank-challenge/common-contribution/src/main/java/bank/Statement.java b/sandbox/slaws/bank-challenge/common-contribution/src/main/java/bank/Statement.java new file mode 100644 index 0000000000..97439736e1 --- /dev/null +++ b/sandbox/slaws/bank-challenge/common-contribution/src/main/java/bank/Statement.java @@ -0,0 +1,143 @@ +/* + * 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 bank; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + + +/** + * A stock quote + */ +public class Statement implements Serializable { + + private String customerName; + private String accountID; + private long cashBalance; + private List stockHoldings; + private List transactions = new ArrayList(); + + public Statement(){ + if (this.stockHoldings == null){ + this.stockHoldings = new ArrayList(); + } + } + + public Statement(String customerName, String accountID, long cashBalance, List stockHoldings){ + this.customerName = customerName; + this.accountID = accountID; + this.cashBalance = cashBalance; + this.stockHoldings = stockHoldings; + + if (this.accountID == null){ + this.accountID = UUID.randomUUID().toString(); + } + + if (this.stockHoldings == null){ + this.stockHoldings = new ArrayList(); + } + } + + public String getCustomerName() { + return customerName; + } + + public String getAccountID() { + return accountID; + } + + public long getCashBalance() { + return cashBalance; + } + + public void creditCashBalance(long credit, String reason) { + this.cashBalance += credit; + transactions.add("credit " + credit + " : " + reason); + } + + public void debitCashBalance(long debit, String reason) { + this.cashBalance -= debit; + transactions.add("debit " + debit + " : " + reason); + } + + public List getStockHolding() { + return stockHoldings; + } + + public void creditStockHolding(StockHolding stock){ + stockHoldings.add(stock); + debitCashBalance(stock.getPrice() * stock.getNumberHeld(), + "bought " + stock.getNumberHeld() + " of " + stock.getStockCode() + " at " + stock.getPrice()); + } + + public void debitStockHolding(StockHolding stock){ + int numberToSell = stock.getNumberHeld(); + int numberSold = 0; + List toRemove = new ArrayList(); + + for (StockHolding stockHolding : stockHoldings){ + if (stockHolding.getStockCode().equals(stock.getStockCode())){ + if (stockHolding.getNumberHeld() > numberToSell){ + stockHolding.setNumberHeld(stockHolding.getNumberHeld() - numberToSell); + numberSold += numberToSell; + numberToSell = 0; + break; + } else { + numberSold += stockHolding.getNumberHeld(); + numberToSell -= stockHolding.getNumberHeld(); + stockHolding.setNumberHeld(0); + toRemove.add(stockHolding); + } + } + } + + stockHoldings.removeAll(toRemove); + + creditCashBalance(stock.getPrice() * numberSold, + "sold " + numberSold + " of " + stock.getStockCode() + " at " + stock.getPrice()); + } + + public List getTransactions() { + return transactions; + } + + @Override + public String toString() { + String returnString = + "customer name = " + customerName + + "\naccount Id = " + accountID + + "\nbalance = " + cashBalance + + "\nequities = \n"; + + for (StockHolding stock : stockHoldings){ + returnString += " stock " + stock.getStockCode() + " number held = " + stock.getNumberHeld() + "\n"; + } + + returnString += + "transactions = \n"; + + for(String transaction : transactions){ + returnString += " " + transaction + "\n"; + } + + return returnString; + } +} diff --git a/sandbox/slaws/bank-challenge/common-contribution/src/main/java/bank/StockHolding.java b/sandbox/slaws/bank-challenge/common-contribution/src/main/java/bank/StockHolding.java new file mode 100644 index 0000000000..8bd0afd2be --- /dev/null +++ b/sandbox/slaws/bank-challenge/common-contribution/src/main/java/bank/StockHolding.java @@ -0,0 +1,58 @@ +/* + * 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 bank; + +import java.io.Serializable; + +/** + * A stock quote + */ +public class StockHolding implements Serializable { + + private String stockCode; + private int numberHeld; + private long price; + + public StockHolding(String stockCode, int numberHeld, long price){ + this.stockCode = stockCode; + this.numberHeld = numberHeld; + this.price = price; + } + + public String getStockCode() { + return stockCode; + } + + public int getNumberHeld() { + return numberHeld; + } + + public void setNumberHeld(int numberHeld) { + this.numberHeld = numberHeld; + } + + public long getPrice() { + return price; + } + + @Override + public String toString() { + return stockCode + " - number=" + numberHeld + " - price=" + price; + } +} diff --git a/sandbox/slaws/bank-challenge/common-contribution/src/main/java/bank/StockQuote.java b/sandbox/slaws/bank-challenge/common-contribution/src/main/java/bank/StockQuote.java new file mode 100644 index 0000000000..3bec8019b7 --- /dev/null +++ b/sandbox/slaws/bank-challenge/common-contribution/src/main/java/bank/StockQuote.java @@ -0,0 +1,52 @@ +/* + * 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 bank; + +import java.io.Serializable; + +/** + * A stock quote + */ +public class StockQuote implements Serializable { + + private String stockCode; + private long stockQuote; + + public StockQuote(String stockCode, long stockQuote){ + this.stockCode = stockCode; + this.stockQuote = stockQuote; + } + + public String getStockCode() { + return stockCode; + } + + public long getStockQuote() { + return stockQuote; + } + + public void setStockQuote(long stockQuote) { + this.stockQuote = stockQuote; + } + + @Override + public String toString() { + return stockCode + " - " + stockQuote; + } +} diff --git a/sandbox/slaws/bank-challenge/common-contribution/src/main/resources/META-INF/sca-contribution.xml b/sandbox/slaws/bank-challenge/common-contribution/src/main/resources/META-INF/sca-contribution.xml new file mode 100644 index 0000000000..d96d586130 --- /dev/null +++ b/sandbox/slaws/bank-challenge/common-contribution/src/main/resources/META-INF/sca-contribution.xml @@ -0,0 +1,23 @@ + + + + + \ No newline at end of file diff --git a/sandbox/slaws/bank-challenge/launcher/pom.xml b/sandbox/slaws/bank-challenge/launcher/pom.xml new file mode 100644 index 0000000000..1aa5f0ae1f --- /dev/null +++ b/sandbox/slaws/bank-challenge/launcher/pom.xml @@ -0,0 +1,92 @@ + + + + 4.0.0 + + org.apache.tuscany.sca + tuscany-sca + 2.0-SNAPSHOT + ../../pom.xml + + sandbox-bank-challenge-launcher + Apache Tuscany SCA Sandbox Bank Challenge Launcher + war + + + + + org.apache.tuscany.sca + tuscany-sca-api + 2.0-SNAPSHOT + + + + org.apache.tuscany.sca + tuscany-node-api + 2.0-SNAPSHOT + + + + org.apache.tuscany.sca + tuscany-node-impl + 2.0-SNAPSHOT + runtime + + + + org.apache.tuscany.sca + tuscany-implementation-java-runtime + 2.0-SNAPSHOT + runtime + + + + org.apache.tuscany.sca + tuscany-binding-ws-runtime-axis2 + 2.0-SNAPSHOT + runtime + + + + org.apache.axis2 + axis2-webapp + 1.5.1 + war + + + + junit + junit + 4.8.1 + test + + + + org.apache.tuscany.sca + sandbox-common-contribution + 2.0-SNAPSHOT + + + + + + ${artifactId} + + diff --git a/sandbox/slaws/bank-challenge/launcher/src/main/java/launch/BankChallengeLauncher.java b/sandbox/slaws/bank-challenge/launcher/src/main/java/launch/BankChallengeLauncher.java new file mode 100644 index 0000000000..c643b64814 --- /dev/null +++ b/sandbox/slaws/bank-challenge/launcher/src/main/java/launch/BankChallengeLauncher.java @@ -0,0 +1,66 @@ +/* + * 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 launch; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +import org.apache.tuscany.sca.node.Contribution; +import org.apache.tuscany.sca.node.Node; +import org.apache.tuscany.sca.node.NodeFactory; + +import bank.ChallengeControl; + +public class BankChallengeLauncher { + + public static void main(String[] args) throws Exception { + Node node = NodeFactory.newInstance().createNode(new Contribution("Bank", "../bank-contribution/target/classes"), + new Contribution("Common", "../common-contribution/target/classes"), + new Contribution("SLClient", "../client-sl-contribution/target/classes")); + node.start(); + + List bankClients = new ArrayList(); + + bankClients.add(node.getService(ChallengeControl.class, "ClientComponentSL")); + + // start all clients + Iterator bankClientsIterator = bankClients.iterator(); + while(bankClientsIterator.hasNext()){ + bankClientsIterator.next().start(); + } + + for(int i=0; i<10; i++){ + // increment all clients + bankClientsIterator = bankClients.iterator(); + while(bankClientsIterator.hasNext()){ + bankClientsIterator.next().increment(); + } + } + + // stop all clients + bankClientsIterator = bankClients.iterator(); + while(bankClientsIterator.hasNext()){ + bankClientsIterator.next().stop(); + } + + node.stop(); + } +} diff --git a/sandbox/slaws/bank-challenge/pom.xml b/sandbox/slaws/bank-challenge/pom.xml index ffe45c0d26..55b0e89d62 100644 --- a/sandbox/slaws/bank-challenge/pom.xml +++ b/sandbox/slaws/bank-challenge/pom.xml @@ -43,6 +43,7 @@ true + common-contribution bank-contribution client-sl-contribution launcher -- cgit v1.2.3