001 import sale.*; 002 import sale.events.*; 003 import sale.stdforms.*; 004 import data.events.*; 005 import data.ooimpl.*; 006 import log.*; 007 import log.stdforms.*; 008 009 import java.io.*; 010 011 012 /** 013 * Diese Klasse implementiert das Büro. Hier kann der Manager das 014 * Logfile einsehen und Videos nachkaufen oder aus dem Bestand nehmen. 015 */ 016 public class Office extends SalesPoint 017 { 018 //// attributes //////////////////////////////////////////////////////////// 019 020 // Managerpasswort 021 private static String password; 022 023 024 //// constructor /////////////////////////////////////////////////////////// 025 026 /** 027 * Konstuktor erzeugt ein neues Objekt der Klasse <CODE>Office</CODE>. 028 */ 029 public Office(String name) 030 { 031 super(name); 032 033 // neuen StockChangeListener am Geldbestand des Automaten anmelden 034 ((MoneyBagImpl)Shop.getTheShop().getStock("coin slot")). 035 addStockChangeListener( 036 new StockChangeAdapter() 037 { 038 // StockItem wurde hinzugefuegt 039 public void commitAddStockItems (StockChangeEvent sce) 040 { 041 // der Geldbestand hat sich geaendert, FormSheet neu darstellen 042 refreshOfficeDisplay(); 043 } 044 045 // StockItem wurde geloescht 046 public void commitRemoveStockItems (StockChangeEvent sce) 047 { 048 // der Geldbestand hat sich geaendert, FormSheet neu darstellen 049 commitAddStockItems(sce); 050 } 051 } 052 ); 053 054 // neuen TimerListener am Timer des Automaten anmelden 055 Shop.getTheShop().getTimer().addTimerListener( 056 new TimerAdapter() 057 { 058 public void onGoneAhead (TimerEvent trEvt) 059 { 060 // wurde Zeit weitergeschalten, FormSheet neu darstellen 061 refreshOfficeDisplay(); 062 } 063 } 064 ); 065 } 066 067 /** 068 * Stellt nach Veränderungen der Daten das FormSheet neu dar 069 */ 070 protected void refreshOfficeDisplay() 071 { 072 if (getCurrentProcess() == null && hasUseableDisplay (null)) 073 try { 074 setFormSheet (null, getDefaultFormSheet()); 075 } 076 catch (InterruptedException iexc) { 077 System.err.println ("Update interrupted"); 078 } 079 } 080 081 //// public methods /////////////////////////////////////////////////////// 082 083 /** 084 * Gibt das Standard-FormSheet für das Büro zurück. 085 */ 086 public FormSheet getDefaultFormSheet() 087 { 088 return new FormSheet("Office", new DefaultOfficeFormCreator(this), false); 089 } 090 091 /** 092 * Gibt das Standard-MenuSheet zurück. 093 */ 094 public MenuSheet getDefaultMenuSheet() 095 { 096 // neues Menue anlegen, wird Wartungsmenue 097 MenuSheet msSubMenu = new MenuSheet("Maintenance"); 098 099 // neuen Menuepunkt zum Weiterschalten der Zeit anlegen 100 msSubMenu.add(new MenuSheetItem ("Advance time", 101 new sale.Action() 102 { 103 public void doAction(SaleProcess p, SalesPoint sp) 104 { 105 // Zeit weiterschalten 106 Shop.getTheShop().getTimer().goAhead(); 107 } 108 } 109 )); 110 111 // neuen Menuepunkt zum Einsehen der Log-Datei anlegen 112 msSubMenu.add (new MenuSheetItem ("See log file", 113 new sale.Action() 114 { 115 public void doAction (SaleProcess p, SalesPoint sp) 116 { 117 try { 118 // LogTableForm erzeugen 119 FileInputStream fis = new FileInputStream ("machine.log"); 120 LogInputStream lis = new LogInputStream (fis); 121 LogTableForm ltf = new LogTableForm ("View log file", lis); 122 123 // "Cancel"-Button entfernen 124 ltf.removeButton (FormSheet.BTNID_CANCEL); 125 126 // FormSheet setzen 127 setFormSheet (null, ltf); 128 } 129 130 // falls Datei nicht existiert 131 catch (FileNotFoundException fnfexc) { 132 try { 133 setFormSheet(null, new MsgForm("Error", "Log file not found.")); 134 } 135 catch (InterruptedException iexc) {} 136 } 137 138 // falls Fehler beim Lesen der Datei 139 catch (IOException ioexc) { 140 try { 141 setFormSheet(null, new MsgForm("Error", "Log file corrupt. It might be empty.")); 142 } 143 catch (InterruptedException iexc) {} 144 } 145 146 // falls Setzen des FormSheets unterbrochen 147 catch (InterruptedException iexc) { 148 try { 149 setFormSheet (null, new MsgForm ("Error", iexc.toString())); 150 } 151 catch (InterruptedException iexc2) {} 152 } 153 } 154 } 155 )); 156 157 158 // neuen Menuepunkt zum Einsehen und Editieren des Bestandes 159 msSubMenu.add(new MenuSheetItem ("Edit Video-Stock", 160 new sale.Action() 161 { 162 public void doAction(SaleProcess p, SalesPoint sp) 163 { 164 // Code zum Ausfuehren des Prozesses 165 sp.runProcess(new SeeVideoStockProcess()); 166 } 167 } 168 )); 169 170 // neues Menue anlegen, wird Menueleiste 171 MenuSheet msMenu = new MenuSheet("office menu"); 172 173 // Wartungsmenue in Menueleiste des Bueros einbauen 174 msMenu.add(msSubMenu); 175 176 // Menüleiste zurückgeben 177 return msMenu; 178 } 179 180 181 182 /** 183 * Setzt das Managerpasswort. 184 */ 185 public static void setPassword(String password) 186 { 187 Office.password = password; 188 } 189 190 191 /** 192 * Testet ob das übergebene Passwort das Managerpasswort ist. 193 */ 194 public static boolean testPassword(String password) 195 { 196 return password.equals(Office.password); 197 } 198 199 }