View Javadoc

1   package cz.cuni.amis.pogamut.ut2004multi.communication.worldview.objects;
2   
3   import cz.cuni.amis.pogamut.base.communication.translator.event.IWorldObjectUpdateResult;
4   import cz.cuni.amis.pogamut.base.communication.translator.event.IWorldObjectUpdateResult.Result;
5   import cz.cuni.amis.pogamut.base.communication.worldview.object.WorldObjectId;
6   import cz.cuni.amis.pogamut.multi.communication.translator.event.IStaticWorldObjectUpdatedEvent;
7   import cz.cuni.amis.pogamut.multi.communication.worldview.object.IStaticWorldObject;
8   import cz.cuni.amis.utils.exception.PogamutException;
9   
10  public abstract class TestStaticViewableObject implements IStaticWorldObject{
11  
12  	protected WorldObjectId id;
13  	protected long simTime;
14  	
15  	public abstract String getStaticString();
16  	public abstract long getStaticLong();
17  	
18  	protected TestStaticViewableObject(WorldObjectId id, long simTime)
19  	{
20  		this.id = id;
21  		this.simTime = simTime;
22  	}
23  	
24  	@Override
25  	public WorldObjectId getId() {
26  		return id;
27  	}
28  
29  	@Override
30  	public long getSimTime() {
31  		return simTime;
32  	}
33  
34  	@Override
35  	public Class getCompositeClass() {
36  		return TestCompositeViewableObject.class;
37  	}
38  	
39  	
40  	public IStaticWorldObjectUpdatedEvent createUpdateEvent( long time )
41  	{
42  		return new TestStaticViewableObjectUpdatedEvent(this, time);
43  	}
44  	
45  	public static class TestStaticViewableObjectUpdatedEvent implements IStaticWorldObjectUpdatedEvent
46  	{
47  		private long time;
48  		private TestStaticViewableObject obj;
49  		
50  		public TestStaticViewableObjectUpdatedEvent( TestStaticViewableObject object, long time)
51  		{
52  			this.time = time;
53  			this.obj = object;
54  		}
55  
56  		@Override
57  		public long getSimTime() {
58  			return time;
59  		}
60  
61  		@Override
62  		public IWorldObjectUpdateResult<IStaticWorldObject> update(
63  				IStaticWorldObject object) {
64  			if ( object == null )
65  			{
66  				TestStaticViewableObjectImpl impl = new TestStaticViewableObjectImpl(obj);
67  				this.obj = impl;
68  				return new IWorldObjectUpdateResult.WorldObjectUpdateResult<IStaticWorldObject>(Result.CREATED, impl);
69  			}
70  			else if ( object instanceof TestStaticViewableObjectImpl )
71  			{
72  				TestStaticViewableObjectImpl updatee = (TestStaticViewableObjectImpl)object;
73  				boolean updated = false;
74  				if ( updatee.getStaticLong() != obj.getStaticLong() )
75  				{
76  					updated = true;
77  				}
78  				if ( !updatee.getStaticString().equals(obj.getStaticString() ))
79  				{
80  					updated = true;
81  				}
82  				if ( !updated )
83  				{
84  					//the object was not changed, we only change lastSeenTime
85  					updatee.simTime = this.time;
86  					this.obj = updatee;
87  					return new IWorldObjectUpdateResult.WorldObjectUpdateResult<IStaticWorldObject>(Result.SAME, obj);
88  				}
89  				else
90  				{
91  					throw new PogamutException( "Trying to change a staticWorldObjec " + obj.getId()  + " .", this);
92  				}
93  			}
94  			else
95  			{
96  				throw new IllegalArgumentException("Wrong object class provided. Expected TestStaticObjectImpl, instead got " + object.getClass() );
97  			}
98  		}
99  
100 		@Override
101 		public WorldObjectId getId() {
102 			return obj.getId();
103 		}
104 		
105 	}
106 
107 }