25
|
1 package treecms.proto.id;
|
|
2
|
|
3 import treecms.proto.api.NodeID;
|
|
4 import java.util.concurrent.atomic.AtomicLong;
|
|
5
|
26
|
6 public class IncrementalNodeID implements NodeID
|
25
|
7 {
|
|
8 private String m_inheritedID;
|
|
9 private final long m_version;
|
|
10
|
|
11 private AtomicLong m_tip;
|
|
12
|
26
|
13 public IncrementalNodeID(String _inheritedID,AtomicLong _version)
|
25
|
14 {
|
|
15 m_inheritedID = _inheritedID;
|
|
16 m_version = _version.getAndIncrement();
|
|
17 m_tip = _version;
|
|
18 }
|
|
19
|
|
20 String getInheritedID()
|
|
21 {
|
|
22 return m_inheritedID;
|
|
23 }
|
|
24
|
|
25 long getVersion()
|
|
26 {
|
|
27 return m_version;
|
|
28 }
|
|
29
|
|
30 AtomicLong getTip()
|
|
31 {
|
|
32 return m_tip;
|
|
33 }
|
|
34
|
|
35 @Override
|
|
36 public int compare(NodeID _target)
|
|
37 {
|
|
38 // TODO Auto-generated method stub
|
26
|
39 if(!(_target instanceof IncrementalNodeID)){
|
|
40 throw new IllegalArgumentException("_target is not instance of NodeIDImpl");
|
|
41 }
|
|
42
|
|
43 IncrementalNodeID target = (IncrementalNodeID)_target;
|
|
44 if(m_inheritedID.equals(target.m_inheritedID)){
|
|
45 long diff = m_version - target.m_version;
|
25
|
46 if(diff == 0){
|
|
47 return 0;
|
|
48 }else if(diff < 0){
|
|
49 return -1;
|
|
50 }else{
|
|
51 return 1;
|
|
52 }
|
|
53 }
|
|
54 return -2;
|
|
55 }
|
|
56
|
|
57 @Override
|
|
58 public String toString()
|
|
59 {
|
|
60 return m_inheritedID + "@" + m_version;
|
|
61 }
|
|
62 }
|