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 * @param name the catalogs's name. 018 */ 019 public COpenPurchaseOrders(String name) { 020 super(name); 021 } 022 023 /** 024 * Removes a CatalogItem from this Catalog. 025 * @param ci the CatalogItem to be removed. 026 * @return the removed CatalogItem. 027 */ 028 public CIOpenPurchaseOrders remove(CatalogItem ci) { 029 try { 030 return (CIOpenPurchaseOrders)super.remove(ci, null); 031 } 032 catch (VetoException e) { 033 System.err.println("Fehler beim Löschen aus COpenPurchaseOrders"); 034 e.printStackTrace(); 035 return null; 036 } 037 } 038 039 /** 040 * Gets a CatalogItem from this Catalog. 041 * @param key the searched CatalogItem's key. 042 * @return the searched CatalogItem, <code>null</code> if not found. 043 */ 044 public CIOpenPurchaseOrders get(String key) { 045 try { 046 return (CIOpenPurchaseOrders)super.get(key, null, false); 047 } 048 catch (VetoException e) { 049 System.err.println("Fehler beim Holen eines Elements aus COpenPurchaseOrders"); 050 e.printStackTrace(); 051 return null; 052 } 053 } 054 055 /** 056 * Decreases the number of days to wait for open purchase orders according to the days that passed. 057 * All purchases where the days to wait have dropped to or below zero are summed up and returned. 058 * @param i the number of passed days. 059 * @return the accumulated orders that arrived. 060 */ 061 public CountingStock subtractPassedDays(int i) { 062 CountingStock arrived = new CountingStockImpl("arrived", SMarket.getArticleCatalog()); 063 Iterator it = keySet(null).iterator(); 064 while (it.hasNext()) { 065 CIOpenPurchaseOrders next = get((String)it.next()); 066 fireEditingCatalogItem(next, null); //update remaining days in table view (if open) 067 next.decreaseDaysTillArrival(i); 068 if (next.getDaysTillArrival() <= 0) { 069 remove(next); 070 arrived.addStock(next.getOrders(), null, false); 071 } 072 } 073 return arrived; 074 } 075 }