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.DataInterfaceReportnamen;
42  import org.fhw.cabaweb.data.DataInterfaceProjekte;
43  
44  import org.fhw.cabaweb.ojb.dataobjects.Gruppenmitglieder;
45  import org.fhw.cabaweb.ojb.dataobjects.Reportnamen;
46  
47  import org.fhw.cabaweb.webfrontend.configs.Keys;
48  import org.fhw.cabaweb.webfrontend.forms.simple.ReportnameForm;
49  
50  /***
51   * <strong>Action</strong>-Klasse f&uuml;r die Edit Reportname 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 12.07.2004
56   */
57  public final class EditReportnameAction 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         DataInterfaceReportnamen dirn = new DataInterfaceReportnamen();
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 Reportnummer (Integer) */
134         Integer reportnummer = null;
135         /*** Zwischenspeichvaribale für die Reportnummer (Request String) */
136         String rptnummer = request.getParameter("reportnummer");
137             
138         if(rptnummer != null)
139         {
140             reportnummer = new Integer(rptnummer);
141         }
142             
143         if (log.isDebugEnabled()) 
144         {
145             log.debug("EditReportnameAction: Processing " + action + " action for Reportname [" + reportnummer + "]");
146         }
147         
148         Reportnamen reportname = (Reportnamen) dirn.sucheReportnummer(reportnummer);
149          
150         if ((reportname == null) && !action.equals("Create")) 
151         {
152             if (log.isDebugEnabled()) 
153             {
154                 log.debug(" No Reportname for reportnummer " + reportnummer);
155             }
156             
157             return (mapping.findForward("failure"));
158         }
159         
160         if (reportname != null) 
161         {
162             session.setAttribute(Keys.REPORTNAME_KEY, reportname);
163         }
164 
165         Collection projekte = null;        
166     
167         if(isAdmin)
168         {
169             if (log.isDebugEnabled()) 
170             {
171                 log.debug(" User has Role: Administrator");
172                 log.debug(" Searching all Projects");
173             }
174 
175             projekte = dip.sucheAlle();
176 
177             if (log.isDebugEnabled()) 
178             {
179                 log.debug(" Found " + projekte.size() + " Projects");
180             }
181         }
182         else if(isProjectleader)
183         {
184             if (log.isDebugEnabled()) 
185             {
186                 log.debug(" User is NOT Administrator");
187                 log.debug(" Searching own Project");
188             }
189             
190             Collection usernames = digm.sucheLogInName(username);
191             Iterator iter = usernames.iterator();
192             Gruppenmitglieder user = null;
193             
194             if(iter.hasNext())
195             {
196                 user = (Gruppenmitglieder) iter.next();
197             }         
198 
199             if (log.isDebugEnabled()) 
200             {
201                 log.debug(" Projektnummer " + ((user.getProjektgruppe()).getProjekte()).getProjektnummer());
202             }
203 
204             ArrayList projekteAL = new ArrayList();
205             projekteAL.add((user.getProjektgruppe()).getProjekte());
206             projekte = projekteAL;
207             
208             if (log.isDebugEnabled()) 
209             {
210                 log.debug(" Found " + projekte.size() + " Projects");
211             }
212         }
213 
214         if (projekte != null) 
215         {
216             session.setAttribute(Keys.PROJEKTE_KEY, projekte);
217         }
218     
219     	// Populate the Project Form
220     	if (form == null) 
221     	{
222             if (log.isDebugEnabled()) 
223             {
224                 log.debug(" Creating new ReportnameForm bean under key " + mapping.getAttribute());
225             }
226             
227 	        form = new ReportnameForm();
228 	        
229             if ("request".equals(mapping.getScope())) 
230             {
231                 request.setAttribute(mapping.getAttribute(), form);
232             } 
233             else 
234             {
235                 session.setAttribute(mapping.getAttribute(), form);
236             }
237     	}
238 
239         ReportnameForm rnform = (ReportnameForm) form;
240         rnform.setAction(action);
241 	    
242         if (!action.equals("Create")) 
243         {
244             if (log.isDebugEnabled()) 
245             {
246                 log.debug(" Populating form from " + reportname);
247             }
248             
249             try 
250             {
251                 PropertyUtils.copyProperties(rnform, reportname);
252                 rnform.setProjektnummer(reportname.getProjekte().getProjektnummer());
253                 rnform.setReportnummer(reportname.getReportnummer());
254                 rnform.setAction(action);
255             } 
256             catch (InvocationTargetException e) 
257             {
258                 Throwable t = e.getTargetException();
259                 if (t == null)
260                     t = e;
261                 log.error("ReportnameForm.populate", t);
262                 throw new ServletException("ReportnameForm.populate", t);
263             } 
264             catch (Throwable t) 
265             {
266                 log.error("ReportnameForm.populate", t);
267                 throw new ServletException("ReportnameForm.populate", t);
268             }
269         }
270 
271         // Forward control to the edit Projekt page
272         if (log.isDebugEnabled()) 
273         {
274             log.debug(" Forwarding to 'success' page");
275         }
276     	return (mapping.findForward("success"));
277     }
278 }