001    package market;
002    
003    import java.util.Iterator;
004    
005    import data.CatalogItem;
006    import data.CountingStock;
007    import data.events.VetoException;
008    import data.ooimpl.CatalogImpl;
009    import data.ooimpl.CountingStockImpl;
010    
011    /**
012     * A Catalog containing {@link CIOpenPurchaseOrders}.
013     */
014    public class COpenPurchaseOrders extends CatalogImpl {
015    
016        /**
017             * ID for serialization.
018             */
019            private static final long serialVersionUID = 3506320704311968981L;
020    
021            /**
022         * @param name the catalogs's name.
023         */
024        public COpenPurchaseOrders(String name) {
025            super(name);
026        }
027    
028        /**
029         * Removes a CatalogItem from this Catalog.
030         * @param ci the CatalogItem to be removed.
031         * @return the removed CatalogItem.
032         */
033        public CIOpenPurchaseOrders remove(CatalogItem ci) {
034            try {
035                return (CIOpenPurchaseOrders)super.remove(ci, null);
036            }
037            catch (VetoException e) {
038                System.err.println("Fehler beim Löschen aus COpenPurchaseOrders");
039                e.printStackTrace();
040                return null;
041            }
042        }
043    
044        /**
045         * Gets a CatalogItem from this Catalog.
046         * @param key the searched CatalogItem's key.
047         * @return the searched CatalogItem, <code>null</code> if not found.
048         */
049        public CIOpenPurchaseOrders get(String key) {
050            try {
051                return (CIOpenPurchaseOrders)super.get(key, null, false);
052            }
053            catch (VetoException e) {
054                System.err.println("Fehler beim Holen eines Elements aus COpenPurchaseOrders");
055                e.printStackTrace();
056                return null;
057            }
058        }
059    
060        /**
061         * Decreases the number of days to wait for open purchase orders according to the days that passed.
062         * All purchases where the days to wait have dropped to or below zero are summed up and returned.
063         * @param i the number of passed days.
064         * @return the accumulated orders that arrived.
065         */
066        public CountingStock subtractPassedDays(int i) {
067            CountingStock arrived = new CountingStockImpl("arrived", SMarket.getArticleCatalog());
068            Iterator it = keySet(null).iterator();
069            while (it.hasNext()) {
070                CIOpenPurchaseOrders next = get((String)it.next());
071                fireEditingCatalogItem(next, null); //update remaining days in table view (if open)
072                next.decreaseDaysTillArrival(i);
073                if (next.getDaysTillArrival() <= 0) {
074                    remove(next);
075                    arrived.addStock(next.getOrders(), null, false);
076                }
077            }
078            return arrived;
079        }
080    }