package data.filters;
import data.*;
import data.events.*;
import java.util.*;
public abstract class CountingStockFilter extends AbstractStockFilter implements CountingStock {
public CountingStockFilter (CountingStock csSource) {
super (csSource);
}
public Iterator get (final String sKey, final DataBasket db, final boolean fForEdit) {
class I implements Iterator {
protected int m_nMaxCount = countItems (sKey, db);
protected Iterator m_iIterator = m_stSource.get (sKey, db, fForEdit);
public boolean hasNext() {
return ((m_iIterator.hasNext()) &&
(m_nMaxCount > 0));
}
public Object next() {
if (m_nMaxCount <= 0) {
throw new NoSuchElementException();
}
m_nMaxCount--;
return m_iIterator.next();
}
public void remove() {
m_iIterator.remove();
}
}
return new I();
}
public abstract int countItems (String sKey, DataBasket db);
public boolean contains (StockItem si, DataBasket db) {
return contains (si.getName(), db);
}
public boolean containsStock (Stock st, DataBasket db) {
boolean fResult = m_stSource.containsStock (st, db);
if (fResult) {
for (Iterator i = st.keySet (db).iterator(); i.hasNext();) {
String sKey = (String) i.next();
if (countItems (sKey, db) < st.countItems (sKey, db)) {
return false;
}
}
}
return fResult;
}
public void add (String sKey, int nCount, DataBasket db) {
((CountingStock) m_stSource).add (sKey, nCount, db);
}
public void remove (String sKey, int nCount, DataBasket db)
throws VetoException {
int nFilteredCount = countItems (sKey, db);
if (nFilteredCount > nCount) {
nFilteredCount = nCount;
}
if (nFilteredCount > 0) {
((CountingStock) m_stSource).remove (sKey, nFilteredCount, db);
}
}
}