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