View Javadoc

1   ////////////////////////////////////////////////////////////////////////////////
2   //CabaWeb
3   //Copyright (C) 2004  Thomas Vogt <Thomas.Vogt@TVC-Software.com>
4   //
5   //This library is free software; you can redistribute it and/or
6   //modify it under the terms of the GNU Lesser General Public
7   //License as published by the Free Software Foundation; either
8   //version 2.1 of the License, or (at your option) any later version.
9   //
10  //This library is distributed in the hope that it will be useful,
11  //but WITHOUT ANY WARRANTY; without even the implied warranty of
12  //MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13  //Lesser General Public License for more details.
14  //
15  //You should have received a copy of the GNU Lesser General Public
16  //License along with this library; if not, write to the Free Software
17  //Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
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&uuml;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  //        ActionForward forward = null;
93          /*** Die Locale Variable (Sprache, Formatierung, etc.) */
94  //        Locale locale = getLocale(request);
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     	// Was this transaction cancelled?
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         // All required validations were done by the form itself
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         // Remove the obsolete form bean and current project
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         // Forward control to the specified success URI
404         if (log.isDebugEnabled()) 
405         {
406             log.debug(" Forwarding to 'success' page");
407         }
408     	return (mapping.findForward("success"));
409     }
410 }