001    package videoautomat.gui;
002    import javax.swing.Box;
003    import javax.swing.BoxLayout;
004    import javax.swing.JComponent;
005    import javax.swing.JLabel;
006    import javax.swing.JPanel;
007    
008    import sale.FormSheet;
009    import sale.FormSheetContentCreator;
010    import sale.UIGate;
011    import util.swing.TableEntryDescriptor;
012    import data.Catalog;
013    import data.CountingStock;
014    import data.DataBasket;
015    import data.DataBasketCondition;
016    import data.stdforms.SingleTableFormSheet;
017    import data.stdforms.TwoTableFormSheet;
018    import data.stdforms.twotableformsheet.CCSStrategy;
019    import data.stdforms.twotableformsheet.CSDBStrategy;
020    
021    /**
022     * This class implements graphical-user-interface elements for the SaleProcessRent
023     */
024    public class Rent {
025            
026            /**
027             * An ID to identify the <code>FormButton</code> rent
028             */
029            public static final int FB_RENT = 1;
030            /**
031             * An ID to identify the <code>FormButton</code> pay
032             */
033            public static final int FB_PAY = 2;
034            /**
035             * An ID to identify the <code>FormButton</code> cancel
036             */
037            public static final int FB_CANCEL = 3;
038            /**
039             * @return a <code>TwoTableFormSheet</code> used to select the videos of the offer.
040             * @param cs_source
041             *                  the source <code>Stock</code> containing the avaible videos
042             * @param db
043             *                  the destination <code>DataBasket</code>
044             * @param uigGate
045             *                  the <code>UIGate</code> this <code>FormSheet</code> is displayed
046             * @param cmp_source
047             *                  the <code>Comparator</code> for the <code>Stock</code>
048             * @param cmp_dest
049             *                  the <code>Comparator</code> for the <code>DataBasket</code>
050             * @param show_zeros
051             *                  if false, lines containing a '0' in the "Count" field of the <code>Stock</code> will be hidden.
052             * @param ted_source
053             *                  the <code>TableEntryDescriptor</code> for the <code>Stock</code>
054             * @param ted_dest
055             *                  the <code>TableEntryDescriptor</code> for the <code>DataBasket</code>
056             * @param csdbs
057             *                  the <code>CSDBStrategy</code> to be used
058             *  
059             */
060            public static TwoTableFormSheet getRentFormSheet(
061                    CountingStock cs_source,
062                    DataBasket db,
063                    UIGate uigGate,
064                    java.util.Comparator cmp_source,
065                    java.util.Comparator cmp_dest,
066                    boolean show_zeros,
067                    TableEntryDescriptor ted_source,
068                    TableEntryDescriptor ted_dest,
069                    CSDBStrategy csdbs) {
070    
071                    TwoTableFormSheet ttfs =
072                            TwoTableFormSheet.create(
073                                    "Choose your videos!",
074                                    cs_source,
075                                    db,
076                                    uigGate,
077                                    cmp_source,
078                                    cmp_dest,
079                                    show_zeros,
080                                    ted_source,
081                                    ted_dest,
082                                    csdbs);
083    
084                    ttfs.addContentCreator(new FormSheetContentCreator() {
085                            public void createFormSheetContent(FormSheet fs) {
086                                    fs.removeAllButtons();
087                                    fs.addButton("Rent", FB_RENT, null);
088                                    fs.addButton("Cancel", FB_CANCEL, null);
089                            }
090                    });
091    
092                    return ttfs;
093            }
094            /**
095             * @return a <code>TwoTableFormSheet</code> used to select the money the user inserts in the automat.
096             * @param c_source
097             *                  the source <code>Catalog</code> containing the possible coins
098             * @param cs_dest
099             *                  the destination <code>Stock</code>
100             * @param db
101             *                  the <code>DataBasket</code> used for the transactions
102             * @param uig
103             *                  the <code>UIGate</code> this <code>FormSheet</code> is displayed
104             * @param cmp_source
105             *                  the <code>Comparator</code> for the <code>Catalog</code>
106             * @param cmp_dest
107             *                  the <code>Comparator</code> for the <code>Stock</code>
108             * @param show_zeros
109             *                  if false, lines containing a '0' in the "Count" field of the <code>Stock</code> will be hidden.
110             * @param ted_source
111             *                  the <code>TableEntryDescriptor</code> for the <code>Catalog</code>
112             * @param ted_dest
113             *                  the <code>TableEntryDescriptor</code> for the <code>Stock</code>
114             * @param ccss
115             *                  the <code>CCSStrategy</code> to be used
116             * @param value
117             *                  a <code>String</code> -representation of the value the user has to pay
118             *  
119             */
120            public static TwoTableFormSheet getPayFormSheet(
121                    Catalog c_source,
122                    CountingStock cs_dest,
123                    DataBasket db,
124                    UIGate uig,
125                    java.util.Comparator cmp_source,
126                    java.util.Comparator cmp_dest,
127                    boolean show_zeros,
128                    TableEntryDescriptor ted_source,
129                    TableEntryDescriptor ted_dest,
130                    CCSStrategy ccss,
131                    final String value) {
132    
133                    TwoTableFormSheet ttfs =
134                            TwoTableFormSheet.create(
135                                    "Throw the money in the slot, please.",
136                                    c_source,
137                                    cs_dest,
138                                    db,
139                                    uig,
140                                    cmp_source,
141                                    cmp_dest,
142                                    show_zeros,
143                                    ted_source,
144                                    ted_dest,
145                                    ccss);
146    
147                    ttfs.addContentCreator(new FormSheetContentCreator() {
148                            public void createFormSheetContent(FormSheet fs) {
149                                    
150                                    JComponent jc = new JPanel();
151                                    jc.setLayout(new BoxLayout(jc, BoxLayout.Y_AXIS));
152                                    jc.add(Box.createVerticalStrut(10));
153                                    jc.add(new JLabel("You have to pay: " + value));
154                                    jc.add(Box.createVerticalStrut(10));
155                                    jc.add(fs.getComponent());
156    
157                                    fs.setComponent(jc);
158                                    fs.removeAllButtons();
159                                    fs.addButton("Pay", FB_PAY, null);
160                                    fs.addButton("Cancel", FB_CANCEL, null);
161                            }
162                    });
163                    return ttfs;
164            }
165            /**
166             * @return a <code>FormSheet</code> which shows the rented videos and which money the user gets back
167             * @param db
168             *                  the <code>DataBasket</code> containig the rented videos
169             * @param dbc_videos
170             *                  a <code>DataBasketCondition</code> affecting that only the rented videos in the <code>DataBasket</code>
171             *                  are shown
172             * @param ted_videos
173             *                  the <code>TableEntryDescriptor</code> for the <code>DataBasket</code>
174             * @param cs_money
175             *                  the <code>Stock</code> containing the money
176             * @param uig
177             *                  the <code>UIGate</code> this <code>FormSheet</code> is displayed
178             *  
179             */
180            public static FormSheet getConfirmFormSheet(
181                    final DataBasket db,
182                    final DataBasketCondition dbc_videos,
183                    final TableEntryDescriptor ted_videos,
184                    final CountingStock cs_money,
185                    final UIGate uig) {
186                    SingleTableFormSheet stfs_videos =
187                            SingleTableFormSheet.create(
188                                    "Confirm your transaction!",
189                                    db,
190                                    uig,
191                                    dbc_videos,
192                                    ted_videos);
193    
194                    stfs_videos.addContentCreator(new FormSheetContentCreator() {
195                            public void createFormSheetContent(FormSheet fs) {
196                                    SingleTableFormSheet stfs_money =
197                                    SingleTableFormSheet.create("", cs_money, uig, db);
198                                    
199                                    JComponent jc = new JPanel();
200                                    jc.setLayout(new BoxLayout(jc, BoxLayout.Y_AXIS));
201                                    jc.add(new JLabel("All your rented videos:"));
202                                    jc.add(fs.getComponent());
203                                    jc.add(new JLabel("The money you`ll get back:"));
204                                    jc.add(stfs_money.getComponent());
205                                    jc.add(new JLabel("Please, click Ok to confirm the transaction!"));
206                                    fs.setComponent(jc);
207                                    fs.removeButton(FormSheet.BTNID_CANCEL);
208                            }
209                    });
210    
211                    return stfs_videos;
212            }
213    }