package postingrules; /*Generated by MPS */ import mf.NamedObject; import java.util.Map; import java.util.HashMap; import mf.Currency; import mf.Money; public class Customer extends NamedObject implements Subject { private ServiceAgreement myServiceAgreement; private Map<AccountType, Account> myAccounts; public Customer(String name) { myName = name; setUpAccounts(); } /*package*/ void setUpAccounts() { myAccounts = new HashMap<AccountType, Account>(); for (AccountType type : AccountType.values()) { myAccounts.put(type, new Account(Currency.USD, type)); } } public Account accountFor(AccountType type) { assert myAccounts.containsKey(type); return myAccounts.get(type); } @Override public void addEntry(Entry arg, AccountType type) { accountFor(type).addEntry(arg); } public Money balanceFor(AccountType key) { return accountFor(key).balance(); } /*package*/ void clearEntries() { setUpAccounts(); } public Map getAccounts() { return myAccounts; } @Override public Subject getAdjuster() { return this; } public ServiceAgreement getServiceAgreement() { return myServiceAgreement; } @Override public void reverseEntry(Entry arg) { Entry reversingEntry = new Entry(arg.getAmount().negate(), arg.getDate()); accountFor(arg.getAccount().type()).addEntry(reversingEntry); } @Override public void process(AccountingEvent e) { myServiceAgreement.process(e); } public void setAccounts(Map arg) { myAccounts = arg; } public void setServiceAgreement(ServiceAgreement arg) { myServiceAgreement = arg; } @Override public String toString() { StringBuffer result = new StringBuffer(); AccountType[] types = accountTypes(); for (AccountType type : types) { result.append(type); result.append(": "); result.append(accountFor(type).balance()); result.append("\n"); } return result.toString(); } /*package*/ AccountType[] accountTypes() { return (AccountType[]) myAccounts.keySet().toArray(new AccountType[0]); } }