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.DataInterfaceReportnamen;
42 import org.fhw.cabaweb.data.DataInterfaceProjekte;
43
44 import org.fhw.cabaweb.ojb.dataobjects.Gruppenmitglieder;
45 import org.fhw.cabaweb.ojb.dataobjects.Reportnamen;
46
47 import org.fhw.cabaweb.webfrontend.configs.Keys;
48 import org.fhw.cabaweb.webfrontend.forms.simple.ReportnameForm;
49
50 /***
51 * <strong>Action</strong>-Klasse für die Edit Reportname 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 12.07.2004
56 */
57 public final class EditReportnameAction 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 DataInterfaceReportnamen dirn = new DataInterfaceReportnamen();
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 DataInterfaceProjekte dip = new DataInterfaceProjekte();
105 /*** Die Session der aktuellen Anfrage */
106 HttpSession session = request.getSession();
107 /*** Die übergebene Action */
108 String action = request.getParameter("action");
109
110 /*** Zwischenspeichvaribale für den Status des Benutzers (Administrator ???) */
111 boolean isAdmin = request.isUserInRole("Administrator");
112 /*** Zwischenspeichvaribale für den Status des Benutzers (Projektleiter ???) */
113 boolean isProjectleader = false;
114 /*** Zwischenspeichvaribale für den Status des Benutzers (Benutzer ???) */
115 boolean isUser = false;
116 /*** Zwischenspeichvaribale für den Namen des Benutzers */
117 String username = request.getRemoteUser();
118
119 if(!isAdmin)
120 {
121 isProjectleader = request.isUserInRole("Projektleiter");
122 }
123 if(!isAdmin && !isProjectleader)
124 {
125 isUser = request.isUserInRole("Benutzer");
126 }
127
128 if (action == null)
129 {
130 action = "Create";
131 }
132
133 /*** Zwischenspeichvaribale für die Reportnummer (Integer) */
134 Integer reportnummer = null;
135 /*** Zwischenspeichvaribale für die Reportnummer (Request String) */
136 String rptnummer = request.getParameter("reportnummer");
137
138 if(rptnummer != null)
139 {
140 reportnummer = new Integer(rptnummer);
141 }
142
143 if (log.isDebugEnabled())
144 {
145 log.debug("EditReportnameAction: Processing " + action + " action for Reportname [" + reportnummer + "]");
146 }
147
148 Reportnamen reportname = (Reportnamen) dirn.sucheReportnummer(reportnummer);
149
150 if ((reportname == null) && !action.equals("Create"))
151 {
152 if (log.isDebugEnabled())
153 {
154 log.debug(" No Reportname for reportnummer " + reportnummer);
155 }
156
157 return (mapping.findForward("failure"));
158 }
159
160 if (reportname != null)
161 {
162 session.setAttribute(Keys.REPORTNAME_KEY, reportname);
163 }
164
165 Collection projekte = null;
166
167 if(isAdmin)
168 {
169 if (log.isDebugEnabled())
170 {
171 log.debug(" User has Role: Administrator");
172 log.debug(" Searching all Projects");
173 }
174
175 projekte = dip.sucheAlle();
176
177 if (log.isDebugEnabled())
178 {
179 log.debug(" Found " + projekte.size() + " Projects");
180 }
181 }
182 else if(isProjectleader)
183 {
184 if (log.isDebugEnabled())
185 {
186 log.debug(" User is NOT Administrator");
187 log.debug(" Searching own Project");
188 }
189
190 Collection usernames = digm.sucheLogInName(username);
191 Iterator iter = usernames.iterator();
192 Gruppenmitglieder user = null;
193
194 if(iter.hasNext())
195 {
196 user = (Gruppenmitglieder) iter.next();
197 }
198
199 if (log.isDebugEnabled())
200 {
201 log.debug(" Projektnummer " + ((user.getProjektgruppe()).getProjekte()).getProjektnummer());
202 }
203
204 ArrayList projekteAL = new ArrayList();
205 projekteAL.add((user.getProjektgruppe()).getProjekte());
206 projekte = projekteAL;
207
208 if (log.isDebugEnabled())
209 {
210 log.debug(" Found " + projekte.size() + " Projects");
211 }
212 }
213
214 if (projekte != null)
215 {
216 session.setAttribute(Keys.PROJEKTE_KEY, projekte);
217 }
218
219
220 if (form == null)
221 {
222 if (log.isDebugEnabled())
223 {
224 log.debug(" Creating new ReportnameForm bean under key " + mapping.getAttribute());
225 }
226
227 form = new ReportnameForm();
228
229 if ("request".equals(mapping.getScope()))
230 {
231 request.setAttribute(mapping.getAttribute(), form);
232 }
233 else
234 {
235 session.setAttribute(mapping.getAttribute(), form);
236 }
237 }
238
239 ReportnameForm rnform = (ReportnameForm) form;
240 rnform.setAction(action);
241
242 if (!action.equals("Create"))
243 {
244 if (log.isDebugEnabled())
245 {
246 log.debug(" Populating form from " + reportname);
247 }
248
249 try
250 {
251 PropertyUtils.copyProperties(rnform, reportname);
252 rnform.setProjektnummer(reportname.getProjekte().getProjektnummer());
253 rnform.setReportnummer(reportname.getReportnummer());
254 rnform.setAction(action);
255 }
256 catch (InvocationTargetException e)
257 {
258 Throwable t = e.getTargetException();
259 if (t == null)
260 t = e;
261 log.error("ReportnameForm.populate", t);
262 throw new ServletException("ReportnameForm.populate", t);
263 }
264 catch (Throwable t)
265 {
266 log.error("ReportnameForm.populate", t);
267 throw new ServletException("ReportnameForm.populate", t);
268 }
269 }
270
271
272 if (log.isDebugEnabled())
273 {
274 log.debug(" Forwarding to 'success' page");
275 }
276 return (mapping.findForward("success"));
277 }
278 }