001 package data.ooimpl; 002 003 import data.*; 004 005 /** 006 * Pure Java implementation of the {@link StockItem} interface. See the documentation for 007 * {@link StockItem} for a description of the semantics of this class. 008 * 009 * @author Steffen Zschaler 010 * @version 2.0 19/08/1999 011 * @since v2.0 012 */ 013 public class StockItemImpl extends AbstractNameable implements StockItem, DataBasketKeys { 014 015 /** 016 * ID for serialization. 017 */ 018 private static final long serialVersionUID = 8594068277229039682L; 019 020 /** 021 * The {@link Stock} that contains this {@link StockItem}. 022 * 023 * @serial 024 */ 025 private StockImpl<?, ?, ?> m_stiOwner; 026 027 /** 028 * Create a new StockItemImpl. 029 * 030 * @param sName the name of the new item. 031 */ 032 public StockItemImpl(String sName) { 033 super(sName); 034 } 035 036 /** 037 * Get the Stock that contains this StockItem. 038 * 039 * @override Never 040 */ 041 public StockImpl<?, ?, ?> getStock() { 042 return m_stiOwner; 043 } 044 045 /** 046 * Get the CatalogItem that is associated with this StockItem. 047 * 048 * <p>If the {@link StockItem} has a {@link #getStock Stock}, the associated {@link CatalogItem} is the 049 * CatalogItem of the same name that is found in the Stock's {@link Stock#getCatalog associated Catalog}. 050 * Otherwise, it is <code>null</code>. 051 * 052 * @param db the DataBasket used to determine visibility. 053 * 054 * @override Never 055 */ 056 public CatalogItem getAssociatedItem(DataBasket db) { 057 if (getStock() != null) { 058 if (getStock().getCatalog(db) != null) { 059 try { 060 return getStock().getCatalog(db).get(getName(), db, false); 061 } 062 catch (data.events.VetoException ve) {} 063 } 064 } 065 066 return null; 067 } 068 069 /** 070 * Set the Stock that contains this StockItem. 071 * 072 * @override Never 073 */ 074 protected void setStock(StockImpl<?, ?, ?> sti) { 075 m_stiOwner = sti; 076 attach(sti); // as NameContext 077 } 078 079 /** 080 * Clone this StockItem. 081 * 082 * @override Always 083 */ 084 public Object clone() { 085 return new StockItemImpl(getName()); 086 } 087 088 /** 089 * Get a shallow clone of this item. 090 * 091 * <p>For a normal item, shallow and deep clones are identical, which is why the default implementation 092 * returns <code>((StockItemImpl) clone())</code>. However, when making a shallow clone of a Stock, the 093 * individual StockItems will not be cloned.</p> 094 * 095 * @override Sometimes The default implementation returns <code>(StockItemImpl) clone()</code>. 096 */ 097 public StockItemImpl getShallowClone() { 098 return (StockItemImpl)clone(); 099 } 100 101 /** 102 * Check whether this StockItem equals the given object. 103 * 104 * @override Sometimes The default implementation returns <code>(this == o)</code>. 105 */ 106 public boolean equals(Object o) { 107 return (this == o); 108 } 109 110 /** 111 * Compare this StockItem to the given object. 112 * 113 * @override Sometimes The default implementation will assume <code>o</code> to be a StockItem and will 114 * compare the names. Stocks, however, will always be greater than StockItems. 115 * 116 * @exception ClassCastException if the given object cannot be converted into a {@link StockItem}. 117 */ 118 public int compareTo(Object o) { 119 if ((o instanceof Stock) && (!(this instanceof Stock))) { 120 return -1; 121 } 122 return getName().compareTo(((StockItem)o).getName()); 123 } 124 125 /** 126 * Internal communication method needed for referential integrity in StoringStocks. 127 * 128 * <p><strong>Attention</strong>: This method must not be called directly.</p> 129 * 130 * @override Never 131 */ 132 void internalSetName(String sNewName) { 133 // we need to trick the NameContext, because, normally, Stocks will not allow their members to change their 134 // name. 135 NameContext nc = detachNC(); 136 137 try { 138 setName(sNewName, null); 139 } 140 catch (NameContextException nce) {} 141 142 attach(nc); 143 } 144 145 /** 146 * Return a String representation of the item. 147 * 148 * @override Sometimes 149 */ 150 public String toString() { 151 return "StockItem \"" + getName() + "\""; 152 } 153 154 /** 155 * Helper method used to maintain StockImpl - CatalogImpl links in nested Stocks/Catalogs. For internal use only. 156 * 157 * @param db the DataBasket that protecting this activity. 158 * @param nAction the action that occurred. Can be either {@link #COMMIT_ACTION}, {@link #ROLLBACK_ACTION}, 159 * {@link #STARTEDIT_ACTION}. 160 */ 161 void relinkCatalog(DataBasket db, int nAction) {} 162 163 static final int COMMIT_ACTION = 1; 164 static final int ROLLBACK_ACTION = 2; 165 static final int STARTEDIT_ACTION = 3; 166 }