KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > prevayler > demos > scalability > prevayler > QuerySystem


1 package org.prevayler.demos.scalability.prevayler;
2
3 import java.util.ArrayList JavaDoc;
4 import java.util.Collections JavaDoc;
5 import java.util.HashMap JavaDoc;
6 import java.util.Iterator JavaDoc;
7 import java.util.List JavaDoc;
8 import java.util.Map JavaDoc;
9
10 import org.prevayler.demos.scalability.Record;
11 import org.prevayler.demos.scalability.RecordIterator;
12
13 class QuerySystem implements ScalabilitySystem {
14
15     private Map JavaDoc recordsByName = new HashMap JavaDoc();
16
17
18     public List JavaDoc queryByName(String JavaDoc name) {
19         return (List JavaDoc)recordsByName.get(name);
20     }
21
22
23     public void replaceAllRecords(RecordIterator newRecords) {
24         recordsByName.clear();
25
26         while (newRecords.hasNext()) {
27             put(newRecords.next());
28         }
29
30         makeReadOnly();
31     }
32
33
34     private void put(Record newRecord) {
35         List JavaDoc records = queryByName(newRecord.getName());
36         if (records == null) {
37             records = new ArrayList JavaDoc();
38             recordsByName.put(newRecord.getName(), records);
39         }
40         
41         records.add(newRecord);
42     }
43
44
45     /** This is necessary so that the clients cannot alter the Lists they receive as query results.
46     */

47     private void makeReadOnly() {
48         Iterator JavaDoc entries = recordsByName.entrySet().iterator();
49         while (entries.hasNext()) {
50             Map.Entry JavaDoc entry = (Map.Entry JavaDoc)entries.next();
51             entry.setValue(Collections.unmodifiableList((List JavaDoc)entry.getValue()));
52         }
53     }
54 }
55
Popular Tags