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.save;
20
21 import java.lang.reflect.InvocationTargetException;
22 import java.util.Collection;
23 import java.util.Iterator;
24
25 import javax.servlet.ServletException;
26 import javax.servlet.http.HttpServletRequest;
27 import javax.servlet.http.HttpServletResponse;
28 import javax.servlet.http.HttpSession;
29
30 import org.apache.struts.action.Action;
31 import org.apache.struts.action.ActionForm;
32 import org.apache.struts.action.ActionForward;
33 import org.apache.struts.action.ActionMapping;
34
35 import org.apache.struts.util.MessageResources;
36
37 import org.apache.commons.beanutils.PropertyUtils;
38 import org.apache.commons.logging.Log;
39 import org.apache.commons.logging.LogFactory;
40
41 import org.fhw.cabaweb.data.DataInterfaceBenutzerrollen;
42 import org.fhw.cabaweb.data.DataInterfaceGruppenmitglieder;
43 import org.fhw.cabaweb.data.DataInterfaceProjektgruppen;
44
45 import org.fhw.cabaweb.ojb.dataobjects.Benutzerrollen;
46 import org.fhw.cabaweb.ojb.dataobjects.Gruppenmitglieder;
47 import org.fhw.cabaweb.ojb.dataobjects.Projektgruppen;
48
49 import org.fhw.cabaweb.tools.Password;
50 import org.fhw.cabaweb.tools.StringUtilities;
51 import org.fhw.cabaweb.webfrontend.configs.Keys;
52 import org.fhw.cabaweb.webfrontend.forms.simple.GruppenmitgliedForm;
53
54 /***
55 * <strong>Action</strong>-Klasse für die Save Gruppenmitglied Action .
56 * Die Controller Klasse der Struts Model View Controller Architektur.
57 *
58 * @author <a href="mailto:thomas.vogt@tvc-software.com">Thomas Vogt</a>
59 * @version Version 1.0 06.07.2004
60 */
61 public final class SaveGruppenmitgliedAction extends Action {
62
63 /***
64 * The <code>Log</code> instance for this application.
65 */
66 private Log log = LogFactory.getLog("org.fhw.cabaweb.webfrontend.actions.save");
67
68 /***
69 * Verarbeiten der spezifizierten HTTP Anfrage und erzeugen der zugeordneten
70 * HTTP Antwort bzw. Forwarden an eine andere Web Komponente, die die Antwort
71 * erzeugt.
72 *
73 * Gibt eine <code>ActionForward</code> Instanz zurück die angibt wohin und wie
74 * die Kontrolle weitergegeben werden soll. Kann auch <code>null</code> sein,
75 * wenn die Anfrage bereits bearbeitet wurde.
76 *
77 * @param mapping Das ActionMapping das benutzt wurde um diese Instanz zu selektieren
78 * @param form Das optionale ActionForm Bean für die Anfrage (soweit vorhanden)
79 * @param request Die HTTP Anfrage die wir gerade bearbeiten
80 * @param response The HTTP Antwort die wir erzeugen
81 *
82 * @return Die Action zu der wir weiterleiten
83 * @exception Exception wenn ein Eingabe-/Ausgabe Fehler auftritt oder eine Servlet Exception auftritt
84 * bzw. die Business Logik einen Fehler verursacht
85 */
86 public ActionForward execute(ActionMapping mapping,
87 ActionForm form,
88 HttpServletRequest request,
89 HttpServletResponse response)
90 throws Exception {
91 /*** Forwarding Action Variable mit null initialisieren */
92
93 /*** Die Locale Variable (Sprache, Formatierung, etc.) */
94
95
96 /*** Data Interface (indirekter Zugriff auf die OJB Ebene) initialisieren */
97 DataInterfaceGruppenmitglieder digm = new DataInterfaceGruppenmitglieder();
98 /*** Data Interface für Benutzer (indirekter Zugriff auf die OJB Ebene) initialisieren */
99 DataInterfaceProjektgruppen dipg = new DataInterfaceProjektgruppen();
100 /*** Data Interface für Benutzer (indirekter Zugriff auf die OJB Ebene) initialisieren */
101 DataInterfaceBenutzerrollen dibr = new DataInterfaceBenutzerrollen();
102 /*** Die Resourcen (lokalisierten Meldungen) der Anfrage holen */
103 MessageResources messages = getResources(request);
104 /*** Die Session der aktuellen Anfrage */
105 HttpSession session = request.getSession();
106 /*** Das übergebene Formular */
107 GruppenmitgliedForm gmform = (GruppenmitgliedForm) form;
108 /*** Die übergebene Action */
109 String action = gmform.getAction();
110
111 /*** Zwischenspeichvaribale für den Rückgabewert */
112 boolean returnvalue = false;
113 /*** Zwischenspeichvaribale für das Gruppenmitglied */
114 Gruppenmitglieder gruppenmitglied = null;
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 Collection usernames = digm.sucheLogInName(username);
135 Iterator iter = usernames.iterator();
136 Gruppenmitglieder user = null;
137
138 if (iter.hasNext())
139 {
140 user = (Gruppenmitglieder) iter.next();
141 }
142
143 if (action == null)
144 {
145 action = "?";
146 }
147
148 if (log.isDebugEnabled())
149 {
150 log.debug("SaveGruppenmitgliedAction: Processing " + action + " action");
151 if(isAdmin)
152 {
153 log.debug(" User has Role: Administrator");
154 }
155 else if(isProjectleader)
156 {
157 log.debug(" User has Role: Projectleader");
158 }
159 else if(isUser)
160 {
161 log.debug(" User has Role: User");
162 }
163 }
164
165
166 if (isCancelled(request))
167 {
168 if (log.isDebugEnabled())
169 {
170 log.debug(" Transaction '" + action + "' was cancelled");
171 }
172
173 session.removeAttribute(Keys.GRUPPENMITGLIED_KEY);
174 return (mapping.findForward("success"));
175 }
176
177 gruppenmitglied = (Gruppenmitglieder) session.getAttribute(Keys.GRUPPENMITGLIED_KEY);
178
179 if (gruppenmitglied == null)
180 {
181 if (log.isDebugEnabled())
182 {
183 log.debug(" In Session saved Group Member is NULL.");
184 }
185
186 gruppenmitglied = new Gruppenmitglieder();
187 }
188
189
190 if (log.isDebugEnabled())
191 {
192 log.debug(" Populating database from form bean");
193 }
194
195 try
196 {
197 gmform.setLetzterlogin(null);
198 PropertyUtils.copyProperties(gruppenmitglied, gmform);
199 if(isAdmin || isProjectleader)
200 {
201 gruppenmitglied.setProjektgruppe((Projektgruppen) dipg.sucheGruppennummer(gmform.getGruppennummer()));
202 gruppenmitglied.setBenutzerrolle((Benutzerrollen) dibr.sucheBenutzerrollennummer(gmform.getRollenID()));
203 }
204 else
205 {
206 gruppenmitglied.setProjektgruppe(user.getProjektgruppe());
207 gruppenmitglied.setBenutzerrolle(user.getBenutzerrolle());
208 }
209 gruppenmitglied.setLetzterlogin(null);
210
211 if(gmform.getPasswort() != null && gmform.getPasswort().trim() != "")
212 gruppenmitglied.setPassworthash(Password.generateMD5(gmform.getPasswort().trim()));
213 else
214 gruppenmitglied.setPassworthash(gmform.getPassworthash());
215 }
216 catch (InvocationTargetException e)
217 {
218 Throwable t = e.getTargetException();
219 if (t == null)
220 t = e;
221 log.error("GruppenmitgliedForm.populate", t);
222 throw new ServletException("GruppenmitgliedForm.populate", t);
223 }
224 catch (Throwable t)
225 {
226 log.error("GruppenmitgliedForm.populate", t);
227 throw new ServletException("GruppenmitgliedForm.populate", t);
228 }
229
230 if ("Create".equals(action) && (isAdmin || isProjectleader))
231 {
232 if (log.isDebugEnabled())
233 {
234 log.debug("Creating a new Group Member: " + gruppenmitglied);
235 }
236
237 if(isProjectleader)
238 {
239 Benutzerrollen role = null;
240 Collection roles = dibr.sucheBenutzerrollenname("Benutzer");
241 Iterator roleiterator = roles.iterator();
242
243 if(roleiterator.hasNext())
244 {
245 role = (Benutzerrollen) roleiterator.next();
246 }
247
248 gruppenmitglied.setBenutzerrolle(role);
249 }
250
251 gruppenmitglied.setLoginName(StringUtilities.convertUTF8String(gruppenmitglied.getLoginName()));
252 gruppenmitglied.setMitgliedsadresse1(StringUtilities.convertUTF8String(gruppenmitglied.getMitgliedsadresse1()));
253 gruppenmitglied.setMitgliedsadresse2(StringUtilities.convertUTF8String(gruppenmitglied.getMitgliedsadresse2()));
254 gruppenmitglied.setMitgliedsemailadresse(StringUtilities.convertUTF8String(gruppenmitglied.getMitgliedsemailadresse()));
255 gruppenmitglied.setMitgliedsname(StringUtilities.convertUTF8String(gruppenmitglied.getMitgliedsname()));
256 gruppenmitglied.setMitgliedsvorname(StringUtilities.convertUTF8String(gruppenmitglied.getMitgliedsvorname()));
257 gruppenmitglied.setMitgliedsort(StringUtilities.convertUTF8String(gruppenmitglied.getMitgliedsort()));
258
259 returnvalue = digm.erzeugen(gruppenmitglied);
260 session.removeAttribute(Keys.GRUPPENMITGLIED_KEY);
261
262 if (!returnvalue)
263 {
264 if (log.isDebugEnabled())
265 {
266 log.debug(" Group Member creation failed");
267 }
268
269 response.sendError(HttpServletResponse.SC_BAD_REQUEST, messages.getMessage("error.gruppenmitglied.create"));
270 return (null);
271 }
272 }
273
274 if (action.equals("Delete") && isAdmin)
275 {
276 if (log.isDebugEnabled())
277 {
278 log.debug(" Deleting existing Group Member [ " + gruppenmitglied.getMitgliedsnummer() + ", "
279 + gruppenmitglied.getProjektgruppe().getProjekte().getProjektname() + ", "
280 + gruppenmitglied.getProjektgruppe().getGruppenname() + ", "
281 + gruppenmitglied.getBenutzerrolle().getRollenname() + " ] "
282 + gruppenmitglied.getMitgliedsname() + ", " + gruppenmitglied.getMitgliedsvorname());
283 }
284
285 returnvalue = digm.loeschen(gruppenmitglied);
286 session.removeAttribute(Keys.GRUPPENMITGLIED_KEY);
287
288 if (!returnvalue)
289 {
290 if (log.isDebugEnabled())
291 {
292 log.debug(" Group Member deletion failed");
293 }
294
295 response.sendError(HttpServletResponse.SC_BAD_REQUEST, messages.getMessage("error.gruppenmitglied.delete"));
296 return (null);
297 }
298 }
299 else if (action.equals("Delete") && isProjectleader)
300 {
301 if (log.isDebugEnabled())
302 {
303 log.debug(" Deleting existing Group Member [ " + gruppenmitglied.getMitgliedsnummer() + ", "
304 + gruppenmitglied.getProjektgruppe().getProjekte().getProjektname() + ", "
305 + gruppenmitglied.getProjektgruppe().getGruppenname() + ", "
306 + gruppenmitglied.getBenutzerrolle().getRollenname() + " ] "
307 + gruppenmitglied.getMitgliedsname() + ", " + gruppenmitglied.getMitgliedsvorname());
308 }
309
310 if(gruppenmitglied.getProjektgruppe().getProjekte().getProjektnummer().compareTo(user.getProjektgruppe().getProjekte().getProjektnummer()) == 0)
311 {
312 returnvalue = digm.loeschen(gruppenmitglied);
313 }
314 else
315 {
316 returnvalue = false;
317 }
318 session.removeAttribute(Keys.GRUPPENMITGLIED_KEY);
319
320 if (!returnvalue)
321 {
322 if (log.isDebugEnabled())
323 {
324 log.debug(" Group Member deletion failed");
325 }
326
327 response.sendError(HttpServletResponse.SC_BAD_REQUEST, messages.getMessage("error.gruppenmitglied.delete"));
328 return (null);
329 }
330 }
331
332 if (action.equals("Edit") && (isAdmin || isProjectleader || isUser))
333 {
334 if (log.isDebugEnabled())
335 {
336 log.debug(" Editing existing Group Member [ " + gruppenmitglied.getMitgliedsnummer() + ", "
337 + gruppenmitglied.getProjektgruppe().getProjekte().getProjektname() + ", "
338 + gruppenmitglied.getProjektgruppe().getGruppenname() + ", "
339 + gruppenmitglied.getBenutzerrolle().getRollenname() + " ] "
340 + gruppenmitglied.getMitgliedsname() + ", " + gruppenmitglied.getMitgliedsvorname());
341 }
342
343 gruppenmitglied.setLoginName(StringUtilities.convertUTF8String(gruppenmitglied.getLoginName()));
344 gruppenmitglied.setMitgliedsadresse1(StringUtilities.convertUTF8String(gruppenmitglied.getMitgliedsadresse1()));
345 gruppenmitglied.setMitgliedsadresse2(StringUtilities.convertUTF8String(gruppenmitglied.getMitgliedsadresse2()));
346 gruppenmitglied.setMitgliedsemailadresse(StringUtilities.convertUTF8String(gruppenmitglied.getMitgliedsemailadresse()));
347 gruppenmitglied.setMitgliedsname(StringUtilities.convertUTF8String(gruppenmitglied.getMitgliedsname()));
348 gruppenmitglied.setMitgliedsvorname(StringUtilities.convertUTF8String(gruppenmitglied.getMitgliedsvorname()));
349 gruppenmitglied.setMitgliedsort(StringUtilities.convertUTF8String(gruppenmitglied.getMitgliedsort()));
350
351 if(isProjectleader
352 && gruppenmitglied.getProjektgruppe().getProjekte().getProjektnummer().equals(((user.getProjektgruppe()).getProjekte()).getProjektnummer())
353 || isAdmin)
354 {
355 if (log.isDebugEnabled())
356 {
357 log.debug(" Group Member editing is being processed");
358 }
359
360 returnvalue = digm.editieren(gruppenmitglied);
361 }
362 else if(isUser && gruppenmitglied.getMitgliedsnummer().equals(user.getMitgliedsnummer()))
363 {
364 if (log.isDebugEnabled())
365 {
366 log.debug(" Group Member editing is being processed");
367 }
368
369 returnvalue = digm.editieren(gruppenmitglied);
370 }
371 else
372 {
373 if (log.isDebugEnabled())
374 {
375 log.debug(" User not authorized to edit Group Member");
376 }
377 }
378
379 session.removeAttribute(Keys.GRUPPENMITGLIED_KEY);
380
381 if (!returnvalue)
382 {
383 if (log.isDebugEnabled())
384 {
385 log.debug(" Group Member editing failed");
386 }
387
388 response.sendError(HttpServletResponse.SC_BAD_REQUEST, messages.getMessage("error.gruppenmitglied.edit"));
389 return (null);
390 }
391 }
392
393
394 if (mapping.getAttribute() != null)
395 {
396 if ("request".equals(mapping.getScope()))
397 request.removeAttribute(mapping.getAttribute());
398 else
399 session.removeAttribute(mapping.getAttribute());
400 }
401 session.removeAttribute(Keys.GRUPPENMITGLIED_KEY);
402
403
404 if (log.isDebugEnabled())
405 {
406 log.debug(" Forwarding to 'success' page");
407 }
408 return (mapping.findForward("success"));
409 }
410 }