1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.fhw.cabaweb.webfrontend.actions.edit;
20
21 import java.lang.reflect.InvocationTargetException;
22 import java.util.ArrayList;
23 import java.util.Collection;
24 import java.util.Iterator;
25
26 import javax.servlet.ServletException;
27 import javax.servlet.http.HttpServletRequest;
28 import javax.servlet.http.HttpServletResponse;
29 import javax.servlet.http.HttpSession;
30
31 import org.apache.struts.action.Action;
32 import org.apache.struts.action.ActionForm;
33 import org.apache.struts.action.ActionForward;
34 import org.apache.struts.action.ActionMapping;
35
36 import org.apache.commons.beanutils.PropertyUtils;
37 import org.apache.commons.logging.Log;
38 import org.apache.commons.logging.LogFactory;
39
40 import org.fhw.cabaweb.data.DataInterfaceBenutzerrollen;
41 import org.fhw.cabaweb.data.DataInterfaceGruppenmitglieder;
42 import org.fhw.cabaweb.data.DataInterfaceProjekte;
43 import org.fhw.cabaweb.data.DataInterfaceProjektgruppen;
44
45 import org.fhw.cabaweb.ojb.dataobjects.Gruppenmitglieder;
46
47 import org.fhw.cabaweb.webfrontend.configs.Keys;
48 import org.fhw.cabaweb.webfrontend.forms.simple.GruppenmitgliedForm;
49
50 /***
51 * <strong>Action</strong>-Klasse für die Edit Gruppenmitglied Action .
52 * Die Controller Klasse der Struts Model View Controller Architektur.
53 *
54 * @author <a href="mailto:thomas.vogt@tvc-software.com">Thomas Vogt</a>
55 * @version Version 1.0 06.07.2004
56 */
57 public final class EditGruppenmitgliedAction extends Action {
58
59 /***
60 * The <code>Log</code> instance for this application.
61 */
62 private Log log = LogFactory.getLog("org.fhw.cabaweb.webfrontend.actions.edit");
63
64 /***
65 * Verarbeiten der spezifizierten HTTP Anfrage und erzeugen der zugeordneten
66 * HTTP Antwort bzw. Forwarden an eine andere Web Komponente, die die Antwort
67 * erzeugt.
68 *
69 * Gibt eine <code>ActionForward</code> Instanz zurück die angibt wohin und wie
70 * die Kontrolle weitergegeben werden soll. Kann auch <code>null</code> sein,
71 * wenn die Anfrage bereits bearbeitet wurde.
72 *
73 * @param mapping Das ActionMapping das benutzt wurde um diese Instanz zu selektieren
74 * @param form Das optionale ActionForm Bean für die Anfrage (soweit vorhanden)
75 * @param request Die HTTP Anfrage die wir gerade bearbeiten
76 * @param response The HTTP Antwort die wir erzeugen
77 *
78 * @return Die Action zu der wir weiterleiten
79 * @exception Exception wenn ein Eingabe-/Ausgabe Fehler auftritt oder eine Servlet Exception auftritt
80 * bzw. die Business Logik einen Fehler verursacht
81 */
82 public ActionForward execute(ActionMapping mapping,
83 ActionForm form,
84 HttpServletRequest request,
85 HttpServletResponse response)
86 throws Exception
87 {
88 /*** Forwarding Action Variable mit null initialisieren */
89
90 /*** Die Locale Variable (Sprache, Formatierung, etc.) */
91
92 /*** Die Resourcen (lokalisierten Meldungen) der Anfrage holen */
93
94 /*** Wenn Fehler bei der Validierung Fehler auftreten werden Sie diesem
95 * <code>ActionErrors</code> Objekt hinzugefügt.
96 */
97
98
99 /*** Data Interface (indirekter Zugriff auf die OJB Ebene) initialisieren */
100 DataInterfaceGruppenmitglieder digm = new DataInterfaceGruppenmitglieder();
101 /*** Data Interface (indirekter Zugriff auf die OJB Ebene) initialisieren */
102 DataInterfaceProjekte dip = new DataInterfaceProjekte();
103 /*** Data Interface (indirekter Zugriff auf die OJB Ebene) initialisieren */
104 DataInterfaceBenutzerrollen dib = new DataInterfaceBenutzerrollen();
105 /*** Data Interface (indirekter Zugriff auf die OJB Ebene) initialisieren */
106 DataInterfaceProjektgruppen dipg = new DataInterfaceProjektgruppen();
107 /*** Die Session der aktuellen Anfrage */
108 HttpSession session = request.getSession();
109 /*** Die übergebene Action */
110 String action = request.getParameter("action");
111 if (action == null)
112 {
113 action = "Create";
114 }
115
116 /*** Zwischenspeichvaribale für den Status des Benutzers (Administrator ???) */
117 boolean isAdmin = request.isUserInRole("Administrator");
118 /*** Zwischenspeichvaribale für den Status des Benutzers (Projektleiter ???) */
119 boolean isProjectleader = false;
120 /*** Zwischenspeichvaribale für den Status des Benutzers (Benutzer ???) */
121 boolean isUser = false;
122 /*** Zwischenspeichvaribale für den Namen des Benutzers */
123 String username = request.getRemoteUser();
124
125 if(!isAdmin)
126 {
127 isProjectleader = request.isUserInRole("Projektleiter");
128 }
129 if(!isAdmin && !isProjectleader)
130 {
131 isUser = request.isUserInRole("Benutzer");
132 }
133
134 /*** Zwischenspeichvaribale für die Mitgliedsnummer (Integer) */
135 Integer mitgliedsnummer = null;
136 /*** Zwischenspeichvaribale für die Mitgliedsnummer (Request String) */
137 String mgnummer = request.getParameter("mitgliedsnummer");
138
139 if(mgnummer != null)
140 {
141 mitgliedsnummer = new Integer(mgnummer);
142 }
143
144 if (log.isDebugEnabled())
145 {
146 log.debug("EditGruppenmitgliedAction: Processing " + action + " action for Group Member [" + mitgliedsnummer +"]");
147 }
148
149 if(isUser && !action.equals("Delete"))
150 {
151 action = "Edit";
152 }
153
154 Gruppenmitglieder gruppenmitglied = (Gruppenmitglieder) digm.sucheMitgliedsnummer(mitgliedsnummer);
155
156 if ((gruppenmitglied == null) && !action.equals("Create"))
157 {
158 if (log.isDebugEnabled())
159 {
160 log.debug(" No Group Member for mitgliedsnummer " + mitgliedsnummer);
161 }
162
163 return (mapping.findForward("failure"));
164 }
165 else
166 {
167 if (log.isDebugEnabled())
168 {
169 log.debug(" Group Member for mitgliedsnummer " + mitgliedsnummer + " found " + gruppenmitglied);
170 }
171 }
172
173 if (gruppenmitglied != null)
174 {
175 session.setAttribute(Keys.GRUPPENMITGLIED_KEY, gruppenmitglied);
176 }
177
178 Collection projekte = null;
179
180 if(isAdmin)
181 {
182 if (log.isDebugEnabled())
183 {
184 log.debug(" User has Role: Administrator");
185 log.debug(" Searching all Projects");
186 }
187
188 projekte = dip.sucheAlle();
189
190 if (log.isDebugEnabled())
191 {
192 log.debug(" Found " + projekte.size() + " Projects");
193 }
194 }
195 else if(isProjectleader || isUser)
196 {
197 if (log.isDebugEnabled())
198 {
199 log.debug(" User is NOT Administrator");
200 log.debug(" Searching own Project");
201 }
202
203 Collection usernames = digm.sucheLogInName(username);
204 Iterator iter = usernames.iterator();
205 Gruppenmitglieder user = null;
206
207 if(iter.hasNext())
208 {
209 user = (Gruppenmitglieder) iter.next();
210 }
211
212 if (log.isDebugEnabled())
213 {
214 log.debug(" Projektnummer " + ((user.getProjektgruppe()).getProjekte()).getProjektnummer());
215 }
216
217 ArrayList projekteAL = new ArrayList();
218 projekteAL.add((user.getProjektgruppe()).getProjekte());
219 projekte = projekteAL;
220
221 if (log.isDebugEnabled())
222 {
223 log.debug(" Found " + projekte.size() + " Projects");
224 }
225 }
226
227 if (projekte != null)
228 {
229 session.setAttribute(Keys.PROJEKTE_KEY, projekte);
230 }
231
232 Collection projektgruppen = null;
233
234 if(isAdmin)
235 {
236 if (log.isDebugEnabled())
237 {
238 log.debug(" User has Role: Administrator");
239 log.debug(" Searching all Project Groups");
240 }
241
242 projektgruppen = dipg.sucheAlle();
243
244 if (log.isDebugEnabled())
245 {
246 log.debug(" Found " + projektgruppen.size() + " Project Groups");
247 }
248 }
249 else if(isProjectleader)
250 {
251 if (log.isDebugEnabled())
252 {
253 log.debug(" User is Projectleader");
254 log.debug(" Searching own Project Groups");
255 }
256
257 Collection usernames = digm.sucheLogInName(username);
258 Iterator iter = usernames.iterator();
259 Gruppenmitglieder user = null;
260
261 if(iter.hasNext())
262 {
263 user = (Gruppenmitglieder) iter.next();
264 }
265
266 if (log.isDebugEnabled())
267 {
268 log.debug(" Projektnummer " + ((user.getProjektgruppe()).getProjekte()).getProjektnummer());
269 }
270
271 projektgruppen = dipg.sucheProjektnummer(((user.getProjektgruppe()).getProjekte()).getProjektnummer());
272
273 if (log.isDebugEnabled())
274 {
275 log.debug(" Found " + projektgruppen.size() + " Project Groups");
276 }
277 }
278 else if(isUser)
279 {
280 if (log.isDebugEnabled())
281 {
282 log.debug(" User is User");
283 log.debug(" Searching own Project Group");
284 }
285
286 Collection usernames = digm.sucheLogInName(username);
287 Iterator iter = usernames.iterator();
288 Gruppenmitglieder user = null;
289
290 if(iter.hasNext())
291 {
292 user = (Gruppenmitglieder) iter.next();
293 }
294
295 if (log.isDebugEnabled())
296 {
297 log.debug(" Gruppennummer " + (user.getProjektgruppe()).getGruppennummer());
298 }
299
300 ArrayList projektgruppenAL = new ArrayList();
301 projektgruppenAL.add(user.getProjektgruppe());
302 projektgruppen = projektgruppenAL;
303
304 if (log.isDebugEnabled())
305 {
306 log.debug(" Found " + projektgruppen.size() + " Project Groups");
307 }
308 }
309
310 if (projektgruppen != null)
311 {
312 session.setAttribute(Keys.PROJEKTGRUPPEN_KEY, projektgruppen);
313 }
314
315 Collection benutzerrollen = null;
316
317 if(isAdmin)
318 {
319 if (log.isDebugEnabled())
320 {
321 log.debug(" User has Role: Administrator");
322 log.debug(" Searching all Roles");
323 }
324
325 benutzerrollen = dib.sucheAlle();
326
327 if (log.isDebugEnabled())
328 {
329 log.debug(" Found " + benutzerrollen.size() + " Project Groups");
330 }
331 }
332 else if(isProjectleader || isUser)
333 {
334 if (log.isDebugEnabled())
335 {
336 log.debug(" User is Projectleader");
337 log.debug(" Searching User Role");
338 }
339
340 Collection usernames = digm.sucheLogInName(username);
341 Iterator iter = usernames.iterator();
342 Gruppenmitglieder user = null;
343
344 if(iter.hasNext())
345 {
346 user = (Gruppenmitglieder) iter.next();
347 }
348
349 benutzerrollen = dib.sucheBenutzerrollenname("Benutzer");
350
351 if (log.isDebugEnabled())
352 {
353 log.debug(" Found " + benutzerrollen.size() + " Roles");
354 }
355 }
356
357 if (benutzerrollen != null)
358 {
359 session.setAttribute(Keys.BENUTZERROLLEN_KEY, benutzerrollen);
360 }
361
362
363 if (form == null)
364 {
365 if (log.isDebugEnabled())
366 {
367 log.debug(" Creating new GruppenmitgliedForm bean under key " + mapping.getAttribute());
368 }
369
370 form = new GruppenmitgliedForm();
371
372 if ("request".equals(mapping.getScope()))
373 {
374 request.setAttribute(mapping.getAttribute(), form);
375 }
376 else
377 {
378 session.setAttribute(mapping.getAttribute(), form);
379 }
380 }
381
382 GruppenmitgliedForm gmform = (GruppenmitgliedForm) form;
383 gmform.setAction(action);
384
385 if (!action.equals("Create"))
386 {
387 if (log.isDebugEnabled())
388 {
389 log.debug(" Populating form from " + gruppenmitglied);
390 }
391
392 try
393 {
394 String login = "";
395 if(gruppenmitglied.getLetzterlogin() != null)
396 {
397 login = gruppenmitglied.getLetzterlogin().toString();
398 }
399
400 gruppenmitglied.setLetzterlogin(null);
401 PropertyUtils.copyProperties(gmform, gruppenmitglied);
402 gmform.setMitgliedsnummer(mitgliedsnummer);
403 gmform.setGruppennummer(gruppenmitglied.getProjektgruppe().getGruppennummer());
404 gmform.setProjektnummer(gruppenmitglied.getProjektgruppe().getProjekte().getProjektnummer());
405 gmform.setRollenID(gruppenmitglied.getBenutzerrolle().getRollenID());
406 gmform.setLetzterlogin(login);
407 gmform.setAction(action);
408 }
409 catch (InvocationTargetException e)
410 {
411 Throwable t = e.getTargetException();
412 if (t == null)
413 t = e;
414 log.error("GruppenmitgliedForm.populate", t);
415 throw new ServletException("GruppenmitgliedForm.populate", t);
416 }
417 catch (Throwable t)
418 {
419 log.error("GruppenmitgliedForm.populate", t);
420 throw new ServletException("GruppenmitgliedForm.populate", t);
421 }
422 }
423
424
425 if (log.isDebugEnabled())
426 {
427 log.debug(" Forwarding to 'success' page");
428 }
429 return (mapping.findForward("success"));
430 }
431 }