]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.document.server/src/org/simantics/document/server/DocumentHistoryCollector.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.document.server / src / org / simantics / document / server / DocumentHistoryCollector.java
1 package org.simantics.document.server;\r
2 \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
7 \r
8 import org.simantics.db.procedure.Listener;\r
9 import org.simantics.utils.datastructures.Pair;\r
10 \r
11 import gnu.trove.map.hash.THashMap;\r
12 \r
13 public class DocumentHistoryCollector {\r
14 \r
15         static Map<String, DocumentHistory> histories = new THashMap<String, DocumentHistory>();\r
16 \r
17         private static DocumentHistory getHistory(String location, boolean create) {\r
18 \r
19                 synchronized(histories) {\r
20 \r
21                         DocumentHistory history =  histories.get(location);\r
22                         if(history == null && create) {\r
23                                 history = new DocumentHistory();\r
24                                 pruneHistories();\r
25                                 histories.put(location, history);\r
26                         }\r
27                         return history;\r
28                         \r
29                 }\r
30 \r
31         }\r
32         \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
42                                         iter.remove();\r
43                                 }\r
44                         }\r
45                 }\r
46                 }\r
47         }\r
48 \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
53                 } else {\r
54                         return null;\r
55                 }\r
56         }\r
57 \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
61         }\r
62 }