001 package data.ooimpl; 002 003 import data.*; 004 005 import log.*; 006 007 /** 008 * DataBasketEntry describing operations with CountingStock's items. The fields 009 * of the <code>DataBasketEntry</code> are set as follows: 010 * 011 * <table border=1> 012 * <tr><td><strong>Field</strong></td><td><strong>Value</strong></td></tr> 013 * <tr><td>{@link DataBasketEntry#getMainKey main key}</td> 014 * <td>{@link DataBasketKeys#STOCK_ITEM_MAIN_KEY STOCK_ITEM_MAIN_KEY} 015 * </td> 016 * </tr> 017 * <tr><td>{@link DataBasketEntry#getSecondaryKey secondary key}</td> 018 * <td>{@link CatalogItem#getName name} of the StockItem in question</td> 019 * </tr> 020 * <tr><td>{@link DataBasketEntry#getSource source}</td> 021 * <td>{@link Stock source stock}<td> 022 * </tr> 023 * <tr><td>{@link DataBasketEntry#getDestination destination}</td> 024 * <td>{@link Stock destination stock}<td> 025 * </tr> 026 * <tr><td>{@link DataBasketEntry#getValue value}</td> 027 * <td>an {@link Integer} representing the number of StockItems that were 028 * moved.<td> 029 * </tr> 030 * </table> 031 * 032 * @author Steffen Zschaler 033 * @version 2.0 19/08/1999 034 * @since v2.0 035 */ 036 public class CountingStockItemDBEntry extends StockItemDBEntry { 037 038 /** 039 * Create a new CountingStockItemDBEntry. 040 * 041 * @param sKey the affected key. 042 * @param stiSource the source Stock. 043 * @param stiDest the destination Stock. 044 * @param nCount the number of affected items. This will be stored as the 045 * {@link DataBasketEntry#getValue value attribute} of the DataBasketEntry. 046 */ 047 public CountingStockItemDBEntry(String sKey, StockImpl stiSource, StockImpl stiDest, int nCount) { 048 super(sKey, stiSource, stiDest, new Integer(nCount)); 049 } 050 051 /** 052 * Count the affected items. 053 * 054 * @return the number of affected items. 055 * 056 * @override Never 057 */ 058 public int count() { 059 return ((Integer)getValue()).intValue(); 060 } 061 062 /** 063 * Rollback the operation described by this {@link DataBasketEntry} for a given number of items. 064 * 065 * <p>The method will rollback the operation for the given number of items, updating the underlying 066 * DataBasket correctly.</p> 067 * 068 * <p><strong>Attention</strong>: The method is public as an implementation detail and should not be called 069 * directly.</p> 070 * 071 * @override Never 072 * 073 * @param nCount the number of items for which to rollback the operation. 074 * 075 * @exception IllegalArgumentException if <code>nCount >= {@link #count}</code>. 076 */ 077 public void partialRollback(int nCount) { 078 if (nCount <= 0) { 079 return; 080 } 081 082 if (nCount >= ((Integer)getValue()).intValue()) { 083 throw new IllegalArgumentException(); 084 } 085 086 DataBasketEntry dbe = new CountingStockItemDBEntry(getSecondaryKey(), (StockImpl)getSource(), 087 (StockImpl)getDestination(), nCount); 088 dbe.setOwner(m_dbiOwner); 089 090 m_oValue = new Integer(((Integer)getValue()).intValue() - nCount); 091 092 dbe.rollback(); 093 } 094 095 /** 096 * LogEntry describing an operation on CountingStock StockItem's. 097 * 098 * @author Steffen Zschaler 099 * @version 2.0 19/09/1999 100 * @since v2.0 101 */ 102 public static class CSDBELogEntry extends StockItemDBELogEntry { 103 104 /** 105 * The number of affected items. 106 * 107 * @serial 108 */ 109 private int m_nCount; 110 111 /** 112 * Create a new CSDBELogEntry. 113 * 114 * @param sidbe the DataBasketEntry to be described. 115 */ 116 public CSDBELogEntry(StockItemDBEntry sidbe) { 117 super(sidbe); 118 119 m_nCount = sidbe.count(); 120 } 121 122 /** 123 * Get the number of affected items. 124 * 125 * @override Never 126 */ 127 public int getCount() { 128 return m_nCount; 129 } 130 131 /** 132 * Get a String representation of the operation. 133 * 134 * @override Sometimes 135 */ 136 public String toString() { 137 return "StockItem transfer: " + getCount() + " item(s) \"" + getKey() + "\" were transferred" + 138 ((getSource() != null) ? (" from Stock \"" + getSource() + "\"") : 139 ("")) + ((getDestination() != null) ? (" to Stock \"" + getDestination() + "\"") : 140 ("")) + " on " + getLogDate() + "."; 141 } 142 } 143 144 /** 145 * Create and return a LogEntry describing this DataBasketEntry. 146 * 147 * @override Sometimes 148 */ 149 public LogEntry getLogData() { 150 return new CSDBELogEntry(this); 151 } 152 }