001    package videoautomat;
002    import sale.Shop;
003    import users.UserManager;
004    import data.Catalog;
005    import data.CatalogItem;
006    import data.CountingStock;
007    import data.IntegerValue;
008    import data.NumberValue;
009    import data.QuoteValue;
010    import data.ooimpl.CatalogItemImpl;
011    import data.ooimpl.EUROCurrencyImpl;
012    import data.ooimpl.MoneyBagImpl;
013    
014    /**
015     * This class implements the start up of the whole application, it contains also the main void of
016     * this app.
017     *  
018     */
019    public class MainClass {
020            
021            /**
022             * Represents the cost per day for renting a video.
023             */
024            public static NumberValue RENT_VALUE_DAY = new IntegerValue(200);
025            /**
026             * The main void of the application, starts up the automat.
027             * 
028             * @param arqs
029             *                  takes no effect
030             */
031    
032            public static void main(String arqs[]) {
033                    VideoShop shop = new VideoShop();
034                    Shop.setTheShop(shop);
035                    shop.start();
036                    shop.addSalesPoint(new VideoAutomat());
037                    initializeVideos();             
038                    initializeUsers();
039                    initializeMoney();
040            }
041    
042            /**
043             * Method to initial add some coins to the {@link VideoShop}s <code>MoneyBag</code>.
044             *  
045             */
046            public static void initializeMoney() {
047                    MoneyBagImpl mbi =
048                            (MoneyBagImpl) Shop.getTheShop().getStock(VideoShop.MB_MONEY);
049                    mbi.add(EUROCurrencyImpl.CENT_STCK_10, 100, null);
050                    mbi.add(EUROCurrencyImpl.CENT_STCK_20, 100, null);
051                    mbi.add(EUROCurrencyImpl.CENT_STCK_50, 100, null);
052                    mbi.add(EUROCurrencyImpl.EURO_STCK_1, 100, null);
053                    mbi.add(EUROCurrencyImpl.EURO_STCK_2, 50, null);
054                    mbi.add(EUROCurrencyImpl.EURO_SCHEIN_10, 100, null);
055                    mbi.add(EUROCurrencyImpl.EURO_SCHEIN_20, 10, null);
056            }
057            /**
058             * Method to initial add some videos to the {@link VideoShop}s <code>Stock</code>.
059             *  
060             */
061            public static void initializeVideos() {
062            
063            Catalog videoCatalog = VideoShop.getVideoCatalog();
064            CountingStock videoStock = VideoShop.getVideoStock(); 
065                    
066            for (int i = 0; i < 10; i++) { 
067                            String s = "Video-" + i;
068                CatalogItem video = new CatalogItemImpl(s,
069                                          new QuoteValue(new IntegerValue(1500),new IntegerValue(3000))) {
070                       // implementation of the inherited abstract method
071                       protected CatalogItemImpl getShallowClone() {
072                           return null;
073                       }
074                 };
075                 
076                 videoCatalog.add(video, null);
077                             videoStock.add(s, 5, null);
078                    }
079            }
080    
081            /**
082             * Method to initial add some users to the global <code>UserManager</code>.
083             *  
084             */
085            public static void initializeUsers() {
086                    UserManager.getGlobalUM().addUser(new AutomatUser("Administrator", new char[0], true));
087                    for (int i = 0; i < 10; i++) {
088                            UserManager.getGlobalUM().addUser(
089                                    new AutomatUser("Customer" + i, new char[0], false));
090                    }
091            }
092    }