View Javadoc

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   * Unique Id for each SharedProperty in the world.
14   * PropertyId is dependent on WorldObjectId. 
15   * @author srlok
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  	 * Returns id of the object, this property belongs to.
53  	 * @return
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  	// TODO: [srlok] why we have longMap ... "123" != 123 !!!
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  	 * Returns a new PropertyId object.
100 	 * Method makes sure that there is only one instance for each (WorldObjectId,String) pair.
101 	 * @param objectId
102 	 * @param name
103 	 * @return
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 	 * Returns a new PropertyId object.
119 	 * Method makes sure that there is only one instance for each (WorldObjectId,long) pair.
120 	 * @param objectId
121 	 * @param id
122 	 * @return
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 }