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.DataInterfaceVoreinstellungen;
43  import org.fhw.cabaweb.data.DataInterfaceVoreinstellungenFeldnamen;
44  import org.fhw.cabaweb.data.dataobjects.Voreinstellung;
45  
46  import org.fhw.cabaweb.ojb.dataobjects.Gruppenmitglieder;
47  import org.fhw.cabaweb.webfrontend.configs.Keys;
48  import org.fhw.cabaweb.webfrontend.forms.simple.VoreinstellungForm;
49  
50  /***
51   * <strong>Action</strong>-Klasse f&uuml;r die Edit Voreinstellung 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 24.07.2004
56   */
57  public final class EditVoreinstellungAction 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         DataInterfaceVoreinstellungen div = new DataInterfaceVoreinstellungen();
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         DataInterfaceVoreinstellungenFeldnamen divfn = new DataInterfaceVoreinstellungenFeldnamen();
105         /*** Data Interface (indirekter Zugriff auf die OJB Ebene) initialisieren */
106         DataInterfaceProjekte dip = new DataInterfaceProjekte();
107         /*** Die Session der aktuellen Anfrage */
108         HttpSession session = request.getSession();
109         /*** Die übergebene Action */
110         String action = request.getParameter("action");
111 
112         /*** Zwischenspeichvaribale für den Status des Benutzers (Administrator ???) */
113         boolean isAdmin = request.isUserInRole("Administrator");
114         /*** Zwischenspeichvaribale für den Status des Benutzers (Projektleiter ???) */
115         boolean isProjectleader = false;
116         /*** Zwischenspeichvaribale für den Status des Benutzers (Benutzer ???) */
117         boolean isUser = false;
118         /*** Zwischenspeichvaribale für den Namen des Benutzers */
119         String username = request.getRemoteUser();
120 
121         if(!isAdmin)
122         {
123             isProjectleader = request.isUserInRole("Projektleiter");
124         }
125         if(!isAdmin && !isProjectleader)
126         {
127             isUser = request.isUserInRole("Benutzer");
128         }
129 
130     	if (action == null) 
131     	{
132     	    action = "Create";
133         }
134 
135         /*** Zwischenspeichvaribale für die Feldnummer (Integer) */
136         Integer feldnummer = null;
137         /*** Zwischenspeichvaribale für die Feldnummer (Request String) */
138         String fnummer = request.getParameter("feldnummer");
139 
140         /*** Zwischenspeichvaribale für die Projektnummer (Integer) */
141         Integer projektnummer = null;
142         /*** Zwischenspeichvaribale für die Projektnummer (Request String) */
143         String pnummer = request.getParameter("projektnummer");
144             
145         if(pnummer != null)
146         {
147             projektnummer = new Integer(pnummer);
148         }
149         if(fnummer != null)
150         {
151             feldnummer = new Integer(fnummer);
152         }
153             
154         if (log.isDebugEnabled()) 
155         {
156             log.debug("EditVoreinstellungAction: Processing " + action + " action for Preset [" + projektnummer + ", " + feldnummer + "]");
157         }
158         
159         Voreinstellung voreinstellung = (Voreinstellung) div.sucheKombination_Feld(projektnummer, feldnummer);
160          
161     	if ((voreinstellung == null) && !action.equals("Create")) 
162     	{
163             if (log.isDebugEnabled()) 
164             {
165                 log.debug(" No Preset for feldnummer " + feldnummer);
166             }
167             
168     	    return (mapping.findForward("failure"));
169     	}
170     	
171         if (voreinstellung != null) 
172         {
173             session.setAttribute(Keys.VOREINSTELLUNG_KEY, voreinstellung);
174         }
175     
176     
177         Collection projekte = null;
178         
179         if(isAdmin)
180         {
181             if (log.isDebugEnabled()) 
182             {
183                 log.debug(" User has Role: Administrator");
184                 log.debug(" Searching all Projects");
185             }
186 
187             projekte = dip.sucheAlle();
188 
189             if (log.isDebugEnabled()) 
190             {
191                 log.debug(" Found " + projekte.size() + " Projects");
192             }
193         }
194         else if(isProjectleader)
195         {
196             if (log.isDebugEnabled()) 
197             {
198                 log.debug(" User is NOT Administrator");
199                 log.debug(" Searching own Project");
200             }
201             
202             Collection usernames = digm.sucheLogInName(username);
203             Iterator iter = usernames.iterator();
204             Gruppenmitglieder user = null;
205             
206             if(iter.hasNext())
207             {
208                 user = (Gruppenmitglieder) iter.next();
209             }         
210 
211             if (log.isDebugEnabled()) 
212             {
213                 log.debug(" Projektnummer " + ((user.getProjektgruppe()).getProjekte()).getProjektnummer());
214             }
215 
216             ArrayList projekteAL = new ArrayList();
217             projekteAL.add((user.getProjektgruppe()).getProjekte());
218             projekte = projekteAL;
219             
220             if (log.isDebugEnabled()) 
221             {
222                 log.debug(" Found " + projekte.size() + " Projects");
223             }
224         }
225 
226         if (projekte != null) 
227         {
228             session.setAttribute(Keys.PROJEKTE_KEY, projekte);
229         }
230     
231         Collection voreinstellungenFeldnamen = null;
232         
233         if(isAdmin)
234         {
235             if (log.isDebugEnabled()) 
236             {
237                 log.debug(" User has Role: Administrator");
238                 log.debug(" Searching all Fieldnames");
239             }
240 
241             voreinstellungenFeldnamen = divfn.sucheAlle();
242 
243             if (log.isDebugEnabled()) 
244             {
245                 log.debug(" Found " + voreinstellungenFeldnamen.size() + " Fieldnames");
246             }
247         }
248         else if(isProjectleader)
249         {
250             if (log.isDebugEnabled()) 
251             {
252                 log.debug(" User is NOT Administrator");
253                 log.debug(" Searching own Fieldnames");
254             }
255             
256             Collection usernames = digm.sucheLogInName(username);
257             Iterator iter = usernames.iterator();
258             Gruppenmitglieder user = null;
259             
260             if(iter.hasNext())
261             {
262                 user = (Gruppenmitglieder) iter.next();
263             }         
264 
265             if (log.isDebugEnabled()) 
266             {
267                 log.debug(" Projektnummer " + ((user.getProjektgruppe()).getProjekte()).getProjektnummer());
268             }
269 
270             voreinstellungenFeldnamen = divfn.sucheProjektnummer(((user.getProjektgruppe()).getProjekte()).getProjektnummer());
271             
272             if (log.isDebugEnabled()) 
273             {
274                 log.debug(" Found " + voreinstellungenFeldnamen.size() + " Fieldnames");
275             }
276         }
277 
278         if (voreinstellungenFeldnamen != null) 
279         {
280             session.setAttribute(Keys.VOREINSTELLUNGENFELDNAMEN_KEY, voreinstellungenFeldnamen);
281         }
282 
283     	// Populate the Project Form
284     	if (form == null) 
285     	{
286             if (log.isDebugEnabled()) 
287             {
288                 log.debug(" Creating new VoreinstellungForm bean under key " + mapping.getAttribute());
289             }
290             
291 	        form = new VoreinstellungForm();
292 	        
293             if ("request".equals(mapping.getScope())) 
294             {
295                 request.setAttribute(mapping.getAttribute(), form);
296             } 
297             else 
298             {
299                 session.setAttribute(mapping.getAttribute(), form);
300             }
301     	}
302 
303         VoreinstellungForm vform = (VoreinstellungForm) form;
304         vform.setAction(action);
305 	    
306         if (!action.equals("Create")) 
307         {
308             if (log.isDebugEnabled()) 
309             {
310                 log.debug(" Populating form from " + voreinstellung);
311             }
312             
313             try 
314             {
315                 PropertyUtils.copyProperties(vform, voreinstellung);
316                 vform.setWert(voreinstellung.getWertObject().toString());
317                 vform.setWert(voreinstellung.getWertObject().toString());
318                 vform.setAction(action);
319             } 
320             catch (InvocationTargetException e) 
321             {
322                 Throwable t = e.getTargetException();
323                 if (t == null)
324                     t = e;
325                 log.error("VoreinstellungForm.populate", t);
326                 throw new ServletException("VoreinstellungForm.populate", t);
327             } 
328             catch (Throwable t) 
329             {
330                 log.error("VoreinstellungForm.populate", t);
331                 throw new ServletException("VoreinstellungForm.populate", t);
332             }
333         }
334 
335         // Forward control to the edit Projekt page
336         if (log.isDebugEnabled()) 
337         {
338             log.debug(" Forwarding to 'success' page");
339         }
340     	return (mapping.findForward("success"));
341     }
342 }