summaryrefslogtreecommitdiffstats
path: root/sandbox/slaws/bank-challenge/bank-contribution/src/main/java/bank/impl/BankServiceImpl.java
diff options
context:
space:
mode:
Diffstat (limited to 'sandbox/slaws/bank-challenge/bank-contribution/src/main/java/bank/impl/BankServiceImpl.java')
-rw-r--r--sandbox/slaws/bank-challenge/bank-contribution/src/main/java/bank/impl/BankServiceImpl.java180
1 files changed, 180 insertions, 0 deletions
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
new file mode 100644
index 0000000000..9b49f39ef1
--- /dev/null
+++ b/sandbox/slaws/bank-challenge/bank-contribution/src/main/java/bank/impl/BankServiceImpl.java
@@ -0,0 +1,180 @@
+/*
+ * 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.impl;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Random;
+
+import org.oasisopen.sca.annotation.Scope;
+import org.oasisopen.sca.annotation.Service;
+
+import bank.BankService;
+import bank.Statement;
+import bank.StockHolding;
+import bank.StockQuote;
+
+/**
+ * An implementation of the Bank service.
+ */
+@Service(BankService.class)
+@Scope("COMPOSITE")
+public class BankServiceImpl implements BankService {
+
+ protected int initialCredit = 1000;
+ protected int overdrawnCost = 1;
+ protected int statementCost = 1;
+ protected int stockQuoteCost = 1;
+ protected int stockTransactionCost = 1;
+
+ private List<StockQuote> stocks = new ArrayList<StockQuote>();
+ private List<Statement> accounts = new ArrayList<Statement>();
+
+ private Random generator = new Random();
+
+ private HashMap<String, StockQuote> stockMap = new HashMap<String, StockQuote>();
+ private HashMap<String, Statement> accountMap = new HashMap<String, Statement>();
+
+ public BankServiceImpl(){
+
+ // TODO - Data to come from composite file
+ // initial stocks
+ stocks.add(new StockQuote("ABC", 100));
+ stocks.add(new StockQuote("DEF", 123));
+ stocks.add(new StockQuote("GHI", 543));
+
+ // initial users
+ accounts.add(new Statement("SL", null, 0, null));
+ accounts.add(new Statement("AE", null, 0, null));
+ accounts.add(new Statement("KG", null, 0, null));
+
+ // create map for easy access
+
+ for (StockQuote stock : stocks){
+ stockMap.put(stock.getStockCode(), stock);
+ }
+ }
+
+ // public interface
+
+ public String createAccount(String customerName) {
+ for (Statement statement : accounts){
+ if (statement.getCustomerName().equals(customerName)){
+ accountMap.put(statement.getAccountID(), statement);
+ statement.getTransactions().add("account created");
+ statement.creditCashBalance(initialCredit, "starting balance");
+ return statement.getAccountID();
+ }
+ }
+ return "Customer Name Not Found";
+ }
+
+ public Statement getStatement(String accountID) {
+ Statement statement = accountMap.get(accountID);
+
+ if(statement != null){
+ statement.debitCashBalance(statementCost, "retrieved statement");
+ if (statement.getCashBalance() < 0){
+ statement.debitCashBalance(overdrawnCost, "account overdrawn");
+ }
+ }
+ return statement;
+ }
+
+ public void buyEquity(String accountID, String equityCode, int number) {
+ updateStockPrices();
+ StockQuote stock = stockMap.get(equityCode);
+
+ if (stock == null){
+ return;
+ }
+
+ long cost = stock.getStockQuote() * number;
+ Statement statement = accountMap.get(accountID);
+
+ if(statement != null){
+ if (statement.getCashBalance() > cost){
+ StockHolding stockHolding = new StockHolding(equityCode, number, stock.getStockQuote());
+ statement.creditStockHolding(stockHolding);
+ statement.debitCashBalance(stockTransactionCost, "stock transaction (buy) " + equityCode);
+
+ }
+ }
+ }
+
+ public void sellEquity(String accountID, String equityCode, int number) {
+ updateStockPrices();
+ StockQuote stock = stockMap.get(equityCode);
+
+ if (stock == null){
+ return;
+ }
+
+ Statement statement = accountMap.get(accountID);
+
+ if(statement != null){
+ StockHolding stockHolding = new StockHolding(equityCode, number, stock.getStockQuote());
+ statement.debitStockHolding(stockHolding);
+ statement.debitCashBalance(stockTransactionCost, "stock transaction (sell) " + equityCode);
+ }
+ }
+
+ public StockQuote getStockQuote(String accountID, String equityCode) {
+ updateStockPrices();
+ Statement statement = accountMap.get(accountID);
+ StockQuote stockQuote = null;
+
+ if(statement != null){
+ statement.debitCashBalance(stockQuoteCost, "stock quote");
+ if (statement.getCashBalance() < 0){
+ statement.debitCashBalance(overdrawnCost, "account overdrawn");
+ }
+ stockQuote = stockMap.get(equityCode);
+ }
+
+ return stockQuote;
+ }
+
+ public List<StockQuote> getAllStockQuotes(String accountID) {
+ updateStockPrices();
+ Statement statement = accountMap.get(accountID);
+ List<StockQuote> stockQuote = null;
+
+ if(statement != null){
+ statement.debitCashBalance(stockQuoteCost * stocks.size(), "stock quote");
+ if (statement.getCashBalance() < 0){
+ statement.debitCashBalance(overdrawnCost, "account overdrawn");
+ }
+ stockQuote = stocks;
+ }
+
+ return stockQuote;
+ }
+
+ // private functions
+
+ private void updateStockPrices(){
+ for (StockQuote stock : stocks){
+ long stockQuote = stock.getStockQuote();
+ stockQuote += (generator.nextInt(10) - 5);
+ stock.setStockQuote(stockQuote);
+ }
+ }
+}