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
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 }