1 package org.simantics.document.server;
\r
3 import java.util.Collection;
\r
4 import java.util.Iterator;
\r
5 import java.util.Map;
\r
6 import java.util.Map.Entry;
\r
8 import org.simantics.db.procedure.Listener;
\r
9 import org.simantics.utils.datastructures.Pair;
\r
11 import gnu.trove.map.hash.THashMap;
\r
13 public class DocumentHistoryCollector {
\r
15 static Map<String, DocumentHistory> histories = new THashMap<String, DocumentHistory>();
\r
17 private static DocumentHistory getHistory(String location, boolean create) {
\r
19 synchronized(histories) {
\r
21 DocumentHistory history = histories.get(location);
\r
22 if(history == null && create) {
\r
23 history = new DocumentHistory();
\r
25 histories.put(location, history);
\r
33 private static void pruneHistories() {
\r
34 synchronized (histories) {
\r
35 // remove histories with no listeners
\r
36 Iterator<Map.Entry<String, DocumentHistory>> iter = histories.entrySet().iterator();
\r
37 while (iter.hasNext()) {
\r
38 Entry<String, DocumentHistory> entry = iter.next();
\r
39 DocumentHistory entryHistory = entry.getValue();
\r
40 synchronized(entryHistory) {
\r
41 if (!entryHistory.hasListeners()) {
\r
49 public static Pair<Integer, Collection<JSONObject>> readChanges(String location, int sequenceNumber) {
\r
50 DocumentHistory history = getHistory(location, false);
\r
51 if (history != null) {
\r
52 return history.readChanges(sequenceNumber);
\r
58 public static Pair<Integer, Collection<JSONObject>> getContent(Listener<Integer> listener, String location, int sequenceNumber) {
\r
59 DocumentHistory history = getHistory(location, true);
\r
60 return history.getContent(listener, location, sequenceNumber);
\r