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.save;
20  
21  import java.lang.reflect.InvocationTargetException;
22  import java.util.Collection;
23  import java.util.Iterator;
24  
25  import javax.servlet.ServletException;
26  import javax.servlet.http.HttpServletRequest;
27  import javax.servlet.http.HttpServletResponse;
28  import javax.servlet.http.HttpSession;
29  
30  import org.apache.struts.action.Action;
31  import org.apache.struts.action.ActionForm;
32  import org.apache.struts.action.ActionForward;
33  import org.apache.struts.action.ActionMapping;
34  
35  import org.apache.struts.util.MessageResources;
36  
37  import org.apache.commons.beanutils.PropertyUtils;
38  import org.apache.commons.logging.Log;
39  import org.apache.commons.logging.LogFactory;
40  
41  import org.fhw.cabaweb.data.DataInterfaceGruppenmitglieder;
42  import org.fhw.cabaweb.data.DataInterfaceBerechnungsauftraege;
43  import org.fhw.cabaweb.data.DataInterfaceProjekte;
44  
45  import org.fhw.cabaweb.ojb.dataobjects.Gruppenmitglieder;
46  import org.fhw.cabaweb.ojb.dataobjects.Berechnungsauftraege;
47  import org.fhw.cabaweb.ojb.dataobjects.Projekte;
48  
49  import org.fhw.cabaweb.webfrontend.configs.Keys;
50  import org.fhw.cabaweb.webfrontend.forms.simple.BerechnungsauftragForm;
51  
52  /***
53   * <strong>Action</strong>-Klasse f&uuml;r die Save Berechnungsauftrag Action .
54   * Die Controller Klasse der Struts Model View Controller Architektur.
55   *
56   * @author  <a href="mailto:thomas.vogt@tvc-software.com">Thomas Vogt</a>
57   * @version Version 1.0 10.07.2004
58   */
59  public final class SaveBerechnungsauftragAction extends Action {
60  
61      /***
62       * The <code>Log</code> instance for this application.
63       */
64      private Log log = LogFactory.getLog("org.fhw.cabaweb.webfrontend.actions.save");
65  
66      /***
67       * Verarbeiten der spezifizierten HTTP Anfrage und erzeugen der zugeordneten
68       * HTTP Antwort bzw. Forwarden an eine andere Web Komponente, die die Antwort 
69       * erzeugt.  
70       * 
71       * Gibt eine <code>ActionForward</code> Instanz zurück die angibt wohin und wie
72       * die Kontrolle weitergegeben werden soll. Kann auch <code>null</code> sein, 
73       * wenn die Anfrage bereits bearbeitet wurde.
74       * 
75       * @param mapping Das ActionMapping das benutzt wurde um diese Instanz zu selektieren
76       * @param form Das optionale ActionForm Bean für die Anfrage (soweit vorhanden)
77       * @param request Die HTTP Anfrage die wir gerade bearbeiten
78       * @param response The HTTP Antwort die wir erzeugen
79       *
80       * @return Die Action zu der wir weiterleiten
81       * @exception Exception wenn ein Eingabe-/Ausgabe Fehler auftritt oder eine Servlet Exception auftritt
82       *            bzw. die Business Logik einen Fehler verursacht 
83       */
84      public ActionForward execute(ActionMapping mapping,
85  				                 ActionForm form,
86                                   HttpServletRequest request,
87                                   HttpServletResponse response)
88      throws Exception {
89          /*** Forwarding Action Variable mit null initialisieren */
90  //        ActionForward forward = null;
91          /*** Die Locale Variable (Sprache, Formatierung, etc.) */
92  //        Locale locale = getLocale(request);
93  
94          /*** Data Interface (indirekter Zugriff auf die OJB Ebene) initialisieren */
95          DataInterfaceBerechnungsauftraege diba = new DataInterfaceBerechnungsauftraege();
96          /*** Data Interface (indirekter Zugriff auf die OJB Ebene) initialisieren */
97          DataInterfaceProjekte dip = new DataInterfaceProjekte();
98          /*** Data Interface für Benutzer (indirekter Zugriff auf die OJB Ebene) initialisieren */
99          DataInterfaceGruppenmitglieder dig = new DataInterfaceGruppenmitglieder();
100         /*** Die Resourcen (lokalisierten Meldungen) der Anfrage holen */
101         MessageResources messages = getResources(request);
102         /*** Die Session der aktuellen Anfrage */
103         HttpSession session = request.getSession();
104         /*** Das übergebene Formular */
105         BerechnungsauftragForm beraform = (BerechnungsauftragForm) form;
106         /*** Die übergebene Action */
107         String action = beraform.getAction();
108 
109         /*** Zwischenspeichvaribale für den Rückgabewert */
110         boolean returnvalue = false;
111         /*** Zwischenspeichvaribale für das Berechnungsauftrag */
112         Berechnungsauftraege berechnungsauftrag = null;
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     	if (action == null) 
133     	{
134     	    action = "?";
135         }
136         
137         if (log.isDebugEnabled()) 
138         {
139             log.debug("SaveBerechnungsauftragAction: Processing " + action + " action");
140             if(isAdmin)
141             {
142                 log.debug(" User has Role: Administrator");
143             }
144             else if(isProjectleader)
145             {
146                 log.debug(" User has Role: Projectleader");
147             }
148             else if(isUser)
149             {
150                 log.debug(" User has Role: User");
151             }
152         }
153     
154     	// Was this transaction cancelled?
155     	if (isCancelled(request)) 
156     	{
157             if (log.isDebugEnabled()) 
158             {
159                 log.debug(" Transaction '" + action + "' was cancelled");
160             }
161             
162             session.removeAttribute(Keys.BERECHNUNGSAUFTRAG_KEY);
163     	    return (mapping.findForward("success"));
164     	}
165 
166         berechnungsauftrag = (Berechnungsauftraege) session.getAttribute(Keys.BERECHNUNGSAUFTRAG_KEY);
167 
168         if (berechnungsauftrag == null) 
169         {
170             if (log.isDebugEnabled()) 
171             {
172                 log.debug(" In Session saved Calculation is NULL.");
173             }
174             
175             berechnungsauftrag = new Berechnungsauftraege();
176         }
177 
178         // All required validations were done by the form itself
179         if (log.isDebugEnabled()) 
180         {
181             log.debug(" Populating database from form bean");
182         }
183 
184         try 
185         {
186             PropertyUtils.copyProperties(berechnungsauftrag, beraform);
187             berechnungsauftrag.setProjekte((Projekte) dip.sucheProjektnummer(beraform.getProjektnummer()));
188         } 
189         catch (InvocationTargetException e) 
190         {
191             Throwable t = e.getTargetException();
192             if (t == null)
193                 t = e;
194             log.error("BerechnungsauftragForm.populate", t);
195             throw new ServletException("BerechnungsauftragForm.populate", t);
196         } 
197         catch (Throwable t) 
198         {
199             log.error("BerechnungsauftragForm.populate", t);
200             throw new ServletException("BerechnungsauftragForm.populate", t);
201         }
202 
203         if ("Create".equals(action) && (isAdmin || isProjectleader)) 
204         {
205             if (log.isDebugEnabled()) 
206             {
207                 log.debug("Creating a new Calculation: " + berechnungsauftrag);
208             }
209 
210             returnvalue = diba.erzeugen(berechnungsauftrag);
211             session.removeAttribute(Keys.BERECHNUNGSAUFTRAG_KEY);
212 
213             if (!returnvalue) 
214             {
215                 if (log.isDebugEnabled()) 
216                 {
217                     log.debug(" Calculation creation failed");
218                 }
219 
220                 response.sendError(HttpServletResponse.SC_BAD_REQUEST, messages.getMessage("error.berechnungsauftrag.create"));
221                 return (null);
222             }
223         }
224         
225         if (action.equals("Delete") && (isAdmin || isProjectleader)) 
226         {
227             if (log.isDebugEnabled()) 
228             {
229                 log.debug(" Deleting existing Calculation [ " + berechnungsauftrag.getProjekte().getProjektname() + " ] " + 
230                           berechnungsauftrag.getDatum() + " " + berechnungsauftrag.getUhrzeit());
231             }
232 
233             returnvalue = diba.loeschen(berechnungsauftrag);
234             session.removeAttribute(Keys.BERECHNUNGSAUFTRAG_KEY);
235 
236             if (!returnvalue) 
237             {
238                 if (log.isDebugEnabled()) 
239                 {
240                     log.debug(" Calculation deletion failed");
241                 }
242 
243                 response.sendError(HttpServletResponse.SC_BAD_REQUEST, messages.getMessage("error.berechnungsauftrag.delete"));
244                 return (null);
245             }
246         }
247         
248         if (action.equals("Edit") && (isAdmin || isProjectleader)) 
249         {
250             if (log.isDebugEnabled()) 
251             {
252                 log.debug(" Editing existing Calculation [ " + berechnungsauftrag.getProjekte().getProjektname() + " ] " + 
253                           berechnungsauftrag.getDatum() + " " + berechnungsauftrag.getUhrzeit());
254             }
255 
256             Collection usernames = dig.sucheLogInName(username);
257             Iterator iter = usernames.iterator();
258             Gruppenmitglieder user = null;
259             
260             while (iter.hasNext())
261             {
262                 user = (Gruppenmitglieder) iter.next();
263             }         
264 
265             if(isProjectleader && berechnungsauftrag.getProjekte().getProjektnummer().equals(((user.getProjektgruppe()).getProjekte()).getProjektnummer()) || isAdmin)
266             {
267                 if (log.isDebugEnabled()) 
268                 {
269                     log.debug(" Calculation editing is being processed");
270                 }
271 
272                 returnvalue = diba.editieren(berechnungsauftrag);
273             }
274             else
275             {
276                 if (log.isDebugEnabled()) 
277                 {
278                     log.debug(" User not authorized to edit Calculation");
279                 }
280             }
281             
282             session.removeAttribute(Keys.BERECHNUNGSAUFTRAG_KEY);
283 
284             if (!returnvalue) 
285             {
286                 if (log.isDebugEnabled()) 
287                 {
288                     log.debug(" Calculation editing failed");
289                 }
290 
291                 response.sendError(HttpServletResponse.SC_BAD_REQUEST, messages.getMessage("error.berechnungsauftrag.edit"));
292                 return (null);
293             }
294         }
295     
296         // Remove the obsolete form bean and current project
297         if (mapping.getAttribute() != null) 
298         {
299             if ("request".equals(mapping.getScope()))
300                 request.removeAttribute(mapping.getAttribute());
301             else
302                 session.removeAttribute(mapping.getAttribute());
303         }
304         session.removeAttribute(Keys.BERECHNUNGSAUFTRAG_KEY);
305     
306         // Forward control to the specified success URI
307         if (log.isDebugEnabled()) 
308         {
309             log.debug(" Forwarding to 'success' page");
310         }
311     	return (mapping.findForward("success"));
312     }
313 }