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.DataInterfaceErgebnissdatenFeldnamen;
41  import org.fhw.cabaweb.data.DataInterfaceErgebnissdatenGruppierungsnamen;
42  import org.fhw.cabaweb.data.DataInterfaceErgebnissdatenUntergruppierungsnamen;
43  import org.fhw.cabaweb.data.DataInterfaceGruppenmitglieder;
44  import org.fhw.cabaweb.data.DataInterfaceReporterzeugung;
45  import org.fhw.cabaweb.data.DataInterfaceProjekte;
46  import org.fhw.cabaweb.data.DataInterfaceReportnamen;
47  import org.fhw.cabaweb.data.DataInterfaceSprachen;
48  
49  import org.fhw.cabaweb.ojb.dataobjects.Ergebnissdaten_Feldnamen;
50  import org.fhw.cabaweb.ojb.dataobjects.Ergebnissdaten_Gruppierungsnamen;
51  import org.fhw.cabaweb.ojb.dataobjects.Ergebnissdaten_Untergruppierungsnamen;
52  import org.fhw.cabaweb.ojb.dataobjects.Gruppenmitglieder;
53  import org.fhw.cabaweb.ojb.dataobjects.Reporterzeugung;
54  
55  import org.fhw.cabaweb.webfrontend.configs.Keys;
56  import org.fhw.cabaweb.webfrontend.forms.simple.ReporterzeugungForm;
57  
58  /***
59   * <strong>Action</strong>-Klasse f&uuml;r die Edit Reporterzeugung Action .
60   * Die Controller Klasse der Struts Model View Controller Architektur.
61   *
62   * @author  <a href="mailto:thomas.vogt@tvc-software.com">Thomas Vogt</a>
63   * @version Version 1.0 05.09.2004
64   */
65  public final class EditReporterzeugungAction extends Action {
66  
67      /***
68       * The <code>Log</code> instance for this application.
69       */
70      private Log log = LogFactory.getLog("org.fhw.cabaweb.webfrontend.actions.edit");
71  
72      /***
73       * Verarbeiten der spezifizierten HTTP Anfrage und erzeugen der zugeordneten
74       * HTTP Antwort bzw. Forwarden an eine andere Web Komponente, die die Antwort 
75       * erzeugt.  
76       * 
77       * Gibt eine <code>ActionForward</code> Instanz zurück die angibt wohin und wie
78       * die Kontrolle weitergegeben werden soll. Kann auch <code>null</code> sein, 
79       * wenn die Anfrage bereits bearbeitet wurde.
80       * 
81       * @param mapping Das ActionMapping das benutzt wurde um diese Instanz zu selektieren
82       * @param form Das optionale ActionForm Bean für die Anfrage (soweit vorhanden)
83       * @param request Die HTTP Anfrage die wir gerade bearbeiten
84       * @param response The HTTP Antwort die wir erzeugen
85       *
86       * @return Die Action zu der wir weiterleiten
87       * @exception Exception wenn ein Eingabe-/Ausgabe Fehler auftritt oder eine Servlet Exception auftritt
88       *            bzw. die Business Logik einen Fehler verursacht 
89       */
90      public ActionForward execute(ActionMapping mapping,
91  				                 ActionForm form,
92                                   HttpServletRequest request,
93                                   HttpServletResponse response)
94      throws Exception 
95      {
96          /*** Forwarding Action Variable mit null initialisieren */
97  //        ActionForward forward = null;
98          /*** Die Locale Variable (Sprache, Formatierung, etc.) */
99  //        Locale locale = getLocale(request);
100         /*** Die Resourcen (lokalisierten Meldungen) der Anfrage holen */
101 //        MessageResources messages = getResources(request);
102         /*** Wenn Fehler bei der Validierung Fehler auftreten werden Sie diesem
103          *  <code>ActionErrors</code> Objekt hinzugefügt. 
104          */ 
105 //        ActionErrors errors = new ActionErrors();
106 
107         /*** Data Interface (indirekter Zugriff auf die OJB Ebene) initialisieren */
108         DataInterfaceReportnamen dirn = new DataInterfaceReportnamen();
109         /*** Data Interface (indirekter Zugriff auf die OJB Ebene) initialisieren */
110         DataInterfaceReporterzeugung dire = new DataInterfaceReporterzeugung();
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         DataInterfaceErgebnissdatenFeldnamen diefn = new DataInterfaceErgebnissdatenFeldnamen();
117         /*** Data Interface (indirekter Zugriff auf die OJB Ebene) initialisieren */
118         DataInterfaceErgebnissdatenGruppierungsnamen diegn = new DataInterfaceErgebnissdatenGruppierungsnamen();
119         /*** Data Interface (indirekter Zugriff auf die OJB Ebene) initialisieren */
120         DataInterfaceErgebnissdatenUntergruppierungsnamen dieugn = new DataInterfaceErgebnissdatenUntergruppierungsnamen();
121         /*** Data Interface (indirekter Zugriff auf die OJB Ebene) initialisieren */
122         DataInterfaceSprachen dis = new DataInterfaceSprachen();
123         /*** Die Session der aktuellen Anfrage */
124         HttpSession session = request.getSession();
125         /*** Die übergebene Action */
126         String action = request.getParameter("action");
127 
128         /*** Zwischenspeichvaribale für den Status des Benutzers (Administrator ???) */
129         boolean isAdmin = request.isUserInRole("Administrator");
130         /*** Zwischenspeichvaribale für den Status des Benutzers (Projektleiter ???) */
131         boolean isProjectleader = false;
132         /*** Zwischenspeichvaribale für den Status des Benutzers (Benutzer ???) */
133         boolean isUser = false;
134         /*** Zwischenspeichvaribale für den Namen des Benutzers */
135         String username = request.getRemoteUser();
136 
137         if(!isAdmin)
138         {
139             isProjectleader = request.isUserInRole("Projektleiter");
140         }
141         if(!isAdmin && !isProjectleader)
142         {
143             isUser = request.isUserInRole("Benutzer");
144         }
145 
146     	if (action == null) 
147     	{
148     	    action = "Create";
149         }
150 
151         /*** Zwischenspeichvaribale für die Projektnummer (Integer) */
152         Integer projektnummer = null;
153         /*** Zwischenspeichvaribale für die Projektnummer (Request String) */
154         String prjnummer = request.getParameter("projektnummer");
155 
156         /*** Zwischenspeichvaribale für die Reportnummer (Integer) */
157         Integer reportnummer = null;
158         /*** Zwischenspeichvaribale für die Reportnummer (Request String) */
159         String rptnummer = request.getParameter("reportnummer");
160 
161         /*** Zwischenspeichvaribale für die Sprachnummer (Integer) */
162         Integer sprachnummer = null;
163         /*** Zwischenspeichvaribale für die Sprachnummer (Request String) */
164         String sprnummer = request.getParameter("sprachnummer");
165 
166         /*** Zwischenspeichvaribale für die Sprachnummer (Integer) */
167         Integer seite = null;
168         /*** Zwischenspeichvaribale für die Sprachnummer (Request String) */
169         String page = request.getParameter("seite");
170 
171         /*** Zwischenspeichvaribale für die Position (Integer) */
172         Integer position = null;
173         /*** Zwischenspeichvaribale für die Position (Request String) */
174         String pos = request.getParameter("position");
175             
176         if(prjnummer != null)
177         {
178             projektnummer = new Integer(prjnummer);
179         }
180             
181         if(rptnummer != null)
182         {
183             reportnummer = new Integer(rptnummer);
184         }
185             
186         if(sprnummer != null)
187         {
188             sprachnummer = new Integer(sprnummer);
189         }
190             
191         if(page != null)
192         {
193             seite = new Integer(page);
194         }
195             
196         if(pos != null)
197         {
198             position = new Integer(pos);
199         }
200             
201         if (log.isDebugEnabled()) 
202         {
203             log.debug("EditReporterzeugungAction: Processing " + action + " action for Reporterzeugung [" + projektnummer + ", " + reportnummer + ", " + sprachnummer + ", " + seite + ", " + position + "]");
204         }
205         
206         Collection reporterzeugungen = dire.sucheKombination(reportnummer, projektnummer, sprachnummer, seite, position);
207         Iterator reporterzeugungenIterator = reporterzeugungen.iterator();
208         Reporterzeugung reporterzeugung = null;
209         if(reporterzeugungenIterator.hasNext())
210             reporterzeugung = (Reporterzeugung) reporterzeugungenIterator.next();
211          
212     	if ((reporterzeugung == null) && !action.equals("Create")) 
213     	{
214             if (log.isDebugEnabled()) 
215             {
216                 log.debug(" No Reporterzeugung for reportnummer " + reportnummer);
217             }
218             
219     	    return (mapping.findForward("failure"));
220     	}
221     	
222         if (reporterzeugung != null) 
223         {
224             session.setAttribute(Keys.REPORTERZEUGUNG_KEY, reporterzeugung);
225         }
226         
227         Collection projekte = new ArrayList();        
228         Collection reportnamen = new ArrayList();
229         Collection feldnamen = new ArrayList();
230         Collection gruppierungsnamen = new ArrayList();
231         Collection untergruppierungsnamen = new ArrayList();
232     
233         if(isAdmin)
234         {
235             if (log.isDebugEnabled()) 
236             {
237                 log.debug(" User has Role: Administrator");
238                 log.debug(" Searching all Projects");
239                 log.debug(" Searching all Reportnames");
240                 log.debug(" Searching all Fieldnames");
241                 log.debug(" Searching all Groupnames");
242                 log.debug(" Searching all Sub-Groupnames");
243             }
244 
245             projekte = dip.sucheAlle();
246             reportnamen = dirn.sucheAlle();
247             feldnamen.add(new Ergebnissdaten_Feldnamen(new Integer(0), null, null, "", "", ""));
248             feldnamen.addAll(diefn.sucheAlle());
249             gruppierungsnamen.add(new Ergebnissdaten_Gruppierungsnamen(new Integer(0), null, ""));
250             gruppierungsnamen.addAll(diegn.sucheAlle());
251             untergruppierungsnamen.add(new Ergebnissdaten_Untergruppierungsnamen(new Integer(0), null, ""));
252             untergruppierungsnamen.addAll(dieugn.sucheAlle());
253 
254             if (log.isDebugEnabled()) 
255             {
256                 log.debug(" Found " + projekte.size() + " Projects");
257                 log.debug(" Found " + reportnamen.size() + " Reportnames");
258                 log.debug(" Found " + feldnamen.size() + " Fieldnames");
259                 log.debug(" Found " + gruppierungsnamen.size() + " Groupnames");
260                 log.debug(" Found " + untergruppierungsnamen.size() + " Sub-Groupnames");
261             }
262         }
263         else if(isProjectleader)
264         {
265             if (log.isDebugEnabled()) 
266             {
267                 log.debug(" User is NOT Administrator");
268                 log.debug(" Searching own Project");
269                 log.debug(" Searching own Reportnames");
270                 log.debug(" Searching own Fieldnames");
271                 log.debug(" Searching own Groupnames");
272                 log.debug(" Searching own Sub-Groupnames");
273             }
274             
275             Collection usernames = digm.sucheLogInName(username);
276             Iterator iter = usernames.iterator();
277             Gruppenmitglieder user = null;
278             
279             if(iter.hasNext())
280             {
281                 user = (Gruppenmitglieder) iter.next();
282             }         
283 
284             if (log.isDebugEnabled()) 
285             {
286                 log.debug(" Projektnummer " + ((user.getProjektgruppe()).getProjekte()).getProjektnummer());
287             }
288 
289             ArrayList projekteAL = new ArrayList();
290             projekteAL.add((user.getProjektgruppe()).getProjekte());
291             projekte = projekteAL;
292             reportnamen = dirn.sucheProjektnummer((user.getProjektgruppe()).getProjekte().getProjektnummer());
293             
294             feldnamen.add(new Ergebnissdaten_Feldnamen(new Integer(0), null, null, "", "", ""));
295             feldnamen.addAll(diefn.sucheProjektnummer((user.getProjektgruppe()).getProjekte().getProjektnummer()));
296             gruppierungsnamen.add(new Ergebnissdaten_Gruppierungsnamen(new Integer(0), null, ""));
297             gruppierungsnamen.addAll(diegn.sucheProjektnummer((user.getProjektgruppe()).getProjekte().getProjektnummer()));
298             untergruppierungsnamen.add(new Ergebnissdaten_Untergruppierungsnamen(new Integer(0), null, ""));
299             untergruppierungsnamen.addAll(dieugn.sucheProjektnummer((user.getProjektgruppe()).getProjekte().getProjektnummer()));
300 
301             if (log.isDebugEnabled()) 
302             {
303                 log.debug(" Found " + projekte.size() + " Projects");
304                 log.debug(" Found " + reportnamen.size() + " Reportnames");
305                 log.debug(" Found " + feldnamen.size() + " Fieldnames");
306                 log.debug(" Found " + gruppierungsnamen.size() + " Groupnames");
307                 log.debug(" Found " + untergruppierungsnamen.size() + " Sub-Groupnames");
308             }
309         }
310 
311         if (projekte != null) 
312         {
313             session.setAttribute(Keys.PROJEKTE_KEY, projekte);
314         }
315 
316         if (reportnamen != null) 
317         {
318             session.setAttribute(Keys.REPORTNAMEN_KEY, reportnamen);
319         }
320 
321         if (reportnamen != null) 
322         {
323             session.setAttribute(Keys.ERGEBNISSDATENFELDNAMEN_KEY, feldnamen);
324         }
325 
326         if (reportnamen != null) 
327         {
328             session.setAttribute(Keys.ERGEBNISSDATENGRUPPIERUNGSNAMEN_KEY, gruppierungsnamen);
329         }
330 
331         if (reportnamen != null) 
332         {
333             session.setAttribute(Keys.ERGEBNISSDATENUNTERGRUPPIERUNGSNAMEN_KEY, untergruppierungsnamen);
334         }
335     
336         Collection sprachen = dis.sucheAlle();
337         if (sprachen != null) 
338         {
339             session.setAttribute(Keys.SPRACHEN_KEY, sprachen);
340         }
341     
342     	// Populate the Project Form
343     	if (form == null) 
344     	{
345             if (log.isDebugEnabled()) 
346             {
347                 log.debug(" Creating new ReporterzeugungForm bean under key " + mapping.getAttribute());
348             }
349             
350 	        form = new ReporterzeugungForm();
351 	        
352             if ("request".equals(mapping.getScope())) 
353             {
354                 request.setAttribute(mapping.getAttribute(), form);
355             } 
356             else 
357             {
358                 session.setAttribute(mapping.getAttribute(), form);
359             }
360     	}
361 
362         ReporterzeugungForm reform = (ReporterzeugungForm) form;
363         reform.setAction(action);
364 	    
365         if (!action.equals("Create")) 
366         {
367             if (log.isDebugEnabled()) 
368             {
369                 log.debug(" Populating form from " + reporterzeugung);
370             }
371             
372             try 
373             {
374                 PropertyUtils.copyProperties(reform, reporterzeugung);
375                 reform.setProjektnummer(reporterzeugung.getReportnamen().getProjekte().getProjektnummer());
376                 reform.setReportnummer(reporterzeugung.getReportnamen().getReportnummer());
377                 reform.setSprachnummer(reporterzeugung.getSprachen().getSprachnummer());
378                 reform.setAction(action);
379             } 
380             catch (InvocationTargetException e) 
381             {
382                 Throwable t = e.getTargetException();
383                 if (t == null)
384                     t = e;
385                 log.error("ReporterzeugungForm.populate", t);
386                 throw new ServletException("ReporterzeugungForm.populate", t);
387             } 
388             catch (Throwable t) 
389             {
390                 log.error("ReporterzeugungForm.populate", t);
391                 throw new ServletException("ReporterzeugungForm.populate", t);
392             }
393         }
394 
395         // Forward control to the edit Projekt page
396         if (log.isDebugEnabled()) 
397         {
398             log.debug(" Forwarding to 'success' page");
399         }
400     	return (mapping.findForward("success"));
401     }
402 }