2
|
1 package treecms.memory;
|
|
2
|
|
3 import java.util.Random;
|
|
4 import java.util.UUID;
|
|
5 import java.util.concurrent.ConcurrentHashMap;
|
|
6
|
|
7 import treecms.api.Forest;
|
|
8 import treecms.api.Node;
|
|
9 import treecms.api.NodeID;
|
|
10 import treecms.tree.id.RandomNodeID;
|
|
11
|
|
12 public class OnMemoryForest implements Forest
|
|
13 {
|
|
14 ConcurrentHashMap<NodeID,OnMemoryNode> m_table;
|
|
15
|
|
16 public OnMemoryForest()
|
|
17 {
|
|
18 m_table = new ConcurrentHashMap<NodeID,OnMemoryNode>();
|
|
19 }
|
|
20
|
|
21 public OnMemoryNode createNode(NodeID _id)
|
|
22 {
|
|
23 if(_id == null){
|
|
24 return new OnMemoryNode(this,createID());
|
|
25 }
|
|
26 return new OnMemoryNode(this,_id);
|
|
27 }
|
|
28
|
|
29 NodeID createID()
|
|
30 {
|
|
31 return new RandomNodeIDImpl(null);
|
|
32 }
|
|
33
|
|
34 @Override
|
|
35 public Node get(NodeID _id)
|
|
36 {
|
|
37 return m_table.get(_id);
|
|
38 }
|
|
39
|
|
40 @Override
|
|
41 public Node create()
|
|
42 {
|
|
43 return createNode(null);
|
|
44 }
|
|
45
|
|
46 class RandomNodeIDImpl extends RandomNodeID
|
|
47 {
|
|
48 String m_uuid;
|
|
49 long m_version;
|
|
50
|
|
51 public RandomNodeIDImpl(String _uuid)
|
|
52 {
|
|
53 if(_uuid != null){
|
|
54 m_uuid = _uuid;
|
|
55 }else{
|
|
56 m_uuid = UUID.randomUUID().toString();
|
|
57 }
|
|
58 m_version = (new Random()).nextLong();
|
|
59 }
|
|
60
|
|
61 @Override
|
|
62 public NodeID create()
|
|
63 {
|
|
64 return new RandomNodeIDImpl(null);
|
|
65 }
|
|
66
|
|
67 @Override
|
|
68 public NodeID update()
|
|
69 {
|
|
70 return new RandomNodeIDImpl(m_uuid);
|
|
71 }
|
|
72
|
|
73 @Override
|
|
74 public String getUUID()
|
|
75 {
|
|
76 return m_uuid;
|
|
77 }
|
|
78
|
|
79 @Override
|
|
80 public String getVersion()
|
|
81 {
|
|
82 return Long.toHexString(m_version);
|
|
83 }
|
|
84 }
|
|
85 }
|