1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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ü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
86 /*** Die Locale Variable (Sprache, Formatierung, etc.) */
87
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
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
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
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
283 if (log.isDebugEnabled())
284 {
285 log.debug(" Forwarding to 'success' page");
286 }
287 return (mapping.findForward("success"));
288 }
289 }