1 package cz.cuni.amis.pogamut.multi.communication.worldview.property;
2
3 import java.io.Serializable;
4
5 import cz.cuni.amis.pogamut.base.communication.worldview.object.WorldObjectId;
6 import cz.cuni.amis.utils.HashCode;
7 import cz.cuni.amis.utils.maps.HashMapMap;
8 import cz.cuni.amis.utils.token.Token;
9 import cz.cuni.amis.utils.token.Tokens;
10
11
12
13
14
15
16
17
18 public class PropertyId implements Serializable {
19
20
21
22
23 private static final long serialVersionUID = 7196633078273572529L;
24
25
26 private Token token;
27 private WorldObjectId objectId;
28 private int hashCode;
29
30 private PropertyId(WorldObjectId objectId, Token token)
31 {
32 this.objectId = objectId;
33 this.token = token;
34 this.hashCode = new HashCode().add(objectId).add(token).getHash();
35 }
36
37 private PropertyId(WorldObjectId objectId, String name)
38 {
39 this.objectId = objectId;
40 this.token = Tokens.get(name);
41 this.hashCode = new HashCode().add(objectId).add(token).getHash();
42 }
43
44 private PropertyId(WorldObjectId objectId, long id)
45 {
46 this.objectId = objectId;
47 this.token = Tokens.get(id);
48 this.hashCode = new HashCode().add(objectId).add(token).getHash();
49 }
50
51
52
53
54
55 public WorldObjectId getWorldObjectId()
56 {
57 return this.objectId;
58 }
59
60 public Token getPropertyToken() {
61 return token;
62 }
63
64 private static HashMapMap<WorldObjectId,String,PropertyId> stringMap = new HashMapMap<WorldObjectId, String, PropertyId>();
65
66
67 private static HashMapMap<WorldObjectId,Long,PropertyId> longMap = new HashMapMap<WorldObjectId, Long, PropertyId>();
68
69 @Override
70 public boolean equals(Object other)
71 {
72 if ( other == null) { return false; }
73 if ( ! (other instanceof PropertyId))
74 {
75 return false;
76 }
77 return ( (token.equals(((PropertyId)other).token)) &&
78 ( objectId.equals(((PropertyId)other).objectId)));
79 }
80
81 public String getStringId()
82 {
83 return objectId.getStringId() + "-" + token.getToken();
84 }
85
86 @Override
87 public String toString()
88 {
89 return ("PropertyId[" + objectId.toString() + "," + getStringId() + "]");
90 }
91
92 @Override
93 public int hashCode()
94 {
95 return hashCode;
96 }
97
98
99
100
101
102
103
104
105 public static PropertyId get(WorldObjectId objectId, String name)
106 {
107 PropertyId value = stringMap.get(objectId, name);
108 if ( value != null)
109 {
110 return value;
111 }
112 value = new PropertyId(objectId, name);
113 stringMap.put(objectId, name, value);
114 return value;
115 }
116
117
118
119
120
121
122
123
124 public static PropertyId get(WorldObjectId objectId, long id)
125 {
126 PropertyId value = longMap.get(objectId, id);
127 if ( value != null)
128 {
129 return value;
130 }
131 value = new PropertyId(objectId, id);
132 longMap.put(objectId, id, value);
133 return value;
134
135 }
136
137
138 }