summaryrefslogtreecommitdiffstats
path: root/sandbox/slaws/bank-challenge/common-contribution/src/main/java/bank/Statement.java
diff options
context:
space:
mode:
Diffstat (limited to 'sandbox/slaws/bank-challenge/common-contribution/src/main/java/bank/Statement.java')
-rw-r--r--sandbox/slaws/bank-challenge/common-contribution/src/main/java/bank/Statement.java143
1 files changed, 143 insertions, 0 deletions
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;
+ }
+}