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.list;
20  
21  import java.util.ArrayList;
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.commons.logging.Log;
36  import org.apache.commons.logging.LogFactory;
37  
38  import org.fhw.cabaweb.data.DataInterfaceGruppenmitglieder;
39  import org.fhw.cabaweb.data.DataInterfaceProjektgruppen;
40  import org.fhw.cabaweb.data.DataInterfaceReportnamen;
41  import org.fhw.cabaweb.data.DataInterfaceSprachen;
42  import org.fhw.cabaweb.data.constants.Constants;
43  
44  import org.fhw.cabaweb.ojb.dataobjects.Gruppenmitglieder;
45  import org.fhw.cabaweb.ojb.dataobjects.Projektgruppen;
46  import org.fhw.cabaweb.ojb.dataobjects.Reportnamen;
47  import org.fhw.cabaweb.ojb.dataobjects.Sprachen;
48  import org.fhw.cabaweb.webfrontend.configs.Keys;
49  import org.fhw.cabaweb.webfrontend.forms.multiple.ProjektgruppenForm;
50  import org.fhw.cabaweb.webfrontend.tools.Common;
51  
52  /***
53   * <strong>Action</strong>-Klasse f&uuml;r die Liste downloadbaren Resultate Action .
54   * Die Controller Klasse der Struts Model View Controller Architektur.
55   *
56   * @author  <a href="mailto:thomas.vogt@tvc-software.com">Thomas Vogt</a>
57   * @version Version 1.0 11.09.2004
58   */
59  public final class ListResultatDownloadsAction extends Action {
60  
61      /***
62       * The <code>Log</code> instance for this application.
63       */
64      private Log log = LogFactory.getLog("org.fhw.cabaweb.webfrontend.actions.list");
65  //    private static Log log = LogFactory.getLog(this.class);
66  
67      /***
68       * Verarbeiten der spezifizierten HTTP Anfrage und erzeugen der zugeordneten
69       * HTTP Antwort bzw. Forwarden an eine andere Web Komponente, die die Antwort 
70       * erzeugt.  
71       * 
72       * Gibt eine <code>ActionForward</code> Instanz zurück die angibt wohin und wie
73       * die Kontrolle weitergegeben werden soll. Kann auch <code>null</code> sein, 
74       * wenn die Anfrage bereits bearbeitet wurde.
75       * 
76       * @param mapping Das ActionMapping das benutzt wurde um diese Instanz zu selektieren
77       * @param form Das optionale ActionForm Bean für die Anfrage (soweit vorhanden)
78       * @param request Die HTTP Anfrage die wir gerade bearbeiten
79       * @param response The HTTP Antwort die wir erzeugen
80       *
81       * @return Die Action zu der wir weiterleiten
82       * @exception Exception wenn ein Eingabe-/Ausgabe Fehler auftritt oder eine Servlet Exception auftritt
83       *            bzw. die Business Logik einen Fehler verursacht 
84       */
85      public ActionForward execute(ActionMapping mapping,
86  				                 ActionForm form,
87                                   HttpServletRequest request,
88                                   HttpServletResponse response)
89      throws Exception {
90          /*** Forwarding Action Variable mit null initialisieren */
91  //        ActionForward forward = null;
92          /*** Die Locale Variable (Sprache, Formatierung, etc.) */
93  //        Locale locale = getLocale(request);
94          /*** Die Resourcen (lokalisierten Meldungen) der Anfrage holen */
95  //        MessageResources messages = getResources(request);
96          /*** Wenn Fehler bei der Validierung Fehler auftreten werden Sie diesem
97           *  <code>ActionErrors</code> Objekt hinzugefügt. 
98           */ 
99  //        ActionErrors errors = new ActionErrors();
100 
101         /*** Data Interface (indirekter Zugriff auf die OJB Ebene) initialisieren */
102         DataInterfaceProjektgruppen dipg = (DataInterfaceProjektgruppen) new DataInterfaceProjektgruppen();
103         dipg.clearCache();
104         /*** Data Interface für Benutzer (indirekter Zugriff auf die OJB Ebene) initialisieren */
105         DataInterfaceGruppenmitglieder dig = new DataInterfaceGruppenmitglieder();
106         dig.clearCache();
107         /*** Data Interface für Reportnamen (indirekter Zugriff auf die OJB Ebene) initialisieren */
108         DataInterfaceReportnamen dirn = new DataInterfaceReportnamen();
109         dirn.clearCache();
110         /*** Data Interface für Sprachen (indirekter Zugriff auf die OJB Ebene) initialisieren */
111         DataInterfaceSprachen dis = new DataInterfaceSprachen();
112         dis.clearCache();
113         /*** Die Session der aktuellen Anfrage */
114         HttpSession session = request.getSession();
115         /*** Die übergebene Action */
116         String action = request.getParameter("action");
117 
118         /*** Zwischenspeichvaribale für den Status des Benutzers (Administrator ???) */
119         boolean isAdmin = request.isUserInRole("Administrator");
120         /*** Zwischenspeichvaribale für den Status des Benutzers (Projektleiter ???) */
121         boolean isProjectleader = false;
122         /*** Zwischenspeichvaribale für den Status des Benutzers (Benutzer ???) */
123         boolean isUser = false;
124         /*** Zwischenspeichvaribale für den Namen des Benutzers */
125         String username = request.getRemoteUser();
126 
127         if(!isAdmin)
128         {
129             isProjectleader = request.isUserInRole("Projektleiter");
130         }
131         if(!isAdmin && !isProjectleader)
132         {
133             isUser = request.isUserInRole("Benutzer");
134         }
135         
136     	if (action == null) 
137     	{
138     	    action = "List";
139         }
140 
141         if (log.isDebugEnabled()) 
142         {
143             log.debug("ListProjektgruppenAction: Processing " + action + " action");
144         }
145         
146         form = null;
147         session.setAttribute(Keys.PROJEKTGRUPPEN_KEY, null);
148         Iterator iter = null;
149         
150         Collection usernames = dig.sucheLogInName(username);
151         iter = usernames.iterator();
152         Gruppenmitglieder user = null;
153         
154         if (iter.hasNext())
155         {
156             user = (Gruppenmitglieder) iter.next();
157         }         
158 
159         /*** Dieser Collection werden alle gefundenen Reportnamen zugewiesen. */ 
160         Collection reportnamen = dirn.sucheBezeichnung(((user.getProjektgruppe()).getProjekte()).getProjektnummer(), Constants.QUARTALSREPORT_KEY);
161         iter = reportnamen.iterator();
162         Reportnamen reportname = null; 
163         
164         if (iter.hasNext())
165         {
166         	reportname = (Reportnamen) iter.next();
167         }       
168         
169         if (reportname == null) 
170         {
171             if (log.isDebugEnabled()) 
172             {
173                 log.debug(" No Reportname found : " + Constants.QUARTALSREPORT_KEY);
174             }
175         }
176         
177         if (reportname != null) 
178         {
179             session.setAttribute(Keys.REPORTNAME_KEY, reportname);
180         }
181 
182         /*** Dieser Collection werden alle gefundenen Reportnamen zugewiesen. */ 
183         Collection reportnamen2 = dirn.sucheBezeichnung(((user.getProjektgruppe()).getProjekte()).getProjektnummer(), Constants.BEWERTUNGSUEBERBLICK_KEY);
184         iter = reportnamen2.iterator();
185         Reportnamen reportname2 = null; 
186         
187         if (iter.hasNext())
188         {
189         	reportname2 = (Reportnamen) iter.next();
190         }       
191 
192         if (reportname2 == null) 
193         {
194             if (log.isDebugEnabled()) 
195             {
196                 log.debug(" No Reportname found : " + Constants.BEWERTUNGSUEBERBLICK_KEY);
197             }
198         }
199         
200         if (reportname != null) 
201         {
202             session.setAttribute(Keys.REPORTNAME2_KEY, reportname2);
203         }
204         
205         /*** Dieser Collection werden alle gefundenen Projektbeschreibungen zugewiesen. */ 
206         Collection projektgruppen = null;
207         if(isAdmin)
208         {
209             if (log.isDebugEnabled()) 
210             {
211                 log.debug(" User has Role: Administrator");
212                 log.debug(" Searching all Projectgroups");
213             }
214 
215             projektgruppen = dipg.sucheAlle();
216             iter = projektgruppen.iterator();
217             Projektgruppen projektgruppe = null;
218             
219             while (iter.hasNext())
220             {
221                 projektgruppe = (Projektgruppen) iter.next();
222                 
223                 if(projektgruppe.getGruppenname().compareTo("Default") == 0 || projektgruppe.getGruppenname().compareTo("Administratorgruppe") == 0 || projektgruppe.getGruppenname().compareTo("Projektleiter") == 0)
224                 {
225                     iter.remove();
226                 }
227             }         
228 
229             if (log.isDebugEnabled()) 
230             {
231                 log.debug(" Found " + projektgruppen.size() + " Projectgroups");
232             }
233         }
234         else if(isProjectleader)
235         {
236             if (log.isDebugEnabled()) 
237             {
238                 log.debug(" User has Role: Projectleader");
239                 log.debug(" Searching Projectgroups for Projectleader");
240             }
241             
242             if (log.isDebugEnabled()) 
243             {
244                 log.debug(" Projektnummer " + ((user.getProjektgruppe()).getProjekte()).getProjektnummer());
245             }
246 
247             projektgruppen = dipg.sucheProjektnummer(((user.getProjektgruppe()).getProjekte()).getProjektnummer());
248             iter = projektgruppen.iterator();
249             Projektgruppen projektgruppe = null;
250             
251             while (iter.hasNext())
252             {
253                 projektgruppe = (Projektgruppen) iter.next();
254                 
255                 if(projektgruppe.getGruppenname().compareTo("Default") == 0 || projektgruppe.getGruppenname().compareTo("Administratorgruppe") == 0 || projektgruppe.getGruppenname().compareTo("Projektleiter") == 0)
256                 {
257                     iter.remove();
258                 }
259             }         
260             
261             if (log.isDebugEnabled()) 
262             {
263                 log.debug(" Found " + projektgruppen.size() + " Projectgroups");
264             }
265         }
266         else if(isUser)
267         {
268             if (log.isDebugEnabled()) 
269             {
270                 log.debug(" User has Role: User");
271                 log.debug(" Do not Search");
272             }
273 
274             if (log.isDebugEnabled()) 
275             {
276                 log.debug(" Projektnummer " + ((user.getProjektgruppe()).getProjekte()).getProjektnummer());
277             }
278 
279             ArrayList projektgruppenAL = new ArrayList();
280             projektgruppenAL.add(user.getProjektgruppe());
281             projektgruppen = projektgruppenAL;
282 
283             iter = projektgruppen.iterator();
284             Projektgruppen projektgruppe = null;
285             
286             while (iter.hasNext())
287             {
288                 projektgruppe = (Projektgruppen) iter.next();
289                 
290                 if(projektgruppe.getGruppenname().compareTo("Default") == 0 || projektgruppe.getGruppenname().compareTo("Administratorgruppe") == 0 || projektgruppe.getGruppenname().compareTo("Projektleiter") == 0)
291                 {
292                     iter.remove();
293                 }
294             }         
295             
296             if (log.isDebugEnabled()) 
297             {
298                 log.debug(" Found " + projektgruppen.size() + " Projectgroup");
299             }
300         }
301 
302     	if (projektgruppen == null) 
303     	{
304             if (log.isDebugEnabled()) 
305             {
306                 log.debug(" No Projectgroups registered");
307             }
308             
309     	    return (mapping.findForward("success"));
310     	}
311         
312         if (projektgruppen != null) 
313         {
314             session.setAttribute(Keys.PROJEKTGRUPPEN_KEY, projektgruppen);
315         }
316 
317         Collection sprachen = dis.sucheSprachname(Constants.DEUTSCH_KEY);
318         iter = sprachen.iterator();
319         Sprachen sprache = null; 
320         
321         if (iter.hasNext())
322         {
323         	sprache = (Sprachen) iter.next();
324         }       
325 
326     	if (sprache == null) 
327     	{
328             if (log.isDebugEnabled()) 
329             {
330                 log.debug(" No Language found: " + Constants.DEUTSCH_KEY);
331             }
332     	}
333     	
334         if (sprache != null) 
335         {
336             session.setAttribute(Keys.SPRACHE_KEY, sprache);
337         }
338         
339     	// Populate the Projektbeschreibungen Form
340     	if (form == null) 
341     	{
342             if (log.isDebugEnabled()) 
343             {
344                 log.debug(" Creating new ProjektgruppenForm bean under key " + mapping.getAttribute());
345             }
346             
347 	        form = new ProjektgruppenForm();
348 	        
349             if ("request".equals(mapping.getScope())) 
350             {
351                 request.setAttribute(mapping.getAttribute(), form);
352             } 
353             else 
354             {
355                 session.setAttribute(mapping.getAttribute(), form);
356             }
357     	}
358 
359         ProjektgruppenForm pgpform = (ProjektgruppenForm) form;
360 	    
361         if (action.equals("List")) 
362         {
363             if (log.isDebugEnabled()) 
364             {
365                 log.debug(" Populating form from " + projektgruppen);
366             }
367             
368             try 
369             {
370                 pgpform.setProjektgruppen(projektgruppen);
371             } 
372             catch (Throwable t) 
373             {
374                 log.error("ProjektgruppenForm.populate", t);
375                 throw new ServletException("ProjektgruppenForm.populate", t);
376             }
377         }
378 
379         Common.Pager(request, projektgruppen.size());
380 
381 	    // Forward control to the list Projekt page
382         if (log.isDebugEnabled()) 
383         {
384             log.debug(" Forwarding to 'success' page");
385         }
386     	return (mapping.findForward("success"));
387     }
388 }