package org.prevayler.demos.scalability.prevayler; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import org.prevayler.demos.scalability.Record; import org.prevayler.demos.scalability.RecordIterator; class QuerySystem implements ScalabilitySystem { private static final long serialVersionUID=-8181198939095700706L; private Map recordsByName=new HashMap(); public List queryByName( String name){ return (List)recordsByName.get(name); } public void replaceAllRecords( RecordIterator newRecords){ recordsByName.clear(); while (newRecords.hasNext()) { put(newRecords.next()); } makeReadOnly(); } private void put( Record newRecord){ List records=queryByName(newRecord.getName()); if (records == null) { records=new ArrayList(); recordsByName.put(newRecord.getName(),records); } records.add(newRecord); } /** * This is necessary so that the clients cannot alter the Lists they receive as query results. */ private void makeReadOnly(){ Iterator entries=recordsByName.entrySet().iterator(); while (entries.hasNext()) { Map.Entry entry=(Map.Entry)entries.next(); entry.setValue(Collections.unmodifiableList((List)entry.getValue())); } } }