1
2
3
4
5
6
7
8
9
10
11
12
13 package cz.cuni.amis.pogamut.ut3.communication.messages.gbinfomessages;
14
15 import java.util.*;import javax.vecmath.*;import cz.cuni.amis.pogamut.base.communication.messages.*;import cz.cuni.amis.pogamut.base.communication.worldview.*;import cz.cuni.amis.pogamut.base.communication.worldview.event.*;import cz.cuni.amis.pogamut.base.communication.worldview.object.*;import cz.cuni.amis.pogamut.multi.communication.worldview.object.*;import cz.cuni.amis.pogamut.base.communication.translator.event.*;import cz.cuni.amis.pogamut.multi.communication.translator.event.*;import cz.cuni.amis.pogamut.base3d.worldview.object.*;import cz.cuni.amis.pogamut.base3d.worldview.object.event.*;import cz.cuni.amis.pogamut.ut2004.communication.messages.*;import cz.cuni.amis.pogamut.ut2004.communication.worldview.objects.*;import cz.cuni.amis.pogamut.ut2004multi.communication.worldview.objects.*;import cz.cuni.amis.pogamut.ut2004.communication.translator.itemdescriptor.*;import cz.cuni.amis.pogamut.ut2004.communication.messages.ItemType.Category;import cz.cuni.amis.pogamut.unreal.communication.messages.UnrealId;import cz.cuni.amis.utils.exception.*;import cz.cuni.amis.pogamut.base.communication.translator.event.IWorldObjectUpdateResult.Result;import cz.cuni.amis.utils.SafeEquals;import cz.cuni.amis.pogamut.base.agent.*;import cz.cuni.amis.pogamut.multi.agent.*;import cz.cuni.amis.pogamut.multi.communication.worldview.property.*;import cz.cuni.amis.pogamut.ut2004multi.communication.worldview.property.*;import cz.cuni.amis.utils.token.*;import cz.cuni.amis.utils.*;
16
17 public class UT2004SharedObjectCreator {
18
19 public static interface ISharedObjectCreator<T extends ICompositeWorldObject>
20 {
21 public ISharedWorldObject create(WorldObjectId id, Collection<ISharedProperty> c);
22 }
23
24
25 public static class EmptySharedCreator implements ISharedObjectCreator<Empty>
26 {
27 @Override
28 public ISharedWorldObject create(WorldObjectId id, Collection<ISharedProperty> c) {
29 return new EmptySharedImpl(id, c);
30 }
31 }
32
33 public static class AliveMessageSharedCreator implements ISharedObjectCreator<AliveMessage>
34 {
35 @Override
36 public ISharedWorldObject create(WorldObjectId id, Collection<ISharedProperty> c) {
37 return new AliveMessageSharedImpl(id, c);
38 }
39 }
40
41
42 private static HashMap<Class, ISharedObjectCreator> map = new HashMap<Class, ISharedObjectCreator>();
43
44 static {
45
46 map.put(
47 Empty
48 .class,
49 new EmptySharedCreator()
50 );
51
52 map.put(
53 AliveMessage
54 .class,
55 new AliveMessageSharedCreator()
56 );
57
58 }
59
60 public static ISharedWorldObject create(Class msgClass, WorldObjectId objectId, Collection<ISharedProperty> properties )
61 {
62 NullCheck.check(msgClass, "msgClass");
63 NullCheck.check(objectId, "objectId");
64 NullCheck.check(properties, "properties");
65
66 ISharedObjectCreator creator = map.get(msgClass);
67 if (creator == null) {
68 throw new PogamutException("There is no shared obejct creator for class " + msgClass + ".", UT2004SharedObjectCreator.class);
69 }
70 return creator.create(objectId, properties);
71 }
72 }
73