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