1 package cz.cuni.amis.pogamut.usar2004.agent.module.master;
2
3 import cz.cuni.amis.pogamut.base.agent.module.SensorModule;
4 import cz.cuni.amis.pogamut.base.communication.worldview.IWorldView;
5 import cz.cuni.amis.pogamut.base.communication.worldview.event.IWorldEventListener;
6 import cz.cuni.amis.pogamut.usar2004.agent.USAR2004Bot;
7 import cz.cuni.amis.pogamut.usar2004.agent.module.state.MissionPackageState;
8 import cz.cuni.amis.pogamut.usar2004.communication.messages.usarinfomessages.MissionPackageMessage;
9 import java.util.HashMap;
10 import java.util.Map;
11 import java.util.Set;
12
13
14
15
16
17
18
19
20 public class MissionPackageModule extends SensorModule<USAR2004Bot>
21 {
22 protected MissionPackageMessageListener packageListener;
23 protected static MissionPackageModule singleton = null;
24 protected Map<String, MissionPackageState> packageModule;
25
26
27
28
29
30
31
32 private MissionPackageModule(USAR2004Bot bot)
33 {
34 super(bot);
35 packageModule = new HashMap<String, MissionPackageState>();
36 packageListener = new MissionPackageMessageListener(worldView);
37 }
38
39
40
41
42
43
44
45
46 public static MissionPackageModule getModuleInstance(USAR2004Bot bot)
47 {
48 if(singleton == null)
49 {
50 singleton = new MissionPackageModule(bot);
51 }
52 return singleton;
53 }
54
55
56
57
58
59
60
61 public Boolean isReady()
62 {
63 return (packageModule != null && !packageModule.isEmpty());
64 }
65
66
67
68
69
70
71
72
73 public MissionPackageState getStatesByName(String name)
74 {
75 if(name == null)
76 {
77 return null;
78 }
79 return packageModule.get(name.toLowerCase());
80 }
81
82
83
84
85
86
87 public Set<String> getAvailibleTypes()
88 {
89 return packageModule.keySet();
90 }
91
92
93
94
95
96
97
98
99 protected boolean updatePackageCollection(MissionPackageMessage message)
100 {
101 if(!packageModule.containsKey(message.getName().toLowerCase()))
102 {
103 return false;
104 }
105 packageModule.get(message.getName().toLowerCase()).updateMessage(message);
106 return true;
107 }
108
109
110
111
112
113
114 protected void filePackageMessage(MissionPackageMessage message)
115 {
116 if(updatePackageCollection(message))
117 {
118 return;
119 }
120
121 MissionPackageState newPackage = new MissionPackageState();
122 String name = message.getName().toLowerCase();
123 newPackage.updateMessage(message);
124 packageModule.put(name, newPackage);
125 }
126
127 @Override
128 protected void cleanUp()
129 {
130 super.cleanUp();
131 packageListener = null;
132 packageModule = null;
133 singleton = null;
134 }
135
136 private class MissionPackageMessageListener implements IWorldEventListener<MissionPackageMessage>
137 {
138 @Override
139 public void notify(MissionPackageMessage event)
140 {
141 filePackageMessage(event);
142 }
143
144 public MissionPackageMessageListener(IWorldView worldView)
145 {
146 worldView.addEventListener(MissionPackageMessage.class, this);
147 }
148 }
149 }