On Sunday 11 April 2004 17:46, Erik Hatcher wrote:
> In other words, you need to invent your own "pattern" here?! :)
I just experimented a bit and came up with the ValueListSupplier which
replaces the ValueList in the VLH. Seems to work so far... :-) Comments are
greatly appreciated!
Timo
public class ValueListSupplier implements IValueListIterator
{
private final Log log = LogFactory.getLog(this.getClass());
// TODO junit test case
private Hits hits;
protected BitSet fetched;
protected List list;
protected int index;
public ValueListSupplier(Hits hits)
{
int size = hits.length();
this.list = new ArrayList(size);
// stupid idiots at SUN
for (int i = 0; i < size; i++) list.add(null);
this.fetched = new BitSet();
this.hits = hits;
this.index = 0;
}
public List getList()
{
return list;
}
public int size()
{
return list.size();
}
public boolean hasPrevious()
{
return index > 0;
}
public boolean hasNext()
{
return index < size();
}
/**
* @param index
*/
public synchronized void move(int index)
{
this.index = index;
}
public void reset()
{
move(0);
}
public Object current()
{
validate(index, index + 1);
return list.get(index);
}
public List previous(int count)
{
int from = Math.max(0, index - count);
int to = index;
validate(from, to);
move(from);
return list.subList(from, to);
}
public List next(int count)
{
int from = index;
int to = Math.min(Math.max(0, size() - 1), index + count);
validate(from, to);
move(to);
return list.subList(from, to);
}
/**
* @param from
* starting index (inclusive)
* @param to
* ending index (exclusive)
*/
private void validate(int from, int to)
{
while ((from = fetched.nextClearBit(from)) < to)
{
log.debug("fetching #" + from);
try
{
list.set(from,
SearchResultAdapter.wrap(hits.doc(from)));
fetched.set(from);
}
catch (IOException e)
{
// TODO potentially bug
e.printStackTrace();
}
}
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]