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.DataInterfaceProjektgruppen;
42  import org.fhw.cabaweb.data.DataInterfaceProjekte;
43  
44  import org.fhw.cabaweb.ojb.dataobjects.Gruppenmitglieder;
45  import org.fhw.cabaweb.ojb.dataobjects.Projektgruppen;
46  
47  import org.fhw.cabaweb.webfrontend.configs.Keys;
48  import org.fhw.cabaweb.webfrontend.forms.simple.ProjektgruppeForm;
49  
50  /***
51   * <strong>Action</strong>-Klasse f&uuml;r die Edit Projektbeschreibung 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 EditProjektgruppeAction 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         DataInterfaceProjektgruppen dipg = new DataInterfaceProjektgruppen();
101         /*** Data Interface (indirekter Zugriff auf die OJB Ebene) initialisieren */
102         DataInterfaceGruppenmitglieder digm = new DataInterfaceGruppenmitglieder();
103         /*** Data Interface (indirekter Zugriff auf die OJB Ebene) initialisieren */
104         DataInterfaceProjekte dip = new DataInterfaceProjekte();
105         /*** Die Session der aktuellen Anfrage */
106         HttpSession session = request.getSession();
107         /*** Die übergebene Action */
108         String action = request.getParameter("action");
109 
110         /*** Zwischenspeichvaribale für den Status des Benutzers (Administrator ???) */
111         boolean isAdmin = request.isUserInRole("Administrator");
112         /*** Zwischenspeichvaribale für den Status des Benutzers (Projektleiter ???) */
113         boolean isProjectleader = false;
114         /*** Zwischenspeichvaribale für den Status des Benutzers (Benutzer ???) */
115         boolean isUser = false;
116         /*** Zwischenspeichvaribale für den Namen des Benutzers */
117         String username = request.getRemoteUser();
118 
119         if(!isAdmin)
120         {
121             isProjectleader = request.isUserInRole("Projektleiter");
122         }
123         if(!isAdmin && !isProjectleader)
124         {
125             isUser = request.isUserInRole("Benutzer");
126         }
127 
128     	if (action == null) 
129     	{
130     	    action = "Create";
131         }
132 
133         /*** Zwischenspeichvaribale für die Gruppennummer (Integer) */
134         Integer gruppennummer = null;
135         /*** Zwischenspeichvaribale für die Gruppennummer (Request String) */
136         String grpnummer = request.getParameter("gruppennummer");
137             
138         if(grpnummer != null)
139         {
140             gruppennummer = new Integer(grpnummer);
141         }
142             
143         if (log.isDebugEnabled()) 
144         {
145             log.debug("EditProjektgruppeAction: Processing " + action + " action for Project Group [" + gruppennummer + "]");
146         }
147         
148         Projektgruppen projektgruppe = (Projektgruppen) dipg.sucheGruppennummer(gruppennummer);
149          
150     	if ((projektgruppe == null) && !action.equals("Create")) 
151     	{
152             if (log.isDebugEnabled()) 
153             {
154                 log.debug(" No Project Group for gruppennummer " + gruppennummer);
155             }
156             
157     	    return (mapping.findForward("failure"));
158     	}
159     	
160         if (projektgruppe != null) 
161         {
162             session.setAttribute(Keys.PROJEKTGRUPPE_KEY, projektgruppe);
163         }
164     
165         Collection projekte = null;
166         
167         if(isAdmin)
168         {
169 
170             if (log.isDebugEnabled()) 
171             {
172                 log.debug(" User has Role: Administrator");
173                 log.debug(" Searching all Projects");
174             }
175 
176             projekte = dip.sucheAlle();
177 
178             if (log.isDebugEnabled()) 
179             {
180                 log.debug(" Found " + projekte.size() + " Projects");
181             }
182         }
183         else if(isProjectleader)
184         {
185             if (log.isDebugEnabled()) 
186             {
187                 log.debug(" User is NOT Administrator");
188                 log.debug(" Searching own Project");
189             }
190             
191             Collection usernames = digm.sucheLogInName(username);
192             Iterator iter = usernames.iterator();
193             Gruppenmitglieder user = null;
194             
195             if(iter.hasNext())
196             {
197                 user = (Gruppenmitglieder) iter.next();
198             }         
199 
200             if (log.isDebugEnabled()) 
201             {
202                 log.debug(" Projektnummer " + ((user.getProjektgruppe()).getProjekte()).getProjektnummer());
203             }
204 
205             ArrayList projektAL = new ArrayList();
206             projektAL.add((user.getProjektgruppe()).getProjekte());
207             projekte = projektAL;
208            
209             if (log.isDebugEnabled()) 
210             {
211                 log.debug(" Found " + projekte.size() + " Projects");
212             }
213         }
214 
215         if (projekte != null) 
216         {
217             session.setAttribute(Keys.PROJEKTE_KEY, projekte);
218         }
219     
220     	// Populate the Project Form
221     	if (form == null) 
222     	{
223             if (log.isDebugEnabled()) 
224             {
225                 log.debug(" Creating new ProjektgruppeForm bean under key " + mapping.getAttribute());
226             }
227             
228 	        form = new ProjektgruppeForm();
229 	        
230             if ("request".equals(mapping.getScope())) 
231             {
232                 request.setAttribute(mapping.getAttribute(), form);
233             } 
234             else 
235             {
236                 session.setAttribute(mapping.getAttribute(), form);
237             }
238     	}
239 
240         ProjektgruppeForm prjgform = (ProjektgruppeForm) form;
241         prjgform.setAction(action);
242 	    
243         if (!action.equals("Create")) 
244         {
245             if (log.isDebugEnabled()) 
246             {
247                 log.debug(" Populating form from " + projektgruppe);
248             }
249             
250             try 
251             {
252                 PropertyUtils.copyProperties(prjgform, projektgruppe);
253                 prjgform.setGruppennummer(gruppennummer);
254                 prjgform.setProjektnummer(projektgruppe.getProjekte().getProjektnummer());
255                 prjgform.setAction(action);
256             } 
257             catch (InvocationTargetException e) 
258             {
259                 Throwable t = e.getTargetException();
260                 if (t == null)
261                     t = e;
262                 log.error("ProjektgruppeForm.populate", t);
263                 throw new ServletException("ProjektgruppeForm.populate", t);
264             } 
265             catch (Throwable t) 
266             {
267                 log.error("ProjektgruppeForm.populate", t);
268                 throw new ServletException("ProjektgruppeForm.populate", t);
269             }
270         }
271 
272         // Forward control to the edit Projekt page
273         if (log.isDebugEnabled()) 
274         {
275             log.debug(" Forwarding to 'success' page");
276         }
277     	return (mapping.findForward("success"));
278     }
279 }