1 package cz.cuni.amis.pogamut.base.communication.translator.event;
2
3 import cz.cuni.amis.pogamut.base.communication.translator.event.IWorldObjectUpdateResult.Result;
4 import cz.cuni.amis.pogamut.base.communication.translator.event.IWorldObjectUpdateResult.WorldObjectUpdateResult;
5 import cz.cuni.amis.pogamut.base.communication.worldview.IWorldView;
6 import cz.cuni.amis.pogamut.base.communication.worldview.object.IWorldObject;
7 import cz.cuni.amis.pogamut.base.communication.worldview.object.WorldObjectId;
8 import cz.cuni.amis.pogamut.base.communication.worldview.object.event.WorldObjectDestroyedEvent;
9 import cz.cuni.amis.pogamut.base.communication.worldview.object.event.WorldObjectFirstEncounteredEvent;
10 import cz.cuni.amis.pogamut.base.communication.worldview.object.event.WorldObjectUpdatedEvent;
11 import cz.cuni.amis.utils.NullCheck;
12 import cz.cuni.amis.utils.exception.PogamutException;
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48 public interface IWorldObjectUpdatedEvent extends IWorldChangeEvent {
49
50 public WorldObjectId getId();
51
52 public IWorldObjectUpdateResult<IWorldObject> update(IWorldObject obj);
53
54
55
56
57
58
59 public static class DestroyWorldObject implements IWorldObjectUpdatedEvent {
60
61 private IWorldObject object;
62 private long simTime;
63
64 public DestroyWorldObject(IWorldObject object, long simTime) {
65 this.object = object;
66 NullCheck.check(this.object, "object");
67 NullCheck.check(this.object.getId(), "object.getId()");
68 this.simTime = simTime;
69 }
70
71 @Override
72 public WorldObjectId getId() {
73 return object.getId();
74 }
75
76 @Override
77 public IWorldObjectUpdateResult<IWorldObject> update(IWorldObject obj) {
78 if (obj == null) throw new PogamutException("Could not destroy 'null' object.", this);
79 if (obj.getId() == null || !obj.getId().equals(object.getId())) throw new PogamutException("Could not destroy object " + object + " as provided object for update is different: " + obj, this);
80 return new WorldObjectUpdateResult(Result.DESTROYED, null);
81 }
82
83 @Override
84 public long getSimTime() {
85 return simTime;
86 }
87
88
89 }
90
91 }