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 * ID for serialization. 040 */ 041 private static final long serialVersionUID = 353809479798505256L; 042 043 /** 044 * Create a new CountingStockItemDBEntry. 045 * 046 * @param sKey the affected key. 047 * @param stiSource the source Stock. 048 * @param stiDest the destination Stock. 049 * @param nCount the number of affected items. This will be stored as the 050 * {@link DataBasketEntry#getValue value attribute} of the DataBasketEntry. 051 */ 052 public CountingStockItemDBEntry(String sKey, StockImpl stiSource, StockImpl stiDest, int nCount) { 053 super(sKey, stiSource, stiDest, new Integer(nCount)); 054 } 055 056 /** 057 * Count the affected items. 058 * 059 * @return the number of affected items. 060 * 061 * @override Never 062 */ 063 public int count() { 064 return ((Integer)getValue()).intValue(); 065 } 066 067 /** 068 * Rollback the operation described by this {@link DataBasketEntry} for a given number of items. 069 * 070 * <p>The method will rollback the operation for the given number of items, updating the underlying 071 * DataBasket correctly.</p> 072 * 073 * <p><strong>Attention</strong>: The method is public as an implementation detail and should not be called 074 * directly.</p> 075 * 076 * @override Never 077 * 078 * @param nCount the number of items for which to rollback the operation. 079 * 080 * @exception IllegalArgumentException if <code>nCount >= {@link #count}</code>. 081 */ 082 public void partialRollback(int nCount) { 083 if (nCount <= 0) { 084 return; 085 } 086 087 if (nCount >= ((Integer)getValue()).intValue()) { 088 throw new IllegalArgumentException(); 089 } 090 091 DataBasketEntry dbe = new CountingStockItemDBEntry(getSecondaryKey(), (StockImpl)getSource(), 092 (StockImpl)getDestination(), nCount); 093 dbe.setOwner(m_dbiOwner); 094 095 m_oValue = new Integer(((Integer)getValue()).intValue() - nCount); 096 097 dbe.rollback(); 098 } 099 100 /** 101 * LogEntry describing an operation on CountingStock StockItem's. 102 * 103 * @author Steffen Zschaler 104 * @version 2.0 19/09/1999 105 * @since v2.0 106 */ 107 public static class CSDBELogEntry extends StockItemDBELogEntry { 108 109 /** 110 * ID for serialization. 111 */ 112 private static final long serialVersionUID = 7449568409286181324L; 113 114 /** 115 * The number of affected items. 116 * 117 * @serial 118 */ 119 private int m_nCount; 120 121 /** 122 * Create a new CSDBELogEntry. 123 * 124 * @param sidbe the DataBasketEntry to be described. 125 */ 126 public CSDBELogEntry(StockItemDBEntry sidbe) { 127 super(sidbe); 128 129 m_nCount = sidbe.count(); 130 } 131 132 /** 133 * Get the number of affected items. 134 * 135 * @override Never 136 */ 137 public int getCount() { 138 return m_nCount; 139 } 140 141 /** 142 * Get a String representation of the operation. 143 * 144 * @override Sometimes 145 */ 146 public String toString() { 147 return "StockItem transfer: " + getCount() + " item(s) \"" + getKey() + "\" were transferred" + 148 ((getSource() != null) ? (" from Stock \"" + getSource() + "\"") : 149 ("")) + ((getDestination() != null) ? (" to Stock \"" + getDestination() + "\"") : 150 ("")) + " on " + getLogDate() + "."; 151 } 152 } 153 154 /** 155 * Create and return a LogEntry describing this DataBasketEntry. 156 * 157 * @override Sometimes 158 */ 159 public LogEntry getLogData() { 160 return new CSDBELogEntry(this); 161 } 162 }