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