001    package org.cocome.tradingsystem.testdriver;
002    
003    import java.util.Date;
004    
005    import javax.naming.OperationNotSupportedException;
006    
007    import org.cocome.tradingsystem.inventory.data.store.ProductOrder;
008    import org.cocome.tradingsystem.inventory.data.store.StockItem;
009    import org.cocome.tradingsystem.inventory.data.store.Store;
010    import org.cocome.tradingsystem.systests.interfaces.IOrder;
011    import org.cocome.tradingsystem.systests.interfaces.IProduct;
012    import org.cocome.tradingsystem.systests.interfaces.IStorePC;
013    
014    /**
015     * Glue code for the store PC.
016     * 
017     * @author Benjamin Hummel
018     * @author $Author: hummel $
019     * @version $Rev: 63 $
020     * @levd.rating YELLOW Rev: 56
021     */
022    public class StorePC implements IStorePC {
023    
024            /** The index of this stock PC. */
025            private final int index;
026    
027            /** DB representation of this store. */
028            private final Store dbStore;
029    
030            /** Create a new stock PC. */
031            public StorePC(int index, Enterprise enterprise) {
032                    this.index = index;
033                    dbStore = new Store();
034                    dbStore.setEnterprise(enterprise.getDBEnterprise());
035                    dbStore.setLocation("Location " + index);
036                    dbStore.setName("Store" + index);
037                    DBManager.getInstance().persistDBObject(dbStore);
038            }
039    
040            /** {@inheritDoc} */
041            public int getAmount(IProduct product) {
042                    ProductWrapper wrapper = (ProductWrapper) product;
043                    StockItem item = DBManager.getInstance().getStoreQuery()
044                                    .queryStockItem(dbStore.getId(),
045                                                    wrapper.getProduct().getBarcode(),
046                                                    DBManager.getInstance().createPersistenceContext());
047                    return (int) item.getAmount();
048            }
049    
050            /** Returns the incoming amount for a product. */
051            /*package*/ int getIncomingAmount(IProduct product) {
052                    ProductWrapper wrapper = (ProductWrapper) product;
053                    StockItem item = DBManager.getInstance().getStoreQuery()
054                                    .queryStockItem(dbStore.getId(),
055                                                    wrapper.getProduct().getBarcode(),
056                                                    DBManager.getInstance().createPersistenceContext());
057                    return (int) item.getIncomingAmount();
058            }
059            
060            /** {@inheritDoc} */
061            public void insertStockItem(IProduct product, int salesPrice, int amount,
062                            int minAmount) {
063                    ProductWrapper wrapper = (ProductWrapper) product;
064    
065                    StockItem item = new StockItem();
066                    item.setAmount(amount);
067                    item.setMinStock(minAmount);
068                    item.setMaxStock(100 * amount);
069                    item.setProduct(wrapper.getProduct());
070                    item.setStore(dbStore);
071                    item.setSalesPrice(salesPrice / 100.);
072    
073                    DBManager.getInstance().persistDBObject(item);
074            }
075    
076            /** Returns the index of this stock PC. */
077            public int getIndex() {
078                    return index;
079            }
080    
081            /** {@inheritDoc} */
082            public IOrder createOrder() {
083                    ProductOrder po = new ProductOrder();
084                    po.setOrderingDate(new Date());
085                    po.setStore(dbStore);
086                    DBManager.getInstance().persistDBObject(po);
087                    return new OrderWrapper(po);
088            }
089    
090            /** {@inheritDoc} */
091            public void executeOrder(IOrder order)
092                            throws OperationNotSupportedException {
093                    // FIXME: this is currently not supported as the relevant methods of the
094                    // implementation are hard to access
095                    throw new OperationNotSupportedException();
096            }
097    
098            /** {@inheritDoc} */
099            public void rollInOrder(IOrder order) throws OperationNotSupportedException {
100                    // FIXME: this is currently not supported as the relevant methods of the
101                    // implementation are hard to access
102                    throw new OperationNotSupportedException();
103            }
104    }