001 package data; 002 003 /** 004 * A collection of convenience {@link BasketEntryValue BasketEntryValues}. 005 * 006 * @author Steffen Zschaler 007 * @version 2.0 18/08/1999 008 * @since v2.0 009 */ 010 public final class BasketEntryValues { 011 012 /** 013 * A BasketEntryValue returning the value of a DataBasketEntry under the assumption that this describes a 014 * StockItem movement. The value will be calculated by multiplying the number of items with the 015 * default value of the associated CatalogItem. 016 * 017 * <p>To obtain the associated CatalogItem, the BasketEntryValue first tries to use the DataBasketEntries 018 * destination and only if this is <code>null</code> it will try its source. If both are <code>null</code> 019 * or if an exception occurs, the BasketEntryValue will return 0.</p> 020 */ 021 public static final BasketEntryValue ONLY_STOCK_ITEMS = new BasketEntryValue() { 022 public Value getEntryValue(DataBasketEntry dbe) { 023 Stock st = (Stock)dbe.getDestination(); 024 025 if (st == null) { 026 st = (Stock)dbe.getSource(); 027 } 028 029 if (st != null) { 030 try { 031 int nCount = ((dbe.getValue()instanceof Number) ? (((Number)dbe.getValue()).intValue()) : 032 (1)); 033 034 return st.getCatalog(dbe.getOwner()).get(dbe.getSecondaryKey(), null, 035 false).getValue().multiply(nCount); 036 } 037 catch (Throwable t) { 038 return new IntegerValue(0); 039 } 040 } else { 041 return new IntegerValue(0); 042 } 043 } 044 }; 045 046 /** 047 * A BasketEntryValue returning the value of a DataBasketEntry under the assumption that this describes a 048 * CatalogItem movement. The value will be taken from the CatalogItem's {@link CatalogItem#getValue} method. 049 */ 050 public static final BasketEntryValue ONLY_CATALOG_ITEMS = new BasketEntryValue() { 051 public Value getEntryValue(DataBasketEntry dbe) { 052 try { 053 return ((CatalogItem)dbe.getValue()).getValue(); 054 } 055 catch (Throwable t) { 056 return new IntegerValue(0); 057 } 058 } 059 }; 060 061 /** 062 * A BasketEntryValue that returns 1 for each entry. You can use this BasketEntryValue to count entries that 063 * match a given condition. 064 */ 065 public static final BasketEntryValue COUNT_ITEMS = new BasketEntryValue() { 066 private IntegerValue m_ivOne = new IntegerValue(1); 067 068 public Value getEntryValue(DataBasketEntry dbe) { 069 return m_ivOne; 070 } 071 }; 072 }