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.edit;
20
21 import java.lang.reflect.InvocationTargetException;
22 import java.util.ArrayList;
23 import java.util.Collection;
24 import java.util.Iterator;
25
26 import javax.servlet.ServletException;
27 import javax.servlet.http.HttpServletRequest;
28 import javax.servlet.http.HttpServletResponse;
29 import javax.servlet.http.HttpSession;
30
31 import org.apache.struts.action.Action;
32 import org.apache.struts.action.ActionForm;
33 import org.apache.struts.action.ActionForward;
34 import org.apache.struts.action.ActionMapping;
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.DataInterfaceProjekte;
42 import org.fhw.cabaweb.data.DataInterfaceVoreinstellungen;
43 import org.fhw.cabaweb.data.DataInterfaceVoreinstellungenFeldnamen;
44 import org.fhw.cabaweb.data.dataobjects.Voreinstellung;
45
46 import org.fhw.cabaweb.ojb.dataobjects.Gruppenmitglieder;
47 import org.fhw.cabaweb.webfrontend.configs.Keys;
48 import org.fhw.cabaweb.webfrontend.forms.simple.VoreinstellungForm;
49
50 /***
51 * <strong>Action</strong>-Klasse für die Edit Voreinstellung Action .
52 * Die Controller Klasse der Struts Model View Controller Architektur.
53 *
54 * @author <a href="mailto:thomas.vogt@tvc-software.com">Thomas Vogt</a>
55 * @version Version 1.0 24.07.2004
56 */
57 public final class EditVoreinstellungAction extends Action {
58
59 /***
60 * The <code>Log</code> instance for this application.
61 */
62 private Log log = LogFactory.getLog("org.fhw.cabaweb.webfrontend.actions.edit");
63
64 /***
65 * Verarbeiten der spezifizierten HTTP Anfrage und erzeugen der zugeordneten
66 * HTTP Antwort bzw. Forwarden an eine andere Web Komponente, die die Antwort
67 * erzeugt.
68 *
69 * Gibt eine <code>ActionForward</code> Instanz zurück die angibt wohin und wie
70 * die Kontrolle weitergegeben werden soll. Kann auch <code>null</code> sein,
71 * wenn die Anfrage bereits bearbeitet wurde.
72 *
73 * @param mapping Das ActionMapping das benutzt wurde um diese Instanz zu selektieren
74 * @param form Das optionale ActionForm Bean für die Anfrage (soweit vorhanden)
75 * @param request Die HTTP Anfrage die wir gerade bearbeiten
76 * @param response The HTTP Antwort die wir erzeugen
77 *
78 * @return Die Action zu der wir weiterleiten
79 * @exception Exception wenn ein Eingabe-/Ausgabe Fehler auftritt oder eine Servlet Exception auftritt
80 * bzw. die Business Logik einen Fehler verursacht
81 */
82 public ActionForward execute(ActionMapping mapping,
83 ActionForm form,
84 HttpServletRequest request,
85 HttpServletResponse response)
86 throws Exception
87 {
88 /*** Forwarding Action Variable mit null initialisieren */
89
90 /*** Die Locale Variable (Sprache, Formatierung, etc.) */
91
92 /*** Die Resourcen (lokalisierten Meldungen) der Anfrage holen */
93
94 /*** Wenn Fehler bei der Validierung Fehler auftreten werden Sie diesem
95 * <code>ActionErrors</code> Objekt hinzugefügt.
96 */
97
98
99 /*** Data Interface (indirekter Zugriff auf die OJB Ebene) initialisieren */
100 DataInterfaceVoreinstellungen div = new DataInterfaceVoreinstellungen();
101 /*** Data Interface (indirekter Zugriff auf die OJB Ebene) initialisieren */
102 DataInterfaceGruppenmitglieder digm = new DataInterfaceGruppenmitglieder();
103 /*** Data Interface (indirekter Zugriff auf die OJB Ebene) initialisieren */
104 DataInterfaceVoreinstellungenFeldnamen divfn = new DataInterfaceVoreinstellungenFeldnamen();
105 /*** Data Interface (indirekter Zugriff auf die OJB Ebene) initialisieren */
106 DataInterfaceProjekte dip = new DataInterfaceProjekte();
107 /*** Die Session der aktuellen Anfrage */
108 HttpSession session = request.getSession();
109 /*** Die übergebene Action */
110 String action = request.getParameter("action");
111
112 /*** Zwischenspeichvaribale für den Status des Benutzers (Administrator ???) */
113 boolean isAdmin = request.isUserInRole("Administrator");
114 /*** Zwischenspeichvaribale für den Status des Benutzers (Projektleiter ???) */
115 boolean isProjectleader = false;
116 /*** Zwischenspeichvaribale für den Status des Benutzers (Benutzer ???) */
117 boolean isUser = false;
118 /*** Zwischenspeichvaribale für den Namen des Benutzers */
119 String username = request.getRemoteUser();
120
121 if(!isAdmin)
122 {
123 isProjectleader = request.isUserInRole("Projektleiter");
124 }
125 if(!isAdmin && !isProjectleader)
126 {
127 isUser = request.isUserInRole("Benutzer");
128 }
129
130 if (action == null)
131 {
132 action = "Create";
133 }
134
135 /*** Zwischenspeichvaribale für die Feldnummer (Integer) */
136 Integer feldnummer = null;
137 /*** Zwischenspeichvaribale für die Feldnummer (Request String) */
138 String fnummer = request.getParameter("feldnummer");
139
140 /*** Zwischenspeichvaribale für die Projektnummer (Integer) */
141 Integer projektnummer = null;
142 /*** Zwischenspeichvaribale für die Projektnummer (Request String) */
143 String pnummer = request.getParameter("projektnummer");
144
145 if(pnummer != null)
146 {
147 projektnummer = new Integer(pnummer);
148 }
149 if(fnummer != null)
150 {
151 feldnummer = new Integer(fnummer);
152 }
153
154 if (log.isDebugEnabled())
155 {
156 log.debug("EditVoreinstellungAction: Processing " + action + " action for Preset [" + projektnummer + ", " + feldnummer + "]");
157 }
158
159 Voreinstellung voreinstellung = (Voreinstellung) div.sucheKombination_Feld(projektnummer, feldnummer);
160
161 if ((voreinstellung == null) && !action.equals("Create"))
162 {
163 if (log.isDebugEnabled())
164 {
165 log.debug(" No Preset for feldnummer " + feldnummer);
166 }
167
168 return (mapping.findForward("failure"));
169 }
170
171 if (voreinstellung != null)
172 {
173 session.setAttribute(Keys.VOREINSTELLUNG_KEY, voreinstellung);
174 }
175
176
177 Collection projekte = null;
178
179 if(isAdmin)
180 {
181 if (log.isDebugEnabled())
182 {
183 log.debug(" User has Role: Administrator");
184 log.debug(" Searching all Projects");
185 }
186
187 projekte = dip.sucheAlle();
188
189 if (log.isDebugEnabled())
190 {
191 log.debug(" Found " + projekte.size() + " Projects");
192 }
193 }
194 else if(isProjectleader)
195 {
196 if (log.isDebugEnabled())
197 {
198 log.debug(" User is NOT Administrator");
199 log.debug(" Searching own Project");
200 }
201
202 Collection usernames = digm.sucheLogInName(username);
203 Iterator iter = usernames.iterator();
204 Gruppenmitglieder user = null;
205
206 if(iter.hasNext())
207 {
208 user = (Gruppenmitglieder) iter.next();
209 }
210
211 if (log.isDebugEnabled())
212 {
213 log.debug(" Projektnummer " + ((user.getProjektgruppe()).getProjekte()).getProjektnummer());
214 }
215
216 ArrayList projekteAL = new ArrayList();
217 projekteAL.add((user.getProjektgruppe()).getProjekte());
218 projekte = projekteAL;
219
220 if (log.isDebugEnabled())
221 {
222 log.debug(" Found " + projekte.size() + " Projects");
223 }
224 }
225
226 if (projekte != null)
227 {
228 session.setAttribute(Keys.PROJEKTE_KEY, projekte);
229 }
230
231 Collection voreinstellungenFeldnamen = null;
232
233 if(isAdmin)
234 {
235 if (log.isDebugEnabled())
236 {
237 log.debug(" User has Role: Administrator");
238 log.debug(" Searching all Fieldnames");
239 }
240
241 voreinstellungenFeldnamen = divfn.sucheAlle();
242
243 if (log.isDebugEnabled())
244 {
245 log.debug(" Found " + voreinstellungenFeldnamen.size() + " Fieldnames");
246 }
247 }
248 else if(isProjectleader)
249 {
250 if (log.isDebugEnabled())
251 {
252 log.debug(" User is NOT Administrator");
253 log.debug(" Searching own Fieldnames");
254 }
255
256 Collection usernames = digm.sucheLogInName(username);
257 Iterator iter = usernames.iterator();
258 Gruppenmitglieder user = null;
259
260 if(iter.hasNext())
261 {
262 user = (Gruppenmitglieder) iter.next();
263 }
264
265 if (log.isDebugEnabled())
266 {
267 log.debug(" Projektnummer " + ((user.getProjektgruppe()).getProjekte()).getProjektnummer());
268 }
269
270 voreinstellungenFeldnamen = divfn.sucheProjektnummer(((user.getProjektgruppe()).getProjekte()).getProjektnummer());
271
272 if (log.isDebugEnabled())
273 {
274 log.debug(" Found " + voreinstellungenFeldnamen.size() + " Fieldnames");
275 }
276 }
277
278 if (voreinstellungenFeldnamen != null)
279 {
280 session.setAttribute(Keys.VOREINSTELLUNGENFELDNAMEN_KEY, voreinstellungenFeldnamen);
281 }
282
283
284 if (form == null)
285 {
286 if (log.isDebugEnabled())
287 {
288 log.debug(" Creating new VoreinstellungForm bean under key " + mapping.getAttribute());
289 }
290
291 form = new VoreinstellungForm();
292
293 if ("request".equals(mapping.getScope()))
294 {
295 request.setAttribute(mapping.getAttribute(), form);
296 }
297 else
298 {
299 session.setAttribute(mapping.getAttribute(), form);
300 }
301 }
302
303 VoreinstellungForm vform = (VoreinstellungForm) form;
304 vform.setAction(action);
305
306 if (!action.equals("Create"))
307 {
308 if (log.isDebugEnabled())
309 {
310 log.debug(" Populating form from " + voreinstellung);
311 }
312
313 try
314 {
315 PropertyUtils.copyProperties(vform, voreinstellung);
316 vform.setWert(voreinstellung.getWertObject().toString());
317 vform.setWert(voreinstellung.getWertObject().toString());
318 vform.setAction(action);
319 }
320 catch (InvocationTargetException e)
321 {
322 Throwable t = e.getTargetException();
323 if (t == null)
324 t = e;
325 log.error("VoreinstellungForm.populate", t);
326 throw new ServletException("VoreinstellungForm.populate", t);
327 }
328 catch (Throwable t)
329 {
330 log.error("VoreinstellungForm.populate", t);
331 throw new ServletException("VoreinstellungForm.populate", t);
332 }
333 }
334
335
336 if (log.isDebugEnabled())
337 {
338 log.debug(" Forwarding to 'success' page");
339 }
340 return (mapping.findForward("success"));
341 }
342 }