001    package videoautomat;
002    import sale.SaleProcess;
003    import sale.SalesPoint;
004    import users.ActionCapability;
005    import users.User;
006    import data.ooimpl.DataBasketImpl;
007    import data.ooimpl.StoringStockImpl;
008    
009    /**
010     * This class implements the <code>User</code> of this application. It contains a <code>StoringStock</code> for
011     * storing the actually rented videos and holds the information which capabilities the user has.
012     */
013    public class AutomatUser extends User {
014            /**
015             * Key used to get the <code>ActionCapability</code> used to start a {@link SaleProcessAdmin}.
016             */
017            public static final String CAPABILITY_ADMIN = "admin";
018            /*
019             * The stock which holds the rented videos.
020             */
021            private StoringStockImpl ss_videos;
022            /**
023             * Constructs a new <code>AutomatUser</code>.
024             * 
025             * @param user_ID
026             *                  the ID of the new user
027             * @param admin
028             *                  boolean to decide, whether this user has administrator privileges or not
029             */
030            public AutomatUser(String user_ID, char[] passWd, boolean admin) {
031                    super(user_ID);
032                    setPassWd(garblePassWD(passWd));
033                    ss_videos = new StoringStockImpl(user_ID, VideoShop.getVideoCatalog());
034                    ss_videos.addStockChangeListener(new StockChangeLogger(user_ID));
035                    setCapability(new ActionCapability(
036                            CAPABILITY_ADMIN,
037                            VideoShop.MSG_ACCESS,
038                            new sale.Action() {
039                            public void doAction(SaleProcess p, SalesPoint sp) throws Throwable {
040                                    sp.runProcess(new SaleProcessAdmin(), new DataBasketImpl());
041                            }
042                    }, admin));
043            }
044            /**
045             * @return a <code>StoringStock</code> containing the rented {@link VideoCassette}s of this user
046             */
047            public StoringStockImpl getVideoStock() {
048                    return ss_videos;
049            }
050    }
051