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.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&uuml;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  //        ActionForward forward = null;
90          /*** Die Locale Variable (Sprache, Formatierung, etc.) */
91  //        Locale locale = getLocale(request);
92          /*** Die Resourcen (lokalisierten Meldungen) der Anfrage holen */
93  //        MessageResources messages = getResources(request);
94          /*** Wenn Fehler bei der Validierung Fehler auftreten werden Sie diesem
95           *  <code>ActionErrors</code> Objekt hinzugefügt. 
96           */ 
97  //        ActionErrors errors = new ActionErrors();
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     	// Populate the Project Form
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         // Forward control to the edit Projekt page
425         if (log.isDebugEnabled()) 
426         {
427             log.debug(" Forwarding to 'success' page");
428         }
429     	return (mapping.findForward("success"));
430     }
431 }