1 package cz.cuni.amis.pogamut.usar2004.agent.module.logic;
2
3 import java.util.logging.Level;
4 import java.util.logging.Logger;
5
6 import com.google.inject.Inject;
7
8 import cz.cuni.amis.pogamut.base.agent.module.IAgentLogic;
9 import cz.cuni.amis.pogamut.base.component.controller.ComponentDependencies;
10 import cz.cuni.amis.pogamut.base.component.controller.ComponentDependencyType;
11 import cz.cuni.amis.pogamut.base3d.ILockableVisionWorldView;
12 import cz.cuni.amis.pogamut.usar2004.agent.USAR2004Bot;
13
14
15 public class SyncUSAR2004BotLogic<BOT extends USAR2004Bot<? extends ILockableVisionWorldView, ?, ?>> extends USAR2004BotLogic<BOT> {
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38 @Inject
39 public SyncUSAR2004BotLogic(BOT agent, IAgentLogic logic) {
40 this(agent, logic, null, new ComponentDependencies(ComponentDependencyType.STARTS_AFTER).add(agent.getWorldView()));
41 }
42
43 public SyncUSAR2004BotLogic(BOT agent, IAgentLogic logic, Logger log) {
44 this(agent, logic, log, new ComponentDependencies(ComponentDependencyType.STARTS_AFTER).add(agent.getWorldView()));
45 }
46
47 public SyncUSAR2004BotLogic(BOT agent, IAgentLogic logic, Logger log, ComponentDependencies dependencies) {
48 super(agent, logic, log, dependencies);
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72 }
73
74 @Override
75 protected void beforeLogic(String threadName) {
76 super.beforeLogic(threadName);
77
78
79 if (log.isLoggable(Level.FINEST)) log.finest(threadName + ": Locking world view.");
80 agent.getWorldView().lock();
81 if (log.isLoggable(Level.FINER)) log.finer(threadName + ": World view locked.");
82 }
83
84 @Override
85 protected void afterLogic(String threadName) {
86 super.afterLogic(threadName);
87
88
89 if (log.isLoggable(Level.FINEST)) log.finest(threadName + ": Unlocking world view.");
90 agent.getWorldView().unlock();
91 if (log.isLoggable(Level.FINER)) log.finer(threadName + ": World view unlocked.");
92 }
93
94 @Override
95 protected void afterLogicException(String threadName, Throwable e) {
96 super.afterLogicException(threadName, e);
97
98
99 if (agent.getWorldView().isLocked()) {
100 if (log.isLoggable(Level.FINEST)) log.finest("Unlocking world view.");
101 agent.getWorldView().unlock();
102 if (log.isLoggable(Level.FINER)) log.finer("World view unlocked.");
103 }
104 }
105
106 @Override
107 protected boolean shouldExecuteLogic() {
108
109
110 return true;
111
112
113
114
115
116
117
118
119 }
120
121 }