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