X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=source%2Fmir%2Fservlet%2FServletModule.java;h=76bb15125ab8f07a7468a4c23d345fe1de42790b;hb=d96e301d3d5b64037f4bd72c12e6ac0f7de69ec7;hp=d276b78f8c05c63f9dde019af19730c28875d28e;hpb=c785369f4ca9b7a6b295464041c14206c6db84bf;p=mir.git diff --git a/source/mir/servlet/ServletModule.java b/source/mir/servlet/ServletModule.java index d276b78f..76bb1512 100755 --- a/source/mir/servlet/ServletModule.java +++ b/source/mir/servlet/ServletModule.java @@ -1,351 +1,499 @@ -/* - * put your module comment here - * - */ - - -package mir.servlet; - -import java.io.*; -import java.lang.*; -import java.util.*; -import javax.servlet.http.*; -import freemarker.template.*; -import mir.storage.*; -import mir.servlet.ServletModuleException; -import mir.misc.*; -import mir.entity.*; -import mir.module.*; -import mir.misc.*; - - -/** - * Abstrakte Klasse ServletModule stellt die Basisfunktionalitaet der - * abgeleiteten ServletModule zur Verfügung. - * - * @version 28.6.1999 - * @author RK - */ - -public abstract class ServletModule { - - public String defaultAction; - protected Logfile theLog; - protected AbstractModule mainModule; - protected String templateListString; - protected String templateObjektString; - protected String templateConfirmString; - - /** - * Singelton - Methode muss in den abgeleiteten Klassen ueberschrieben werden. - * @return ServletModule - */ - public static ServletModule getInstance() { return null; } - - /** - * get the session binded language - */ - public String getLanguage(HttpServletRequest req){ - HttpSession session = req.getSession(true); - String language = (String)session.getAttribute("Language"); - if(language==null){ - language=Configuration.getProperty("StandardLanguage"); - } - return language; - } - - // ACHTUNG DEPRECATED:::: - public void process(HttpServletRequest req, HttpServletResponse res) throws ServletModuleException {} - - - - /** - * list(req,res) - generische Listmethode. 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 list(HttpServletRequest req, HttpServletResponse res) - throws ServletModuleException { - try { - EntityList theList; - String offsetParam = req.getParameter("offset"); - int offset=0; - PrintWriter out = res.getWriter(); - - // hier offsetcode bearbeiten - if (offsetParam != null && !offsetParam.equals("")){ - offset = Integer.parseInt(offsetParam); - } - if (req.getParameter("next") != null){ - offset=Integer.parseInt(req.getParameter("nextoffset")); - } else { - if (req.getParameter("prev") != null){ - offset = Integer.parseInt(req.getParameter("prevoffset")); - } - } - theList = mainModule.getByWhereClause(null, offset); - //theList = mainModule.getByWhereClause((String)null, offset); - if (theList == null || theList.getCount() == 0 || theList.getCount()>1){ - HTMLTemplateProcessor.process(res,getLanguage(req)+"/"+templateListString, theList, out); - } else { - deliver(req, res, theList.elementAt(0), templateObjektString); - } - } catch (Exception e) { - throw new ServletModuleException(e.toString()); - } - } - - /** - * add(req,res) - generische Addmethode. 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 add(HttpServletRequest req, HttpServletResponse res) - throws ServletModuleException { - - try { - SimpleHash mergeData = new SimpleHash(); - mergeData.put("new", "1"); - deliver(req, res, mergeData, templateObjektString); - } catch (Exception e) { - throw new ServletModuleException(e.toString()); - } - } - - /** - * insert(req,res) - generische Insertmethode, folgt auf add. - * 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 insert(HttpServletRequest req, HttpServletResponse res) - throws ServletModuleException { - try { - HashMap withValues = getIntersectingValues(req, mainModule.getStorageObject()); - String id = mainModule.add(withValues); - // theLog.printDebugInfo("--trying to deliver..."+id); - list(req,res); - //deliver(req, res, mainModule.getById(id), templateObjektString); - } - catch (Exception e) { throw new ServletModuleException(e.toString());} - } - -/** - * delete(req,res) - generische Deletemethode. 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 delete(HttpServletRequest req, HttpServletResponse res) - throws ServletModuleException - { - try { - String idParam = req.getParameter("id"); - if (idParam == null) throw new ServletModuleException("Falscher Aufruf: (id) nicht angegeben"); - // Hier code zum Loeschen - String confirmParam = req.getParameter("confirm"); - String cancelParam = req.getParameter("cancel"); - if (confirmParam == null && cancelParam == null) { - // HTML Ausgabe zum Confirmen! - SimpleHash mergeData = new SimpleHash(); - String moduleClassName = mainModule.getClass().getName(); - int i = moduleClassName.indexOf(".Module"); - String moduleName = moduleClassName.substring(i+7); - mergeData.put("module", moduleName); - mergeData.put("infoString", moduleName + ": " + idParam); - mergeData.put("id", idParam); - mergeData.put("where", req.getParameter("where")); - mergeData.put("order", req.getParameter("order")); - mergeData.put("offset", req.getParameter("offset")); - deliver(req, res, mergeData,templateConfirmString); - } else { - if (confirmParam!= null && !confirmParam.equals("")) { - //theLog.printInfo("delete confirmed!"); - mainModule.deleteById(idParam); - list(req,res); // back to list - } else { - if (req.getParameter("where") != null) - list(req,res); - else - edit(req,res); - } - } - } catch (Exception e) { - throw new ServletModuleException(e.toString()); - } - } - - /** - * edit(req,res) - generische Editmethode. 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 edit(HttpServletRequest req, HttpServletResponse res) - throws ServletModuleException { - try { - String idParam = req.getParameter("id"); - deliver(req, res, mainModule.getById(idParam), templateObjektString); - } catch(ModuleException e) { - throw new ServletModuleException(e.toString()); - } - } - -/** - * 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); - //theLog.printInfo("Showing Entity with id: " + id); - //edit(req,res); - String whereParam = req.getParameter("where"); - String orderParam = req.getParameter("order"); - if ((whereParam!=null && !whereParam.equals("")) || (orderParam!=null && !orderParam.equals(""))){ - //theLog.printDebugInfo("update to list"); - list(req,res); - } else { - edit(req, res); - } - //list(req,res); - } catch (Exception e) { - throw new ServletModuleException(e.toString()); - } - } - - // Hilfsprozeduren - /** - public void predeliver(HttpServletResponse res, TemplateModelRoot rtm, String tmpl) - throws ServletModuleException { - try { - PrintWriter out = new LineFilterWriter(res.getWriter()); - StringWriter a = new StringWriter(); - deliver(new PrintWriter(a),rtm,tmpl); - out.write(a.toString()); - out.flush(); - } catch (Exception e) { - e.printStackTrace();System.err.println(e.toString()); - } - } - */ - - /** - * 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 { - if (rtm == null) rtm = new SimpleHash(); - try { - //PrintWriter out = new LineFilterWriter(res.getWriter()); - PrintWriter out = res.getWriter(); - HTMLTemplateProcessor.process(res,getLanguage(req)+"/"+templateFilename, rtm , out); - out.close(); - } catch (HTMLParseException e) { - throw new ServletModuleException(e.toString()); - } catch (IOException e) { - throw new ServletModuleException(e.toString()); - } - } - /** - * 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 entity Entity, aus der die Daten, die ins Template gemerged werden sollen. - * @param tmpl Name des Templates - * @exception ServletModuleException - */ - public void deliver(HttpServletRequest req, HttpServletResponse res, Entity ent, String templateFilename) - throws ServletModuleException { - deliver(req, res,HTMLTemplateProcessor.makeSimpleHash(ent), 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 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,getLanguage(req)+"/"+templateFilename, rtm , out); - } - - /** - * 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 (StorageObjectException e) { - throw new ServletModuleException("ServletModule.getIntersectingValues: " + e.toString()); - } - - HashMap withValues = new HashMap(); - String aField, aValue; - - for(int i=0; i