001 package market; 002 003 import java.awt.Rectangle; 004 005 import market.stdform.FSLogOn; 006 import sale.Action; 007 import sale.FormSheet; 008 import sale.Gate; 009 import sale.GateChangeTransition; 010 import sale.SaleProcess; 011 import sale.SalesPoint; 012 import sale.Shop; 013 import sale.UIGate; 014 import sale.stdforms.MsgForm; 015 import users.User; 016 import users.UserManager; 017 import users.stdforms.LogOnForm; 018 import users.swing.UserFilter; 019 020 /** 021 * SaleProcess used to log on a UPerson to the system. 022 */ 023 public class SProcessLogOn extends SProcessMarket { 024 025 /** 026 * ID for serialization. 027 */ 028 private static final long serialVersionUID = 3637352363865291661L; 029 030 /** 031 * Stores which kind of person wants to log on, look also at constants in UMUserBase 032 */ 033 private int userType; 034 035 /** 036 * UserFilter used to show the right Users in a LogOnForm 037 */ 038 private UserFilter uf_filter; 039 040 /** 041 * LogOnForm used by select-user-gate 042 */ 043 private LogOnForm lof_selection; 044 045 /** 046 * Gate for selecting username. 047 */ 048 private UIGate uig_selectUser = new UIGate(null, null); 049 050 /** 051 * Gate for displaying the log on was unsuccessful. 052 */ 053 private UIGate uig_logOnFailed = new UIGate(null, null); 054 055 /** 056 * Gate for displaying the user has already logged on. 057 */ 058 private UIGate uig_userIsLogged = new UIGate(null, null); 059 060 /** 061 * Create a new SProcessLogOn 062 * 063 * @param i the kind of User who wants to log on 064 */ 065 private SProcessLogOn(int i){ 066 super("Log-on-Process"); 067 this.userType = i; 068 069 // choice what kind of user wants to log on 070 switch(userType){ 071 case UMUserBase.CUSTOMER: 072 uf_filter = ((UMUserBase)UserManager.getGlobalUM()).getCustomers(); 073 break; 074 case UMUserBase.WAREHOUSE_WORKER: 075 uf_filter = ((UMUserBase)UserManager.getGlobalUM()).getWarehouseWorker(); 076 break; 077 case UMUserBase.SELLER: 078 uf_filter = ((UMUserBase)UserManager.getGlobalUM()).getSeller(); 079 break; 080 case UMUserBase.MANAGER: 081 uf_filter = ((UMUserBase)UserManager.getGlobalUM()).getManager(); 082 } 083 } 084 085 /** 086 * Attaches a {@link FSLogOn} and its actions to {@link #uig_selectUser}. 087 * @return the set up {@link #uig_selectUser}. 088 */ 089 protected Gate getInitialGate() { 090 lof_selection = new FSLogOn(uf_filter); 091 setAction(lof_selection, new Action(){ 092 private static final long serialVersionUID = 8349332623530161898L; 093 public void doAction(SaleProcess process, SalesPoint point) { 094 int error = 0; 095 lof_selection.ok(); 096 User user = lof_selection.getResult(); 097 if(UMUserBase.isLoggedOn(user)) error = 1; 098 if(user == null) error = 2; 099 switch (error) { 100 case 1: 101 uig_selectUser.setNextTransition( 102 new GateChangeTransition(getUserIsLoggedGate())); 103 break; 104 case 2: 105 uig_selectUser.setNextTransition( 106 new GateChangeTransition(getLogOnFailedGate())); 107 break; 108 default: 109 process.detachContext(); 110 switch(userType){ 111 case UMUserBase.CUSTOMER: 112 // TODO: ???????????????? 113 //SMarket.getTheMarket().removeSalesPoint(point); 114 point.attach(user); 115 point.setSalesPointFrameBounds(new Rectangle(0,0,640,480)); 116 point.runProcess(new SProcessCustomer((UCustomer)user)); 117 uig_selectUser.setNextTransition(GateChangeTransition.CHANGE_TO_STOP_GATE); 118 break; 119 case UMUserBase.WAREHOUSE_WORKER: 120 point.attach(user); 121 point.setSalesPointFrameBounds(new Rectangle(0,0,640,480)); 122 SMarket.fireUpdateWorkerScreen(); 123 point.runProcess(new SProcessWorker(((UStaffer)user).getFullName())); 124 uig_selectUser.setNextTransition(GateChangeTransition.CHANGE_TO_STOP_GATE); 125 break; 126 case UMUserBase.SELLER: 127 point.attach(user); 128 point.setSalesPointFrameBounds(new Rectangle(0,0,640,480)); 129 point.runProcess(new SProcessSeller(((UStaffer)user).getFullName())); 130 uig_selectUser.setNextTransition(GateChangeTransition.CHANGE_TO_STOP_GATE); 131 break; 132 case UMUserBase.MANAGER: 133 point.attach(user); 134 point.setSalesPointFrameBounds(new java.awt.Rectangle(0,0,720,540)); 135 point.runProcess(new SProcessManager()); 136 uig_selectUser.setNextTransition(GateChangeTransition.CHANGE_TO_STOP_GATE); 137 break; 138 } 139 break; 140 } 141 }}, FormSheet.BTNID_OK); 142 143 setAction(lof_selection, new Action(){ 144 private static final long serialVersionUID = -7900596031071636204L; 145 public void doAction(SaleProcess process, SalesPoint point) throws Throwable { 146 uig_selectUser.setNextTransition(GateChangeTransition.CHANGE_TO_STOP_GATE); 147 point.processFinished(process); 148 SMarket.getTheMarket().removeSalesPoint(point); 149 } 150 }, FormSheet.BTNID_CANCEL); 151 152 uig_selectUser.setFormSheet(lof_selection); 153 return uig_selectUser; 154 } 155 156 /** 157 * Attaches a {@link MsgForm} and its OK-action to {@link #uig_logOnFailed}. 158 * @return the set up {@link #uig_logOnFailed}. 159 */ 160 private Gate getLogOnFailedGate(){ 161 FormSheet fs = new MsgForm("Anmeldung fehlgeschlagen", "Das System konnte Sie nicht anmelden!\n" 162 + "Bitte überprüfen Sie Nutzernamen und Passwort."); 163 setTransition(fs, new GateChangeTransition(getInitialGate()), FormSheet.BTNID_OK); 164 uig_logOnFailed.setFormSheet(fs); 165 return uig_logOnFailed; 166 } 167 168 /** 169 * Attaches a {@link MsgForm} and its OK-action to {@link #uig_userIsLogged}. 170 * @return the set up {@link #uig_userIsLogged}. 171 */ 172 private Gate getUserIsLoggedGate(){ 173 FormSheet fs = new MsgForm("Anmeldung fehlgeschlagen", "Sie sind bereits am System angemeldet!"); 174 setTransition(fs, new GateChangeTransition(getInitialGate()), FormSheet.BTNID_OK); 175 uig_userIsLogged.setFormSheet(fs); 176 return uig_userIsLogged; 177 } 178 179 180 // ################################### public methods ################################################## 181 182 /** 183 * Returns an Action that initiates a SProcessLogOn 184 * 185 * @param i what kind of user wants to log on, look at the constants of UMUserBase 186 * 187 * @see UMUserBase 188 */ 189 public static Action createLogOnProcess(final int i){ 190 return new Action(){ 191 private static final long serialVersionUID = 3040152719423537743L; 192 public void doAction(SaleProcess p, SalesPoint sp) throws Throwable { 193 SProcessLogOn splo = new SProcessLogOn(i); 194 SPListenable point = new SPListenable("Sohn&Sohn"); 195 point.setSalesPointFrameBounds(new Rectangle(0,0,500,125)); 196 Shop.getTheShop().addSalesPoint(point); 197 point.runProcess(splo); 198 } 199 }; 200 } 201 } 202