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