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