001 package videoautomat; 002 003 import sale.Gate; 004 import sale.SaleProcess; 005 import sale.SalesPoint; 006 import sale.UIGate; 007 import videoautomat.contentcreator.HandBackSTFSContentCreator; 008 import videoautomat.contentcreator.HandBackTTFSContentCreator; 009 import data.IntegerValue; 010 import data.NumberValue; 011 import data.StoringStock; 012 import data.ooimpl.MoneyBagImpl; 013 import data.ooimpl.StoringStockImpl; 014 import data.stdforms.SingleTableFormSheet; 015 import data.stdforms.TwoTableFormSheet; 016 import data.stdforms.twotableformsheet.SSSSStrategy; 017 018 /** 019 * This class implements a <code>SaleProcess</code> to hand back the videos. 020 * @author Alexander Herrmann 021 */ 022 public class SaleProcessHandBack extends SaleProcess { 023 024 /* 025 * Key of StoringStock to store temporary videos. 026 */ 027 public static final String SS_TEMP_KEY = "ss_temp"; 028 029 /* 030 * Key of a MoneyBag to store temporary the change money 031 */ 032 public static final String MB_TEMP_KEY = "mb_temp"; 033 034 /* 035 * Key of a NumberValue representing the change money 036 */ 037 public static final String CHG_MONEY_KEY = "nv_change"; 038 039 /** 040 * Constructs a new <code>SaleProcessHandBack</code> 041 * 042 */ 043 public SaleProcessHandBack() { 044 super("SaleProcessGiveback"); 045 } 046 047 /** 048 * Implementation of the inherited abstract method. 049 * 050 * @return the <code>Gate</code> where the user will see his/her current rented videos. 051 * @see sale.SaleProcess#getInitialGate() 052 * @author Alexander Herrmann 053 */ 054 protected Gate getInitialGate() { 055 056 // generate Gate 057 UIGate uig_video = new UIGate(null, null); 058 059 getContext().setProcessData(SS_TEMP_KEY, new StoringStockImpl("temp", VideoShop.getVideoCatalog())); 060 getContext().setProcessData(MB_TEMP_KEY, new MoneyBagImpl("temp", VideoShop.getCurrency())); 061 getContext().setProcessData(CHG_MONEY_KEY, new IntegerValue(0)); 062 063 TwoTableFormSheet ttfs_handback = 064 TwoTableFormSheet.create( 065 "Give back a video", 066 ((AutomatUser) ((SalesPoint) this.getContext()).getUser()).getVideoStock(), 067 (StoringStock) getContext().getProcessData(SS_TEMP_KEY), 068 getBasket(), 069 uig_video, 070 null, 071 null, 072 new TEDVideoCassette(), 073 new TEDVideoCassette(), 074 new SSSSStrategy() 075 ); 076 077 ttfs_handback.addContentCreator(new HandBackTTFSContentCreator()); 078 079 return uig_video; 080 } 081 082 public Gate restart() 083 { 084 return getInitialGate(); 085 } 086 087 /** 088 * @return the <code>Gate</code> where the user will see his/her change money. 089 * @author Alexander Herrmann 090 */ 091 public Gate getChangeGate() { 092 093 // generate Gate 094 UIGate uig_change = new UIGate(null, null); 095 096 SingleTableFormSheet stfs_change = 097 SingleTableFormSheet.create( 098 "Here is your change!", 099 (MoneyBagImpl) getContext().getProcessData(MB_TEMP_KEY), 100 uig_change, 101 getBasket()); 102 103 stfs_change.addContentCreator(new HandBackSTFSContentCreator( 104 (NumberValue) getContext().getProcessData(SaleProcessHandBack.CHG_MONEY_KEY))); 105 106 return uig_change; 107 } 108 109 }