core: import java.lang.*; import java.io.*; import edu.neu.ccs.demeter.dj.*; import java.util.*; import edu.neu.ccs.demeter.*; add: abstract class AccountType { public constructor AccountType() {{ super(); }} {{ private static HashMap subclassMap = null; //holds objects of all subclasses of AccountType }} private static void setUpSubclassMap() {{ /* populates the subclass table */ subclassMap = new HashMap(); subclassMap.put("1", new Savings()); subclassMap.put("2", new Checking()); subclassMap.put("3", new Overdraft()); subclassMap.put("4", new CD()); subclassMap.put("5", new Loan()); }} public static AccountType prompt(String prompt) {{ /* Creates an AccountType based on user input input: prompt - a string to prompt the user output: a new AccountType object described by the user */ String choice; AccountType returnType; System.out.println(prompt + "\n1) savings \n 2) checking \n 3) overdraft \n 4) CD \n 5) loan"); choice = Main.promptString(""); if ((choice != "1") && (choice != "2") && (choice != "3") && (choice != "4") && (choice != "5")) { System.out.println("Error reading account type. Will be set to savings"); choice = "1"; } returnType = (AccountType) subclassMap.get(choice); return returnType; }} {{ void universal_trv0_bef(UniversalVisitor _v_) { ((UniversalVisitor) _v_).before(this); } }} {{ void universal_trv0_aft(UniversalVisitor _v_) { ((UniversalVisitor) _v_).after(this); } }} {{ void universal_trv0(UniversalVisitor _v_) { } }} {{ void everything_Bank_trv_bef(PrintVisitor __v0) { ((UniversalVisitor) __v0).before(this); } }} {{ void everything_Bank_trv_aft(PrintVisitor __v0) { ((UniversalVisitor) __v0).after(this); } }} {{ void everything_Bank_trv(PrintVisitor __v0) { } }} {{ void __trav_print_Bank_trv_bef(PrintVisitor __v0) { ((UniversalVisitor) __v0).before(this); } }} {{ void __trav_print_Bank_trv_aft(PrintVisitor __v0) { ((UniversalVisitor) __v0).after(this); } }} {{ void __trav_print_Bank_trv(PrintVisitor __v0) { } }} {{ void __trav_display_Bank_trv_bef(DisplayVisitor __v0) { ((UniversalVisitor) __v0).before(this); } }} {{ void __trav_display_Bank_trv_aft(DisplayVisitor __v0) { ((UniversalVisitor) __v0).after(this); } }} {{ void __trav_display_Bank_trv(DisplayVisitor __v0) { } }} {{ void __trav_viewAccount_Account_trv_bef(PrintVisitor __v0) { ((UniversalVisitor) __v0).before(this); } }} {{ void __trav_viewAccount_Account_trv_aft(PrintVisitor __v0) { ((UniversalVisitor) __v0).after(this); } }} {{ void __trav_viewAccount_Account_trv(PrintVisitor __v0) { } }} }