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