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