001 package videoautomat; 002 import sale.*; 003 import users.ActionCapability; 004 import users.User; 005 import users.UserManager; 006 import users.stdforms.LogOnForm; 007 import videoautomat.gui.LogOn; 008 import data.ooimpl.DataBasketImpl; 009 010 /** 011 * This class implements a <code>SaleProcess</code> used to log on and choose which activity should follow. 012 * 013 */ 014 public class SaleProcessLogOn extends SaleProcess { 015 016 /* 017 * The initial Gate of this process, at which the user selects it`s ID and type in the password 018 */ 019 private UIGate uig_log_on = new UIGate(null, null); 020 021 /* 022 * This Gate is set if the user selected no name or typed in the wrong password 023 */ 024 private UIGate uig_fault = new UIGate(null, null); 025 026 /* 027 * At this Gate the user selects his/her further activities e.g. renting/handing back a video or administrative 028 * stuff 029 */ 030 private UIGate uig_main = new UIGate(null, null); 031 032 /* 033 * A LogOnForm used for the uig_log_on 034 */ 035 private LogOnForm lof_initial = null; 036 /* 037 * Refers to the current user 038 */ 039 private User u_current = null; 040 /** 041 * Constructs a new <code>SaleProcessLogOn</code> 042 * 043 */ 044 public SaleProcessLogOn() { 045 super("SaleProcessLogOn"); 046 } 047 048 /** 049 * Implementation of the inherited abstract method. 050 * 051 * @return a <code>Gate</code> where the user selects it`s user-name and is asked for his/her password. 052 * 053 * @see sale.SaleProcess#getInitialGate() 054 */ 055 protected Gate getInitialGate() { 056 lof_initial = LogOn.getLogOnForm(true, UserManager.getGlobalUM(), null, null); 057 lof_initial.addContentCreator(new FormSheetContentCreator() { 058 protected void createFormSheetContent(FormSheet sheet) { 059 sheet.getButton(FormSheet.BTNID_OK).setAction(new sale.Action() { 060 public void doAction(SaleProcess process, SalesPoint point) { 061 uig_log_on.setNextTransition(logOn()); 062 } 063 }); 064 sheet.getButton(FormSheet.BTNID_CANCEL).setAction(new sale.Action() { 065 public void doAction(SaleProcess process, SalesPoint point) { 066 uig_log_on.setNextTransition( 067 GateChangeTransition.CHANGE_TO_STOP_GATE); 068 } 069 }); 070 } 071 }); 072 uig_log_on.setFormSheet(lof_initial); 073 return uig_log_on; 074 } 075 /** 076 * @return a <code>Gate</code> that shows an error-message. 077 */ 078 private Gate getFaultGate() { 079 FormSheet fs_fault = LogOn.getFaultFormSheet(); 080 081 fs_fault.addContentCreator(new FormSheetContentCreator() { 082 protected void createFormSheetContent(FormSheet sheet) { 083 sheet.getButton(FormSheet.BTNID_OK).setAction(new sale.Action() { 084 public void doAction(SaleProcess process, SalesPoint point) { 085 uig_fault.setNextTransition( 086 new GateChangeTransition(getInitialGate())); 087 } 088 }); 089 } 090 }); 091 092 uig_fault.setFormSheet(fs_fault); 093 return uig_fault; 094 } 095 /** 096 * @return a <code>Gate</code> where the user can select the next activity, like renting a video. 097 */ 098 private Gate getMainGate() { 099 FormSheet fs_main = 100 LogOn.getMainFormSheet( 101 VideoShop.getVideoStock(), 102 uig_main, 103 false, 104 new TEDVideoStock()); 105 fs_main.addContentCreator(new FormSheetContentCreator() { 106 protected void createFormSheetContent(FormSheet fs) { 107 fs.getButton(LogOn.FB_RENT).setAction(new sale.Action() { 108 public void doAction(SaleProcess p, SalesPoint sp) { 109 sp.runProcess(new SaleProcessRent(), new DataBasketImpl()); 110 } 111 }); 112 fs.getButton(LogOn.FB_HANDBACK).setAction(new sale.Action() { 113 public void doAction(SaleProcess p, SalesPoint sp) { 114 sp.runProcess(new SaleProcessHandBack(), new DataBasketImpl()); 115 } 116 }); 117 fs.getButton(LogOn.FB_ADMIN).setAction( 118 (ActionCapability) u_current.getCapability( 119 AutomatUser.CAPABILITY_ADMIN)); 120 fs.getButton(LogOn.FB_LOGOUT).setAction(new sale.Action() { 121 public void doAction(SaleProcess p, SalesPoint sp) { 122 sp.detachUser(); 123 uig_main.setNextTransition( 124 GateChangeTransition.CHANGE_TO_STOP_GATE); 125 } 126 }); 127 } 128 }); 129 uig_main.setFormSheet(fs_main); 130 return uig_main; 131 } 132 /** 133 * @return a <code>Transition</code> that proves the selected name and password and with success leads to the 134 * {@link SaleProcessLogOn#getMainGate()}, otherwise it returns the 135 * {@link SaleProcessLogOn#getFaultGate()}. 136 */ 137 private Transition logOn() { 138 return new Transition() { 139 public Gate perform(SaleProcess process, User user) { 140 lof_initial.ok(); 141 u_current = lof_initial.getResult(); 142 if (u_current != null) { 143 ((SalesPoint) process.getContext()).attach(u_current); 144 return getMainGate(); 145 } 146 return getFaultGate(); 147 } 148 }; 149 } 150 }