diff options
Diffstat (limited to 'sandbox/slaws/bank-challenge/common-contribution/src/main')
6 files changed, 348 insertions, 0 deletions
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<StockQuote> 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<StockHolding> stockHoldings; + private List<String> transactions = new ArrayList<String>(); + + public Statement(){ + if (this.stockHoldings == null){ + this.stockHoldings = new ArrayList<StockHolding>(); + } + } + + public Statement(String customerName, String accountID, long cashBalance, List<StockHolding> 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<StockHolding>(); + } + } + + 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<StockHolding> 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<StockHolding> toRemove = new ArrayList<StockHolding>(); + + 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<String> 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 @@ +<?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/200912" + xmlns:sample="http://banking-challenge"> + <export.java package="bank"/> +</contribution>
\ No newline at end of file |