/* * 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 org.apache.shiro.samples.aspectj.bank; import org.apache.commons.lang.builder.ToStringBuilder; import org.apache.commons.lang.builder.ToStringStyle; import java.sql.Timestamp; import java.util.ArrayList; import java.util.Date; import java.util.List; public class Account { private static long _SEQUENCE; private long _id; private String _ownerName; private volatile boolean _isActive; private double _balance; private final List<AccountTransaction> _transactions; private String _createdBy; private Date _creationDate; public Account(String anOwnerName) { _id = ++_SEQUENCE; _ownerName = anOwnerName; _isActive = true; _balance = 0.0d; _transactions = new ArrayList<AccountTransaction>(); _createdBy = "unknown"; _creationDate = new Date(); } /** * Returns the id attribute. * * @return The id value. */ public long getId() { return _id; } /** * Returns the ownerName attribute. * * @return The ownerName value. */ public String getOwnerName() { return _ownerName; } /** * Returns the isActive attribute. * * @return The isActive value. */ public boolean isActive() { return _isActive; } /** * Changes the value of the attributes isActive. * * @param aIsActive The new value of the isActive attribute. */ public void setActive(boolean aIsActive) { _isActive = aIsActive; } /** * Changes the value of the attributes ownerName. * * @param aOwnerName The new value of the ownerName attribute. */ public void setOwnerName(String aOwnerName) { _ownerName = aOwnerName; } /** * Returns the balance attribute. * * @return The balance value. */ public double getBalance() { return _balance; } /** * Returns the transactions attribute. * * @return The transactions value. */ public List<AccountTransaction> getTransactions() { return _transactions; } protected void applyTransaction(AccountTransaction aTransaction) throws NotEnoughFundsException, InactiveAccountException { if (!_isActive) { throw new InactiveAccountException("Unable to apply " + aTransaction.getType() + " of amount " + aTransaction.getAmount() + " to account " + _id); } synchronized (_transactions) { if (AccountTransaction.TransactionType.DEPOSIT == aTransaction.getType()) { _transactions.add(aTransaction); _balance += aTransaction.getAmount(); } else if (AccountTransaction.TransactionType.WITHDRAWAL == aTransaction.getType()) { if (_balance < aTransaction.getAmount()) { throw new NotEnoughFundsException("Unable to withdraw " + aTransaction.getAmount() + "$ from account " + _id + " - current balance is " + _balance); } _transactions.add(aTransaction); _balance -= aTransaction.getAmount(); } else { throw new IllegalArgumentException("The transaction passed in has an invalid type: " + aTransaction.getType()); } } } /** * Changes the value of the attributes createdBy. * * @param aCreatedBy The new value of the createdBy attribute. */ protected void setCreatedBy(String aCreatedBy) { _createdBy = aCreatedBy; } /** * Returns the createdBy attribute. * * @return The createdBy value. */ public String getCreatedBy() { return _createdBy; } /** * Returns the creationDate attribute. * * @return The creationDate value. */ public Date getCreationDate() { return _creationDate; } /* (non-Javadoc) * @see java.lang.Object#toString() */ public String toString() { return new ToStringBuilder(this, ToStringStyle.SHORT_PREFIX_STYLE). append("id", _id). append("ownerName", _ownerName). append("isActive", _isActive). append("balance", _balance). append("tx.count", _transactions.size()). append("createdBy", _createdBy). append("creationDate", new Timestamp(_creationDate.getTime())). toString(); } }