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