+ catch (ModuleException e) {
+ throw new ServletModuleException(e.getMessage());
+ }
+ }
+
+ /**
+ * update(req,res) - generische Updatemethode. Wennn die Funktionalitaet
+ * nicht reicht, muss sie in der abgeleiteten ServletModule-Klasse
+ * ueberschreiben werden.
+ *
+ * @param req Http-Request, das vom Dispatcher durchgereicht wird
+ * @param res Http-Response, die vom Dispatcher durchgereicht wird
+ */
+
+ public void update(HttpServletRequest req, HttpServletResponse res)
+ throws ServletModuleException {
+ try {
+ String idParam = req.getParameter("id");
+ HashMap withValues = getIntersectingValues(req, mainModule.getStorageObject());
+
+ String id = mainModule.set(withValues);
+ String whereParam = req.getParameter("where");
+ String orderParam = req.getParameter("order");
+
+ if ((whereParam != null && !whereParam.equals("")) || (orderParam != null && !orderParam.equals(""))) {
+ list(req, res);
+ }
+ else {
+ edit(req, res);
+ }
+ }
+ catch (Exception e) {
+ throw new ServletModuleException(e.getMessage());
+ }
+ }
+
+ /**
+ * deliver liefert das Template mit dem Filenamen templateFilename
+ * an den HttpServletResponse res aus, nachdem es mit den Daten aus
+ * TemplateModelRoot rtm gemischt wurde
+ *
+ * @param res Http-Response, die vom Dispatcher durchgereicht wird
+ * @param rtm beinahalten das freemarker.template.TempalteModelRoot mit den
+ * Daten, die ins Template gemerged werden sollen.
+ * @param tmpl Name des Templates
+ * @exception ServletModuleException
+ */
+ public void deliver(HttpServletRequest req, HttpServletResponse res,
+ TemplateModelRoot rtm, TemplateModelRoot popups,
+ String templateFilename)
+ throws ServletModuleException {
+ if (rtm == null) rtm = new SimpleHash();
+ try {
+ PrintWriter out = res.getWriter();
+ HTMLTemplateProcessor.process(res, templateFilename, rtm, popups, out, getLocale(req));
+
+ // we default to admin bundles here, which is not exactly beautiful...
+ // but this whole producer stuff is going to be rewritten soon.
+ // ServletModuleOpenIndy overwrites deliver() to use open bundles
+ // (br1)
+ out.close();
+ }
+ catch (HTMLParseException e) {
+ throw new ServletModuleException(e.getMessage());
+ } catch (IOException e) {
+ throw new ServletModuleException(e.getMessage());
+ }
+ }
+
+
+ /**
+ * deliver liefert das Template mit dem Filenamen templateFilename
+ * an den HttpServletResponse res aus, nachdem es mit den Daten aus
+ * TemplateModelRoot rtm gemischt wurde
+ *
+ * @param res Http-Response, die vom Dispatcher durchgereicht wird
+ * @param rtm beinahalten das freemarker.template.TempalteModelRoot mit den
+ * Daten, die ins Template gemerged werden sollen.
+ * @param tmpl Name des Templates
+ * @exception ServletModuleException
+ */
+ public void deliver(HttpServletRequest req, HttpServletResponse res,
+ TemplateModelRoot rtm, String templateFilename)
+ throws ServletModuleException {
+ deliver(req, res, rtm, null, templateFilename);
+ }
+
+ /**
+ * deliver liefert das Template mit dem Filenamen templateFilename
+ * an den HttpServletResponse res aus, nachdem es mit den Daten aus
+ * TemplateModelRoot rtm gemischt wurde
+ *
+ * @param res Http-Response, die vom Dispatcher durchgereicht wird
+ * @param rtm beinahalten das freemarker.template.TempalteModelRoot mit den
+ * Daten, die ins Template gemerged werden sollen.
+ * @param tmpl Name des Templates
+ * @exception ServletModuleException
+ */
+ public void deliver_compressed(HttpServletRequest req, HttpServletResponse res,
+ TemplateModelRoot rtm, String templateFilename)
+ throws ServletModuleException {
+ if (rtm == null) rtm = new SimpleHash();
+ try {
+ PrintWriter out = new LineFilterWriter(res.getWriter());
+ //PrintWriter out = res.getWriter();
+ HTMLTemplateProcessor.process(res, templateFilename, rtm, out, getLocale(req));
+ out.close();
+ }
+ catch (HTMLParseException e) {
+ throw new ServletModuleException(e.getMessage());
+ }
+ catch (IOException e) {
+ throw new ServletModuleException(e.getMessage());
+ }
+ }
+
+ /**
+ * deliver liefert das Template mit dem Filenamen templateFilename
+ * an den HttpServletResponse res aus, nachdem es mit den Daten aus
+ * TemplateModelRoot rtm gemischt wurde
+ *
+ * @param out ist der OutputStream, in den die gergten Daten geschickt werden sollen.
+ * @param rtm beinahalten das freemarker.template.TempalteModelRoot mit den
+ * Daten, die ins Template gemerged werden sollen.
+ * @param tmpl Name des Templates
+ * @exception ServletModuleException
+ */
+ private void deliver(HttpServletResponse res, HttpServletRequest req, PrintWriter out,
+ TemplateModelRoot rtm, String templateFilename)
+ throws HTMLParseException {
+ HTMLTemplateProcessor.process(res, templateFilename, rtm, out, getLocale(req));
+ }
+
+ /**
+ * Wenn die abgeleitete Klasse diese Methode ueberschreibt und einen String mit einem
+ * Methodennamen zurueckliefert, dann wird diese Methode bei fehlender Angabe des
+ * doParameters ausgefuehrt.
+ *
+ * @return Name der Default-Action
+ */
+ public String defaultAction() {
+ return defaultAction;
+ }
+
+ /**
+ * Hier kann vor der Datenaufbereitung schon mal ein response geschickt
+ * werden (um das subjektive Antwortverhalten bei langsamen Verbindungen
+ * zu verbessern).
+ */
+ public void predeliver(HttpServletRequest req, HttpServletResponse res) {
+ ;
+ }
+
+ /**
+ * Holt die Felder aus der Metadatenfelderliste des StorageObjects, die
+ * im HttpRequest vorkommen und liefert sie als HashMap zurueck
+ *
+ * @return HashMap mit den Werten
+ */
+ public HashMap getIntersectingValues(HttpServletRequest req, StorageObject theStorage)
+ throws ServletModuleException {
+ ArrayList theFieldList;
+ try {
+ theFieldList = theStorage.getFields();
+ }
+ catch (StorageObjectFailure e) {
+ throw new ServletModuleException("ServletModule.getIntersectingValues: " + e.getMessage());