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.Collection;
22  import java.util.Iterator;
23  import java.util.LinkedList;
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.DataInterfaceProjekte;
40  
41  import org.fhw.cabaweb.ojb.dataobjects.Gruppenmitglieder;
42  import org.fhw.cabaweb.webfrontend.configs.Keys;
43  import org.fhw.cabaweb.webfrontend.forms.multiple.ProjekteForm;
44  import org.fhw.cabaweb.webfrontend.tools.Common;
45  
46  /***
47   * <strong>Action</strong>-Klasse f&uuml;r die List Projekte Action .
48   * Die Controller Klasse der Struts Model View Controller Architektur.
49   *
50   * @author  <a href="mailto:thomas.vogt@tvc-software.com">Thomas Vogt</a>
51   * @version Version 1.0 03.06.2004
52   */
53  public final class ListProjekteAction extends Action {
54  
55      /***
56       * The <code>Log</code> instance for this application.
57       */
58  
59      private Log log = LogFactory.getLog("org.fhw.cabaweb.webfrontend.actions.list");
60  //    private static Log log = LogFactory.getLog(this.class);
61  
62      /***
63       * Verarbeiten der spezifizierten HTTP Anfrage und erzeugen der zugeordneten
64       * HTTP Antwort bzw. Forwarden an eine andere Web Komponente, die die Antwort 
65       * erzeugt.  
66       * 
67       * Gibt eine <code>ActionForward</code> Instanz zurück die angibt wohin und wie
68       * die Kontrolle weitergegeben werden soll. Kann auch <code>null</code> sein, 
69       * wenn die Anfrage bereits bearbeitet wurde.
70       * 
71       * @param mapping Das ActionMapping das benutzt wurde um diese Instanz zu selektieren
72       * @param form Das optionale ActionForm Bean für die Anfrage (soweit vorhanden)
73       * @param request Die HTTP Anfrage die wir gerade bearbeiten
74       * @param response The HTTP Antwort die wir erzeugen
75       *
76       * @return Die Action zu der wir weiterleiten
77       * @exception Exception wenn ein Eingabe-/Ausgabe Fehler auftritt oder eine Servlet Exception auftritt
78       *            bzw. die Business Logik einen Fehler verursacht 
79       */
80      public ActionForward execute(ActionMapping mapping,
81  				                 ActionForm form,
82                                   HttpServletRequest request,
83                                   HttpServletResponse response)
84      throws Exception {
85          /*** Forwarding Action Variable mit null initialisieren */
86  //        ActionForward forward = null;
87          /*** Die Locale Variable (Sprache, Formatierung, etc.) */
88  //        Locale locale = getLocale(request);
89          /*** Die Resourcen (lokalisierten Meldungen) der Anfrage holen */
90  //        MessageResources messages = getResources(request);
91          /*** Wenn Fehler bei der Validierung Fehler auftreten werden Sie diesem
92           *  <code>ActionErrors</code> Objekt hinzugefügt. 
93           */ 
94  //        ActionErrors errors = new ActionErrors();
95  
96          /*** Data Interface (indirekter Zugriff auf die OJB Ebene) initialisieren */
97          DataInterfaceProjekte dip = new DataInterfaceProjekte();
98          dip.clearCache();
99          /*** Data Interface für Benutzer (indirekter Zugriff auf die OJB Ebene) initialisieren */
100         DataInterfaceGruppenmitglieder dig = new DataInterfaceGruppenmitglieder();
101         dig.clearCache();
102         /*** Die Session der aktuellen Anfrage */
103         HttpSession session = request.getSession();
104         /*** Die übergebene Action */
105         String action = request.getParameter("action");
106 
107         /*** Zwischenspeichvaribale für den Status des Benutzers (Administrator ???) */
108         boolean isAdmin = request.isUserInRole("Administrator");
109         /*** Zwischenspeichvaribale für den Status des Benutzers (Projektleiter ???) */
110         boolean isProjectleader = false;
111         /*** Zwischenspeichvaribale für den Status des Benutzers (Benutzer ???) */
112         boolean isUser = false;
113         /*** Zwischenspeichvaribale für den Namen des Benutzers */
114         String username = request.getRemoteUser();
115 
116         if(!isAdmin)
117         {
118             isProjectleader = request.isUserInRole("Projektleiter");
119         }
120         if(!isAdmin && !isProjectleader)
121         {
122             isUser = request.isUserInRole("Benutzer");
123         }
124         
125     	if (action == null) 
126     	{
127     	    action = "List";
128         }
129 
130         if (log.isDebugEnabled()) 
131         {
132             log.debug("ListProjekteAction: Processing " + action + " action");
133         }
134 
135         /*** Dieser Collection werden alle gefundenen Projekte zugewiesen. */ 
136         Collection projekte = null;
137         if(isAdmin)
138         {
139             if (log.isDebugEnabled()) 
140             {
141                 log.debug(" User has Role: Administrator");
142                 log.debug(" Searching all Projects");
143             }
144 
145             projekte = dip.sucheAlle();
146 
147             if (log.isDebugEnabled()) 
148             {
149                 log.debug(" Found " + projekte.size() + " Projects");
150             }
151         }
152         else if(isProjectleader)
153         {
154             if (log.isDebugEnabled()) 
155             {
156                 log.debug(" User has Role: Projectleader");
157                 log.debug(" Searching Project of Projectleader");
158             }
159             
160             Collection usernames = dig.sucheLogInName(username);
161             Iterator iter = usernames.iterator();
162             Gruppenmitglieder user = null;
163             
164             while (iter.hasNext())
165             {
166                 user = (Gruppenmitglieder) iter.next();
167             }         
168 
169             if (log.isDebugEnabled()) 
170             {
171                 log.debug(" Projektnummer " + ((user.getProjektgruppe()).getProjekte()).getProjektnummer());
172             }
173 
174             projekte = new LinkedList();
175             projekte.add(dip.sucheProjektnummer(((user.getProjektgruppe()).getProjekte()).getProjektnummer()));
176             
177             if (log.isDebugEnabled()) 
178             {
179                 log.debug(" Found " + projekte.size() + " Projects");
180             }
181         }
182         else if(isUser)
183         {
184             if (log.isDebugEnabled()) 
185             {
186                 log.debug(" User has Role: User");
187                 log.debug(" Do not Search");
188             }
189         }
190 
191     	if (projekte == null) 
192     	{
193             if (log.isDebugEnabled()) 
194             {
195                 log.debug(" No Projects registered");
196             }
197             
198     	    return (mapping.findForward("success"));
199     	}
200     	
201         if (projekte != null) 
202         {
203             session.setAttribute(Keys.PROJEKTE_KEY, projekte);
204         }
205     
206     	// Populate the Project Form
207     	if (form == null) 
208     	{
209             if (log.isDebugEnabled()) 
210             {
211                 log.debug(" Creating new ProjekteForm bean under key " + mapping.getAttribute());
212             }
213             
214 	        form = new ProjekteForm();
215 	        
216             if ("request".equals(mapping.getScope())) 
217             {
218                 request.setAttribute(mapping.getAttribute(), form);
219             } 
220             else 
221             {
222                 session.setAttribute(mapping.getAttribute(), form);
223             }
224     	}
225 
226 	    ProjekteForm prjeform = (ProjekteForm) form;
227 	    
228         if (action.equals("List")) 
229         {
230             if (log.isDebugEnabled()) 
231             {
232                 log.debug(" Populating form from " + projekte);
233             }
234             
235             try 
236             {
237                 prjeform.setProjekte(projekte);
238             } 
239             catch (Throwable t) 
240             {
241                 log.error("ProjekteForm.populate", t);
242                 throw new ServletException("ProjekteForm.populate", t);
243             }
244         }
245 
246         Common.Pager(request, projekte.size());
247 
248 	    // Forward control to the list Projekt page
249         if (log.isDebugEnabled()) 
250         {
251             log.debug(" Forwarding to 'success' page");
252         }
253     	return (mapping.findForward("success"));
254     }
255 }