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.DataInterfaceGruppenmitglieder;
41  import org.fhw.cabaweb.data.DataInterfaceProjekte;
42  import org.fhw.cabaweb.data.DataInterfaceSprachen;
43  import org.fhw.cabaweb.data.DataInterfaceErgebnissdatenGruppierungsnamen;
44  import org.fhw.cabaweb.data.DataInterfaceErgebnissdatenFeldbeschreibungen;
45  import org.fhw.cabaweb.data.DataInterfaceErgebnissdatenFeldnamen;
46  import org.fhw.cabaweb.data.DataInterfaceErgebnissdatenUntergruppierungsnamen;
47  
48  import org.fhw.cabaweb.ojb.dataobjects.Gruppenmitglieder;
49  import org.fhw.cabaweb.ojb.dataobjects.Ergebnissdaten_Feldbeschreibungen;
50  
51  import org.fhw.cabaweb.webfrontend.configs.Keys;
52  import org.fhw.cabaweb.webfrontend.forms.simple.ErgebnissdatenFeldbeschreibungForm;
53  
54  /***
55   * <strong>Action</strong>-Klasse f&uuml;r die Edit ErgebnissdatenFeldbeschreibung 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 16.07.2004
60   */
61  public final class EditErgebnissdatenFeldbeschreibungAction 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.edit");
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      {
92          /*** Forwarding Action Variable mit null initialisieren */
93  //        ActionForward forward = null;
94          /*** Die Locale Variable (Sprache, Formatierung, etc.) */
95  //        Locale locale = getLocale(request);
96          /*** Die Resourcen (lokalisierten Meldungen) der Anfrage holen */
97  //        MessageResources messages = getResources(request);
98          /*** Wenn Fehler bei der Validierung Fehler auftreten werden Sie diesem
99           *  <code>ActionErrors</code> Objekt hinzugefügt. 
100          */ 
101 //        ActionErrors errors = new ActionErrors();
102 
103         /*** Data Interface (indirekter Zugriff auf die OJB Ebene) initialisieren */
104         DataInterfaceErgebnissdatenFeldbeschreibungen divfb = new DataInterfaceErgebnissdatenFeldbeschreibungen();
105         /*** Data Interface (indirekter Zugriff auf die OJB Ebene) initialisieren */
106         DataInterfaceErgebnissdatenFeldnamen divfn = new DataInterfaceErgebnissdatenFeldnamen();
107         /*** Data Interface (indirekter Zugriff auf die OJB Ebene) initialisieren */
108         DataInterfaceErgebnissdatenUntergruppierungsnamen divugn = new DataInterfaceErgebnissdatenUntergruppierungsnamen();
109         /*** Data Interface (indirekter Zugriff auf die OJB Ebene) initialisieren */
110         DataInterfaceErgebnissdatenGruppierungsnamen divgn = new DataInterfaceErgebnissdatenGruppierungsnamen();
111         /*** Data Interface (indirekter Zugriff auf die OJB Ebene) initialisieren */
112         DataInterfaceGruppenmitglieder digm = new DataInterfaceGruppenmitglieder();
113 		/*** Data Interface (indirekter Zugriff auf die OJB Ebene) initialisieren */
114 		DataInterfaceProjekte dip = new DataInterfaceProjekte();
115 		/*** Data Interface (indirekter Zugriff auf die OJB Ebene) initialisieren */
116 		DataInterfaceSprachen dis = new DataInterfaceSprachen();
117         /*** Die Session der aktuellen Anfrage */
118         HttpSession session = request.getSession();
119         /*** Die übergebene Action */
120         String action = request.getParameter("action");
121 
122         /*** Zwischenspeichvaribale für den Status des Benutzers (Administrator ???) */
123         boolean isAdmin = request.isUserInRole("Administrator");
124         /*** Zwischenspeichvaribale für den Status des Benutzers (Projektleiter ???) */
125         boolean isProjectleader = false;
126         /*** Zwischenspeichvaribale für den Status des Benutzers (Benutzer ???) */
127         boolean isUser = false;
128         /*** Zwischenspeichvaribale für den Namen des Benutzers */
129         String username = request.getRemoteUser();
130 
131         if(!isAdmin)
132         {
133             isProjectleader = request.isUserInRole("Projektleiter");
134         }
135         if(!isAdmin && !isProjectleader)
136         {
137             isUser = request.isUserInRole("Benutzer");
138         }
139 
140     	if (action == null) 
141     	{
142     	    action = "Create";
143         }
144 
145         /*** Zwischenspeichvaribale für die Feldnummer (Integer) */
146         Integer feldnummer = null;
147         /*** Zwischenspeichvaribale für die Feldnummer (Request String) */
148         String fnummer = request.getParameter("feldnummer");
149 
150         /*** Zwischenspeichvaribale für die Untergruppierungsnummer (Integer) */
151         Integer untergruppierungsnummer = null;
152         /*** Zwischenspeichvaribale für die Untergruppierungsnummer (Request String) */
153         String ugrpnummer = request.getParameter("untergruppierungsnummer");
154 
155         /*** Zwischenspeichvaribale für die Feldnummer (Integer) */
156         Integer gruppierungsnummer = null;
157         /*** Zwischenspeichvaribale für die Feldnummer (Request String) */
158         String grpnummer = request.getParameter("gruppierungsnummer");
159 
160 		/*** Zwischenspeichvaribale für die Projektnummer (Integer) */
161 		Integer projektnummer = null;
162 		/*** Zwischenspeichvaribale für die Projektnummer (Request String) */
163 		String prjnummer = request.getParameter("projektnummer");
164 
165 		/*** Zwischenspeichvaribale für die Sprachnummer (Integer) */
166 		Integer sprachnummer = null;
167 		/*** Zwischenspeichvaribale für die Sprachnummer (Request String) */
168 		String sprnummer = request.getParameter("sprachnummer");
169             
170         if(fnummer != null)
171         {
172             feldnummer = new Integer(fnummer);
173         }
174             
175         if(ugrpnummer != null)
176         {
177             untergruppierungsnummer = new Integer(ugrpnummer);
178         }
179             
180         if(grpnummer != null)
181         {
182             gruppierungsnummer = new Integer(grpnummer);
183         }
184             
185 		if(prjnummer != null)
186 		{
187 			projektnummer = new Integer(prjnummer);
188 		}
189             
190 		if(sprnummer != null)
191 		{
192 			sprachnummer = new Integer(sprnummer);
193 		}
194             
195         if (log.isDebugEnabled()) 
196         {
197             log.debug("EditErgebnissdatenFeldbeschreibungAction: Processing " + action + " action for Preset Fielddescription [" + feldnummer + "]");
198         }
199         
200 		Collection ergebnissdatenFeldbeschreibungen = divfb.sucheKombination(projektnummer, feldnummer, gruppierungsnummer, untergruppierungsnummer, sprachnummer);
201 		Iterator iter = ergebnissdatenFeldbeschreibungen.iterator();
202 		Ergebnissdaten_Feldbeschreibungen ergebnissdatenFeldbeschreibung = null;
203             
204 		if(iter.hasNext())
205 		{
206 			ergebnissdatenFeldbeschreibung = (Ergebnissdaten_Feldbeschreibungen) iter.next();
207 		}         
208          
209     	if ((ergebnissdatenFeldbeschreibung == null) && !action.equals("Create")) 
210     	{
211             if (log.isDebugEnabled()) 
212             {
213                 log.debug(" No Preset Fielddescription for feldnummer " + feldnummer);
214             }
215             
216     	    return (mapping.findForward("failure"));
217     	}
218     	
219         if (ergebnissdatenFeldbeschreibung != null) 
220         {
221             session.setAttribute(Keys.ERGEBNISSDATENUNTERGRUPPIERUNGSBESCHREIBUNG_KEY, ergebnissdatenFeldbeschreibung);
222         }
223     
224         Collection projekte = null;
225         
226         if(isAdmin)
227         {
228             if (log.isDebugEnabled()) 
229             {
230                 log.debug(" User has Role: Administrator");
231                 log.debug(" Searching all Projects");
232             }
233 
234             projekte = dip.sucheAlle();
235 
236             if (log.isDebugEnabled()) 
237             {
238                 log.debug(" Found " + projekte.size() + " Projects");
239             }
240         }
241         else if(isProjectleader)
242         {
243             if (log.isDebugEnabled()) 
244             {
245                 log.debug(" User is NOT Administrator");
246                 log.debug(" Searching own Project");
247             }
248             
249             Collection usernames = digm.sucheLogInName(username);
250             iter = usernames.iterator();
251             Gruppenmitglieder user = null;
252             
253             if(iter.hasNext())
254             {
255                 user = (Gruppenmitglieder) iter.next();
256             }         
257 
258             if (log.isDebugEnabled()) 
259             {
260                 log.debug(" Projektnummer " + ((user.getProjektgruppe()).getProjekte()).getProjektnummer());
261             }
262 
263             ArrayList projekteAL = new ArrayList();
264             projekteAL.add(dip.sucheProjektnummer(((user.getProjektgruppe()).getProjekte()).getProjektnummer()));
265             projekte = projekteAL;
266             
267             if (log.isDebugEnabled()) 
268             {
269                 log.debug(" Found " + projekte.size() + " Projects");
270             }
271         }
272 
273         if (projekte != null) 
274         {
275             session.setAttribute(Keys.PROJEKTE_KEY, projekte);
276         }
277     
278         Collection ergebnissdatenFeldnamen = null;
279         
280         if(isAdmin)
281         {
282             if (log.isDebugEnabled()) 
283             {
284                 log.debug(" User has Role: Administrator");
285                 log.debug(" Searching all Fieldnames");
286             }
287 
288             ergebnissdatenFeldnamen = divfn.sucheAlle();
289 
290             if (log.isDebugEnabled()) 
291             {
292                 log.debug(" Found " + ergebnissdatenFeldnamen.size() + " Fieldnames");
293             }
294         }
295         else if(isProjectleader)
296         {
297             if (log.isDebugEnabled()) 
298             {
299                 log.debug(" User is NOT Administrator");
300                 log.debug(" Searching own Fieldnames");
301             }
302             
303             Collection usernames = digm.sucheLogInName(username);
304             iter = usernames.iterator();
305             Gruppenmitglieder user = null;
306             
307             if(iter.hasNext())
308             {
309                 user = (Gruppenmitglieder) iter.next();
310             }         
311 
312             if (log.isDebugEnabled()) 
313             {
314                 log.debug(" Projektnummer " + ((user.getProjektgruppe()).getProjekte()).getProjektnummer());
315             }
316 
317             ergebnissdatenFeldnamen = divfn.sucheProjektnummer(((user.getProjektgruppe()).getProjekte()).getProjektnummer());
318             
319             if (log.isDebugEnabled()) 
320             {
321                 log.debug(" Found " + ergebnissdatenFeldnamen.size() + " Fieldnames");
322             }
323         }
324 
325         if (ergebnissdatenFeldnamen != null) 
326         {
327             session.setAttribute(Keys.ERGEBNISSDATENFELDNAMEN_KEY, ergebnissdatenFeldnamen);
328         }
329     
330         Collection ergebnissdatenUntergruppierungsnamen = null;
331         
332         if(isAdmin)
333         {
334             if (log.isDebugEnabled()) 
335             {
336                 log.debug(" User has Role: Administrator");
337                 log.debug(" Searching all Sub-Groupnames");
338             }
339 
340             ergebnissdatenUntergruppierungsnamen = divugn.sucheAlle();
341 
342             if (log.isDebugEnabled()) 
343             {
344                 log.debug(" Found " + ergebnissdatenUntergruppierungsnamen.size() + " Sub-Groupnames");
345             }
346         }
347         else if(isProjectleader)
348         {
349             if (log.isDebugEnabled()) 
350             {
351                 log.debug(" User is NOT Administrator");
352                 log.debug(" Searching own Sub-Groupnames");
353             }
354             
355             Collection usernames = digm.sucheLogInName(username);
356             iter = usernames.iterator();
357             Gruppenmitglieder user = null;
358             
359             if(iter.hasNext())
360             {
361                 user = (Gruppenmitglieder) iter.next();
362             }         
363 
364             if (log.isDebugEnabled()) 
365             {
366                 log.debug(" Projektnummer " + ((user.getProjektgruppe()).getProjekte()).getProjektnummer());
367             }
368 
369             ergebnissdatenUntergruppierungsnamen = divugn.sucheProjektnummer(((user.getProjektgruppe()).getProjekte()).getProjektnummer());
370             
371             if (log.isDebugEnabled()) 
372             {
373                 log.debug(" Found " + ergebnissdatenUntergruppierungsnamen.size() + " Sub-Groupnames");
374             }
375         }
376 
377         if (ergebnissdatenUntergruppierungsnamen != null) 
378         {
379             session.setAttribute(Keys.ERGEBNISSDATENUNTERGRUPPIERUNGSNAMEN_KEY, ergebnissdatenUntergruppierungsnamen);
380         }
381     
382         Collection ergebnissdatenGruppierungsnamen = null;
383         
384         if(isAdmin)
385         {
386             if (log.isDebugEnabled()) 
387             {
388                 log.debug(" User has Role: Administrator");
389                 log.debug(" Searching all Groupnames");
390             }
391 
392             ergebnissdatenGruppierungsnamen = divgn.sucheAlle();
393 
394             if (log.isDebugEnabled()) 
395             {
396                 log.debug(" Found " + ergebnissdatenGruppierungsnamen.size() + " Groupnames");
397             }
398         }
399         else if(isProjectleader)
400         {
401             if (log.isDebugEnabled()) 
402             {
403                 log.debug(" User is NOT Administrator");
404                 log.debug(" Searching own Groupnames");
405             }
406             
407             Collection usernames = digm.sucheLogInName(username);
408             iter = usernames.iterator();
409             Gruppenmitglieder user = null;
410             
411             if(iter.hasNext())
412             {
413                 user = (Gruppenmitglieder) iter.next();
414             }         
415 
416             if (log.isDebugEnabled()) 
417             {
418                 log.debug(" Projektnummer " + ((user.getProjektgruppe()).getProjekte()).getProjektnummer());
419             }
420 
421             ergebnissdatenGruppierungsnamen = divgn.sucheProjektnummer(((user.getProjektgruppe()).getProjekte()).getProjektnummer());
422             
423             if (log.isDebugEnabled()) 
424             {
425                 log.debug(" Found " + ergebnissdatenGruppierungsnamen.size() + " Groupnames");
426             }
427         }
428 
429         if (ergebnissdatenGruppierungsnamen != null) 
430         {
431             session.setAttribute(Keys.ERGEBNISSDATENGRUPPIERUNGSNAMEN_KEY, ergebnissdatenGruppierungsnamen);
432         }
433     
434 		Collection sprachen = dis.sucheAlle();
435 		if (sprachen != null) 
436 		{
437 			session.setAttribute(Keys.SPRACHEN_KEY, sprachen);
438 		}
439     
440     	// Populate the Project Form
441     	if (form == null) 
442     	{
443             if (log.isDebugEnabled()) 
444             {
445                 log.debug(" Creating new ErgebnissdatenFeldbeschreibungForm bean under key " + mapping.getAttribute());
446             }
447             
448 	        form = new ErgebnissdatenFeldbeschreibungForm();
449 	        
450             if ("request".equals(mapping.getScope())) 
451             {
452                 request.setAttribute(mapping.getAttribute(), form);
453             } 
454             else 
455             {
456                 session.setAttribute(mapping.getAttribute(), form);
457             }
458     	}
459 
460         ErgebnissdatenFeldbeschreibungForm prvugbform = (ErgebnissdatenFeldbeschreibungForm) form;
461         prvugbform.setAction(action);
462 	    
463         if (!action.equals("Create")) 
464         {
465             if (log.isDebugEnabled()) 
466             {
467                 log.debug(" Populating form from " + ergebnissdatenFeldbeschreibung);
468             }
469             
470             try 
471             {
472                 PropertyUtils.copyProperties(prvugbform, ergebnissdatenFeldbeschreibung);
473                 prvugbform.setFeldnummer(ergebnissdatenFeldbeschreibung.getErgebnissdaten_feldnamen().getFeldnummer());
474                 prvugbform.setUntergruppierungsnummer(ergebnissdatenFeldbeschreibung.getErgebnissdaten_feldnamen().getErgebnissdaten_untergruppierungsnamen().getUntergruppierungsnummer());
475                 prvugbform.setGruppierungsnummer(ergebnissdatenFeldbeschreibung.getErgebnissdaten_feldnamen().getErgebnissdaten_untergruppierungsnamen().getErgebnissdaten_gruppierungsnamen().getGruppierungsnummer());
476                 prvugbform.setProjektnummer(ergebnissdatenFeldbeschreibung.getErgebnissdaten_feldnamen().getErgebnissdaten_untergruppierungsnamen().getErgebnissdaten_gruppierungsnamen().getProjekte().getProjektnummer());
477                 prvugbform.setSprachnummer(ergebnissdatenFeldbeschreibung.getSprachen().getSprachnummer());
478                 prvugbform.setAction(action);
479             } 
480             catch (InvocationTargetException e) 
481             {
482                 Throwable t = e.getTargetException();
483                 if (t == null)
484                     t = e;
485                 log.error("ErgebnissdatenFeldbeschreibungForm.populate", t);
486                 throw new ServletException("ErgebnissdatenFeldbeschreibungForm.populate", t);
487             } 
488             catch (Throwable t) 
489             {
490                 log.error("ErgebnissdatenFeldbeschreibungForm.populate", t);
491                 throw new ServletException("ErgebnissdatenFeldbeschreibungForm.populate", t);
492             }
493         }
494 
495         // Forward control to the edit Projekt page
496         if (log.isDebugEnabled()) 
497         {
498             log.debug(" Forwarding to 'success' page");
499         }
500     	return (mapping.findForward("success"));
501     }
502 }