package data;
import util.*;
import java.util.*;
public class DefaultCountingStockFromValueCreator extends Object implements StockFromValueCreator {
protected CatalogItemValue m_civEvaluator;
public DefaultCountingStockFromValueCreator (CatalogItemValue civ) {
super();
m_civEvaluator = civ;
}
public Value fillStock (Stock st, Value v, DataBasket db) {
CountingStock cs = (CountingStock) st;
Catalog c = st.getCatalog (db);
List lCI = new LinkedList();
for (Iterator i = c.iterator (db, false); i.hasNext();) {
lCI.add (i.next());
}
if (lCI.size() == 0) {
return v;
}
Collections.sort (lCI,
invertedCIValueOrder (m_civEvaluator));
for (Iterator i = lCI.iterator(); i.hasNext();) {
CatalogItem ciCurrent = (CatalogItem) i.next();
Value vItemValue = m_civEvaluator.getValue (ciCurrent);
Value vCurrent = (Value) vItemValue.clone();
int nCount = 1;
while (vCurrent.compareTo (v) < 0) {
vCurrent.addAccumulating (vItemValue);
nCount++;
}
if (vCurrent.compareTo (v) > 0) {
nCount--;
vCurrent.subtractAccumulating (vItemValue);
}
if (nCount > 0) {
cs.add (ciCurrent.getName(), nCount, db);
v.subtractAccumulating (vCurrent);
}
}
return v;
}
public static final Comparator invertedCIValueOrder (final CatalogItemValue civ) {
return new SerializableComparator() {
public int compare (Object o1, Object o2) {
return civ.getValue ((CatalogItem) o2).compareTo (civ.getValue ((CatalogItem) o1));
}
};
}
}