1 | // Copyright 2004-2007 Jean-Francois Poilpret |
2 | // |
3 | // Licensed under the Apache License, Version 2.0 (the "License"); |
4 | // you may not use this file except in compliance with the License. |
5 | // You may obtain a copy of the License at |
6 | // |
7 | // http://www.apache.org/licenses/LICENSE-2.0 |
8 | // |
9 | // Unless required by applicable law or agreed to in writing, software |
10 | // distributed under the License is distributed on an "AS IS" BASIS, |
11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
12 | // See the License for the specific language governing permissions and |
13 | // limitations under the License. |
14 | |
15 | package net.sourceforge.hiveboard.command; |
16 | |
17 | import net.sourceforge.hiveboard.AccountRole; |
18 | import net.sourceforge.hiveboard.Board; |
19 | import net.sourceforge.hiveboard.EventType; |
20 | import net.sourceforge.hiveboard.model.BoardRepository; |
21 | import net.sourceforge.hiveboard.util.GuiContext; |
22 | import net.sourceforge.hiveboard.util.GuiContextListener; |
23 | import net.sourceforge.hiveboard.util.TokenSetterHelper; |
24 | import net.sourceforge.hivegui.application.AbstractPropertyBean; |
25 | |
26 | public class GuiContextHandler |
27 | extends AbstractPropertyBean |
28 | implements GuiContextListener |
29 | { |
30 | static public final String SELF_ADMIN = "selfAdmin"; |
31 | static public final String ACCOUNT_MODIFIABLE = "selectedAccountModifiable"; |
32 | static public final String BOARD_SELECTED = "boardSelected"; |
33 | static public final String DRAW_BOARD_SELECTED = "drawBoardSelected"; |
34 | static public final String BOARD_INITIATOR = "boardInitiator"; |
35 | static public final String DRAW_BOARD_INITIATOR = "drawBoardInitiator"; |
36 | static public final String ABSENT_FROM_BOARD = "absentFromBoard"; |
37 | static public final String TOKEN_REQUESTABLE = "tokenRequestable"; |
38 | static public final String BOARD_DESTROYABLE = "boardDestroyable"; |
39 | static public final String SELF_INITIATOR = "selfInitiator"; |
40 | static public final String NOTIFICATION_TOKEN_SETTABLE = "notificationTokenSettable"; |
41 | static public final String PARTICIPANT_REMOVABLE = "participantRemovable"; |
42 | static public final String PARTICIPANT_TOKEN_SETTABLE = "participantTokenSettable"; |
43 | |
44 | public GuiContextHandler() |
45 | { |
46 | setProperty(SELF_ADMIN, false); |
47 | setProperty(ACCOUNT_MODIFIABLE, false); |
48 | setProperty(SELF_INITIATOR, false); |
49 | setProperty(BOARD_SELECTED, false); |
50 | setProperty(DRAW_BOARD_SELECTED, false); |
51 | setProperty(ABSENT_FROM_BOARD, false); |
52 | setProperty(BOARD_INITIATOR, false); |
53 | setProperty(DRAW_BOARD_INITIATOR, false); |
54 | setProperty(TOKEN_REQUESTABLE, false); |
55 | setProperty(BOARD_DESTROYABLE, false); |
56 | setProperty(NOTIFICATION_TOKEN_SETTABLE, false); |
57 | setProperty(PARTICIPANT_REMOVABLE, false); |
58 | setProperty(PARTICIPANT_TOKEN_SETTABLE, false); |
59 | } |
60 | |
61 | public void setBoardRepository(BoardRepository repository) |
62 | { |
63 | _repository = repository; |
64 | } |
65 | |
66 | public void setGuiContext(GuiContext context) |
67 | { |
68 | _guiContext = context; |
69 | context.addContextListener(this); |
70 | } |
71 | |
72 | public boolean isSelfAdmin() |
73 | { |
74 | return getBooleanProperty(SELF_ADMIN); |
75 | } |
76 | |
77 | public boolean isSelectedAccountModifiable() |
78 | { |
79 | return getBooleanProperty(ACCOUNT_MODIFIABLE); |
80 | } |
81 | |
82 | public boolean isBoardSelected() |
83 | { |
84 | return getBooleanProperty(BOARD_SELECTED); |
85 | } |
86 | |
87 | public boolean isDrawBoardSelected() |
88 | { |
89 | return getBooleanProperty(DRAW_BOARD_SELECTED); |
90 | } |
91 | |
92 | public boolean isBoardInitiator() |
93 | { |
94 | return getBooleanProperty(BOARD_INITIATOR); |
95 | } |
96 | |
97 | public boolean isDrawBoardInitiator() |
98 | { |
99 | return getBooleanProperty(DRAW_BOARD_INITIATOR); |
100 | } |
101 | |
102 | public boolean isAbsentFromBoard() |
103 | { |
104 | return getBooleanProperty(ABSENT_FROM_BOARD); |
105 | } |
106 | |
107 | public boolean isTokenRequestable() |
108 | { |
109 | return getBooleanProperty(TOKEN_REQUESTABLE); |
110 | } |
111 | |
112 | public boolean isSelfInitiator() |
113 | { |
114 | return getBooleanProperty(SELF_INITIATOR); |
115 | } |
116 | |
117 | public boolean isBoardDestroyable() |
118 | { |
119 | return getBooleanProperty(BOARD_DESTROYABLE); |
120 | } |
121 | |
122 | public boolean isNotificationTokenSettable() |
123 | { |
124 | return getBooleanProperty(NOTIFICATION_TOKEN_SETTABLE); |
125 | } |
126 | |
127 | public boolean isParticipantRemovable() |
128 | { |
129 | return getBooleanProperty(PARTICIPANT_REMOVABLE); |
130 | } |
131 | |
132 | public boolean isParticipantTokenSettable() |
133 | { |
134 | return getBooleanProperty(PARTICIPANT_TOKEN_SETTABLE); |
135 | } |
136 | |
137 | public void contextChanged(GuiContext context) |
138 | { |
139 | if (context.getIdentity() == null) |
140 | { |
141 | return; |
142 | } |
143 | updateAccountProperties(context); |
144 | updateBoardProperties(context); |
145 | updateParticipantProperties(context); |
146 | updateNotificationProperties(context); |
147 | } |
148 | |
149 | protected void updateAccountProperties(GuiContext context) |
150 | { |
151 | boolean enabled; |
152 | |
153 | enabled = context.getIdentity().isAdmin(); |
154 | setProperty(SELF_ADMIN, enabled); |
155 | |
156 | enabled = context.getAccount() != null |
157 | && context.getIdentity().isAdmin(); |
158 | setProperty(ACCOUNT_MODIFIABLE, enabled); |
159 | |
160 | enabled = context.getIdentity().getRole() == AccountRole.INITIATOR; |
161 | setProperty(SELF_INITIATOR, enabled); |
162 | } |
163 | |
164 | protected void updateBoardProperties(GuiContext context) |
165 | { |
166 | boolean enabled; |
167 | int id = context.getIdentity().getId(); |
168 | |
169 | enabled = context.getBoard() != null; |
170 | setProperty(BOARD_SELECTED, enabled); |
171 | |
172 | enabled = context.getDrawBoard() != null; |
173 | setProperty(DRAW_BOARD_SELECTED, enabled); |
174 | |
175 | enabled = context.getBoard() != null |
176 | && !context.getBoard().getPresents().contains(id); |
177 | setProperty(ABSENT_FROM_BOARD, enabled); |
178 | |
179 | enabled = context.getBoard() != null |
180 | && context.getBoard().getInitiator() == id; |
181 | setProperty(BOARD_INITIATOR, enabled); |
182 | |
183 | enabled = context.getDrawBoard() != null |
184 | && context.getDrawBoard().getInitiator() == id; |
185 | setProperty(DRAW_BOARD_INITIATOR, enabled); |
186 | |
187 | enabled = context.getDrawBoard() != null |
188 | && context.getDrawBoard().getInitiator() != id |
189 | && context.getDrawBoard().getWriter() != id; |
190 | setProperty(TOKEN_REQUESTABLE, enabled); |
191 | |
192 | enabled = context.getBoard() != null |
193 | && context.getBoard().getInitiator() == id |
194 | && context.getBoard().getPresents().isEmpty(); |
195 | setProperty(BOARD_DESTROYABLE, enabled); |
196 | } |
197 | |
198 | protected void updateParticipantProperties(GuiContext context) |
199 | { |
200 | boolean enabled; |
201 | int id = context.getIdentity().getId(); |
202 | |
203 | enabled = context.getBoard() != null |
204 | && context.getParticipant() != null |
205 | && context.getBoard().getInitiator() == id |
206 | && !context.getParticipant().isInitiator(); |
207 | setProperty(PARTICIPANT_REMOVABLE, enabled); |
208 | |
209 | enabled = context.getBoard() != null |
210 | && context.getParticipant() != null |
211 | && context.getParticipant().isPresent() |
212 | && !context.getParticipant().isWriter() |
213 | && TokenSetterHelper.canGiveToken(context.getBoard(), id); |
214 | setProperty(PARTICIPANT_TOKEN_SETTABLE, enabled); |
215 | } |
216 | |
217 | protected void updateNotificationProperties(GuiContext context) |
218 | { |
219 | boolean enabled; |
220 | int id = context.getIdentity().getId(); |
221 | |
222 | enabled = false; |
223 | if ( context.getNotification() != null |
224 | && context.getNotification().getType() == EventType.EVT_REQUEST_TOKEN) |
225 | { |
226 | Board board = _repository.getBoard(context.getNotification().getWhere()); |
227 | int who = context.getNotification().getWho(); |
228 | if ( board != null |
229 | && board.getPresents().contains(who) |
230 | && who != board.getWriter() |
231 | && TokenSetterHelper.canGiveToken(board, id)) |
232 | { |
233 | enabled = true; |
234 | } |
235 | } |
236 | setProperty(NOTIFICATION_TOKEN_SETTABLE, enabled); |
237 | } |
238 | |
239 | protected GuiContext _guiContext; |
240 | protected BoardRepository _repository; |
241 | } |