From: br1 Date: Sun, 24 Mar 2002 20:07:20 +0000 (+0000) Subject: internationalized admin templates X-Git-Tag: prexmlproducerconfig~251 X-Git-Url: http://erislabs.net/gitweb/?a=commitdiff_plain;h=cf8cb5c3fc2602ecde7d53cd7bf7dc30eac6a6d1;p=mir.git internationalized admin templates --- diff --git a/source/Mir.java b/source/Mir.java index abd442ab..486e4efd 100755 --- a/source/Mir.java +++ b/source/Mir.java @@ -1,22 +1,28 @@ -import java.io.*; -import java.util.*; -import java.net.*; -import java.lang.reflect.*; -import javax.servlet.*; -import javax.servlet.http.*; -import javax.servlet.UnavailableException; -import java.sql.*; - -import freemarker.template.*; -import mir.misc.*; +import freemarker.template.SimpleHash; +import freemarker.template.SimpleScalar; +import mir.misc.HTMLParseException; +import mir.misc.HTMLTemplateProcessor; +import mir.misc.MirConfig; +import mir.misc.StringUtil; import mir.servlet.*; -import mir.storage.StorageObjectException; +import mircoders.entity.EntityUsers; +import mircoders.module.ModuleMessage; +import mircoders.module.ModuleUsers; +import mircoders.storage.DatabaseMessages; +import mircoders.storage.DatabaseUsers; -import mircoders.servlet.*; -import mircoders.module.*; -import mircoders.entity.*; -import mircoders.storage.*; +import javax.servlet.ServletException; +import javax.servlet.UnavailableException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; +import java.io.IOException; +import java.io.PrintWriter; +import java.lang.reflect.Method; +import java.util.GregorianCalendar; +import java.util.HashMap; +import java.util.Locale; /** * Mir.java - main servlet, that dispatches to servletmodules @@ -28,271 +34,291 @@ import mircoders.storage.*; public class Mir extends AbstractServlet { - private static ModuleUsers usersModule=null; - private static ModuleMessage messageModule=null; - private final static HashMap servletModuleInstanceHash = new HashMap(); - - public HttpSession session; - - public void doGet(HttpServletRequest req, HttpServletResponse res) - throws ServletException, IOException { - doPost(req,res); - } - - public void doPost(HttpServletRequest req, HttpServletResponse res) - throws ServletException, IOException, UnavailableException { + private static ModuleUsers usersModule = null; + private static ModuleMessage messageModule = null; + private final static HashMap servletModuleInstanceHash = new HashMap(); - long startTime = System.currentTimeMillis(); - long sessionConnectTime=0; - String http=""; + public HttpSession session; - // get the configration - if(getServletContext().getAttribute("mir.confed") == null) { - getConfig(req); + public void doGet(HttpServletRequest req, HttpServletResponse res) + throws ServletException, IOException { + doPost(req, res); } - MirConfig.setServletName(getServletName()); - session = req.getSession(true); + public void doPost(HttpServletRequest req, HttpServletResponse res) + throws ServletException, IOException, UnavailableException { - if (req.getServerPort() == 443) http="https"; else http="http"; - res.setContentType("text/html"); - String moduleName = req.getParameter("module"); + long startTime = System.currentTimeMillis(); + long sessionConnectTime = 0; + String http = ""; - if(session.getAttribute("Language")==null){ - setLanguage(session,getAcceptLanguage(req)); - } + // get the configration + if (getServletContext().getAttribute("mir.confed") == null) { + getConfig(req); + } + MirConfig.setServletName(getServletName()); + + session = req.getSession(true); + + if (req.getServerPort() == 443) http = "https"; else http = "http"; + res.setContentType("text/html"); + String moduleName = req.getParameter("module"); + + checkLanguage(session, req); + + /** @todo for cleanup and readability this should be moved to + * method loginIfNecessary() */ + + // Authentifizierung + if (moduleName != null && moduleName.equals("login")) { + String user = req.getParameter("login"); + String passwd = req.getParameter("password"); + theLog.printDebugInfo("--login: evaluating for user: " + user); + EntityUsers userEntity = allowedUser(user, passwd); + if (userEntity == null) { + // login failed: redirecting to login + theLog.printWarning("--login: failed!"); + _sendLoginPage(res, req, res.getWriter()); + return; + } + else { + // login successful + + theLog.printInfo("--login: successful! setting uid: " + userEntity.getId()); + session.setAttribute("login.uid", userEntity); + theLog.printDebugInfo("--login: trying to retrieve login.target"); + String target = (String) session.getAttribute("login.target"); + + if (target != null) { + theLog.printDebugInfo("Redirect: " + target); + int serverPort = req.getServerPort(); + String redirect = ""; + String redirectString = ""; + + + if (serverPort == 80) { + redirect = res.encodeURL(http + "://" + req.getServerName() + target); + redirectString = "going Mir"; + } + else { + redirect = res.encodeURL(http + "://" + req.getServerName() + ":" + req.getServerPort() + target); + redirectString = "going Mir"; + } + res.getWriter().println(redirectString); + + + //res.sendRedirect(redirect); + + } + else { + // redirecting to default target + theLog.printDebugInfo("--login: no target - redirecting to default"); + _sendStartPage(res, req, res.getWriter(), userEntity); + } + return; + } // if login succesful + } // if login + + if (moduleName != null && moduleName.equals("logout")) { + theLog.printDebugInfo("--logout"); + session.invalidate(); + + //session = req.getSession(true); + //checkLanguage(session, req); + _sendLoginPage(res, req, res.getWriter()); + return; + } - /** @todo for cleanup and readability this should be moved to - * method loginIfNecessary() */ - - // Authentifizierung - if (moduleName!=null && moduleName.equals("login")) { - String user=req.getParameter("login"); - String passwd= req.getParameter("password"); - String lang = req.getParameter("lang"); - theLog.printDebugInfo("--login: evaluating for user: "+user); - EntityUsers userEntity = allowedUser(user,passwd); - if (userEntity==null) { - // login failed: redirecting to login - theLog.printWarning("--login: failed!"); - _sendLoginPage(res,req,res.getWriter()); - return; - } else { - // login successful - - //if accept-language!=selected language change language - if(!getLanguage(req,session).equals(lang)){ - setLanguage(session,lang); + // Check if authed! + EntityUsers userEntity = (EntityUsers) session.getAttribute("login.uid"); + if (userEntity == null) { + // redirect to loginpage + String redirectString = req.getRequestURI(); + String queryString = req.getQueryString(); + if (queryString != null && !queryString.equals("")) { + redirectString += "?" + req.getQueryString(); + theLog.printDebugInfo("STORING: " + redirectString); + session.setAttribute("login.target", redirectString); + } + _sendLoginPage(res, req, res.getWriter()); + return; } - theLog.printInfo("--login: successful! setting uid: " + userEntity.getId()); - session.setAttribute("login.uid", userEntity); - theLog.printDebugInfo("--login: trying to retrieve login.target"); - String target = (String)session.getAttribute("login.target"); - - if (target != null) { - theLog.printDebugInfo("Redirect: "+target); - int serverPort = req.getServerPort(); - String redirect = ""; - String redirectString =""; - - - if(serverPort==80){ - redirect=res.encodeURL(http + "://" + req.getServerName() + target); - redirectString = "going Mir"; - } else { - redirect=res.encodeURL(http + "://" + req.getServerName() + ":" +req.getServerPort() + target); - redirectString = "going Mir"; - } - res.getWriter().println(redirectString); - - - //res.sendRedirect(redirect); - - } else { - // redirecting to default target - theLog.printDebugInfo("--login: no target - redirecting to default"); - _sendStartPage(res,req,res.getWriter(),userEntity); + // If no module is specified goto standard startpage + if (moduleName == null || moduleName.equals("")) { + theLog.printDebugInfo("no module: redirect to standardpage"); + _sendStartPage(res, req, res.getWriter(), userEntity); + return; } - return; - } // if login succesful - } // if login - - if (moduleName!=null && moduleName.equals("logout")) { - theLog.printDebugInfo("--logout"); - session.invalidate(); - _sendLoginPage(res,req,res.getWriter()); - return; - } + // end of auth - // Check if authed! - EntityUsers userEntity = (EntityUsers)session.getAttribute("login.uid"); - if (userEntity == null) { - // redirect to loginpage - String redirectString = req.getRequestURI(); - String queryString = req.getQueryString(); - if (queryString!=null && !queryString.equals("")) { - redirectString += "?" + req.getQueryString(); - theLog.printDebugInfo("STORING: " + redirectString); - session.setAttribute("login.target", redirectString); - } - _sendLoginPage(res,req,res.getWriter()); - return; - } + // From now on regular dispatching... + try { + // get servletmodule by parameter and continue with dispacher + ServletModule smod = getServletModuleForName(moduleName); + ServletModuleDispatch.dispatch(smod, req, res); + } + catch (ServletModuleException e) { + handleError(req, res, res.getWriter(), + "ServletException in Module " + moduleName + " -- " + e.toString()); + } + catch (ServletModuleUserException e) { + handleUserError(req, res, res.getWriter(), "User error" + e.toString()); + } - // If no module is specified goto standard startpage - if (moduleName == null || moduleName.equals("")) { - theLog.printDebugInfo("no module: redirect to standardpage"); - _sendStartPage(res,req, res.getWriter(),userEntity); - return; + // timing... + sessionConnectTime = System.currentTimeMillis() - startTime; + theLog.printInfo("EXECTIME (" + moduleName + "): " + sessionConnectTime + " ms"); } - // end of auth - // From now on regular dispatching... - try { - // get servletmodule by parameter and continue with dispacher - ServletModule smod = getServletModuleForName(moduleName); - ServletModuleDispatch.dispatch(smod,req,res); - } - catch (ServletModuleException e) { - handleError(req, res, res.getWriter(), - "ServletException in Module " + moduleName + " -- " + e.toString()); - } - catch (ServletModuleUserException e) { - handleUserError(req,res,res.getWriter(), "User error" + e.toString()); - } - // timing... - sessionConnectTime = System.currentTimeMillis() - startTime; - theLog.printInfo("EXECTIME (" + moduleName + "): " + sessionConnectTime + " ms"); - } - - - /** - * Private method getServletModuleForName returns ServletModule - * from Cache - * - * @return ServletModule - * - */ - private static ServletModule getServletModuleForName(String moduleName) - throws ServletModuleException { - - // Instance in Map ? - if (!servletModuleInstanceHash.containsKey(moduleName)) { - // was not found in hash... - try { - Class theServletModuleClass=null; - try { - // first we try to get ServletModule from stern.che3.servlet - theServletModuleClass = Class.forName("mircoders.servlet.ServletModule" + moduleName); - } catch (ClassNotFoundException e) { - // on failure, we try to get it from lib-layer - theServletModuleClass = Class.forName("mir.servlet.ServletModule"+ moduleName); + /** + * Private method getServletModuleForName returns ServletModule + * from Cache + * + * @return ServletModule + * + */ + private static ServletModule getServletModuleForName(String moduleName) + throws ServletModuleException { + + // Instance in Map ? + if (!servletModuleInstanceHash.containsKey(moduleName)) { + // was not found in hash... + try { + Class theServletModuleClass = null; + try { + // first we try to get ServletModule from stern.che3.servlet + theServletModuleClass = Class.forName("mircoders.servlet.ServletModule" + moduleName); + } + catch (ClassNotFoundException e) { + // on failure, we try to get it from lib-layer + theServletModuleClass = Class.forName("mir.servlet.ServletModule" + moduleName); + } + Method m = theServletModuleClass.getMethod("getInstance", null); + ServletModule smod = (ServletModule) m.invoke(null, null); + // we put it into map for further reference + servletModuleInstanceHash.put(moduleName, smod); + return smod; + } + catch (Exception e) { + throw new ServletModuleException("*** error resolving classname for " + + moduleName + " -- " + e.toString()); + } } - Method m = theServletModuleClass.getMethod("getInstance", null); - ServletModule smod = (ServletModule)m.invoke(null, null); - // we put it into map for further reference - servletModuleInstanceHash.put(moduleName,smod); - return smod; - } catch (Exception e) { - throw new ServletModuleException("*** error resolving classname for " + - moduleName +" -- "+ e.toString()); - } + else + return (ServletModule) servletModuleInstanceHash.get(moduleName); } - else return (ServletModule)servletModuleInstanceHash.get(moduleName); - } - private void handleError(HttpServletRequest req, HttpServletResponse res, - PrintWriter out, String errorString) { + private void handleError(HttpServletRequest req, HttpServletResponse res, + PrintWriter out, String errorString) { - try { - theLog.printError(errorString); - SimpleHash modelRoot = new SimpleHash(); - modelRoot.put("errorstring", new SimpleScalar(errorString)); - modelRoot.put("date", new SimpleScalar(StringUtil.date2readableDateTime(new GregorianCalendar()))); - HTMLTemplateProcessor.process(res,MirConfig.getProp("Mir.ErrorTemplate"), - modelRoot,out,req.getLocale()); - out.close(); - } - catch (Exception e) { - System.err.println("Error in ErrorTemplate"); - } - } - - private void handleUserError(HttpServletRequest req, HttpServletResponse res, - PrintWriter out, String errorString) { - try { - theLog.printError(errorString); - SimpleHash modelRoot = new SimpleHash(); - modelRoot.put("errorstring", new SimpleScalar(errorString)); - modelRoot.put("date", new SimpleScalar(StringUtil.date2readableDateTime(new GregorianCalendar()))); - HTMLTemplateProcessor.process(res,MirConfig.getProp("Mir.UserErrorTemplate"), - modelRoot,out, req.getLocale()); - out.close(); + try { + theLog.printError(errorString); + SimpleHash modelRoot = new SimpleHash(); + modelRoot.put("errorstring", new SimpleScalar(errorString)); + modelRoot.put("date", new SimpleScalar(StringUtil.date2readableDateTime(new GregorianCalendar()))); + HTMLTemplateProcessor.process(res, MirConfig.getProp("Mir.ErrorTemplate"), modelRoot, out, getLocale(req)); + out.close(); + } + catch (Exception e) { + System.err.println("Error in ErrorTemplate"); + } } - catch (Exception e) { - System.err.println("Fehler in UserErrorTemplate"); + + private void handleUserError(HttpServletRequest req, HttpServletResponse res, + PrintWriter out, String errorString) { + try { + theLog.printError(errorString); + SimpleHash modelRoot = new SimpleHash(); + modelRoot.put("errorstring", new SimpleScalar(errorString)); + modelRoot.put("date", new SimpleScalar(StringUtil.date2readableDateTime(new GregorianCalendar()))); + HTMLTemplateProcessor.process(res, MirConfig.getProp("Mir.UserErrorTemplate"), + modelRoot, out, getLocale(req)); + out.close(); + } + catch (Exception e) { + System.err.println("Fehler in UserErrorTemplate"); + } + } - } - /** - * evaluate login for user / password - */ - protected EntityUsers allowedUser(String user, String password) { - try { - if (usersModule == null) usersModule = new ModuleUsers(DatabaseUsers.getInstance()); - return usersModule.getUserForLogin(user, password); - } catch(Exception e) { - theLog.printDebugInfo(e.toString()); - e.printStackTrace(); - return null; + /** + * evaluate login for user / password + */ + protected EntityUsers allowedUser(String user, String password) { + try { + if (usersModule == null) usersModule = new ModuleUsers(DatabaseUsers.getInstance()); + return usersModule.getUserForLogin(user, password); + } + catch (Exception e) { + theLog.printDebugInfo(e.toString()); + e.printStackTrace(); + return null; + } } - } - - // Redirect-methods - private void _sendLoginPage(HttpServletResponse res,HttpServletRequest req, PrintWriter out) { - String loginTemplate = "login.template"; - String sessionUrl=res.encodeURL(""); - //session = req.getSession(true); - try { - theLog.printDebugInfo("login: "+lang); - if(lang==null){ - lang=getAcceptLanguage(req); - } - SimpleHash mergeData = new SimpleHash(); - mergeData.put("session",sessionUrl); - HTMLTemplateProcessor.process(res, lang+"/"+loginTemplate, mergeData, - out, req.getLocale()); - } catch(HTMLParseException e) { - handleError(req, res, out, "Error in logintemplate."); + + // Redirect-methods + private void _sendLoginPage(HttpServletResponse res, HttpServletRequest req, PrintWriter out) { + String loginTemplate = MirConfig.getProp("Mir.LoginTemplate");//"login.template"; + // theLog.printDebugInfo("login template: "+loginTemplate); + String sessionUrl = res.encodeURL(""); + //session = req.getSession(true); + try { + //theLog.printDebugInfo("login: "+lang); + //if(lang==null){ + // lang=getAcceptLanguage(req); + //} + SimpleHash mergeData = new SimpleHash(); + mergeData.put("session", sessionUrl); + HTMLTemplateProcessor.process(res, loginTemplate, mergeData, out, getLocale(req)); + } + catch (HTMLParseException e) { + handleError(req, res, out, "Error in logintemplate."); + } } - } - - private void _sendStartPage(HttpServletResponse res, HttpServletRequest req,PrintWriter out, EntityUsers userEntity) { - String startTemplate = "start_admin.template"; - String sessionUrl=res.encodeURL(""); - try { - // merge with logged in user and messages - SimpleHash mergeData = new SimpleHash(); - mergeData.put("session",sessionUrl); - mergeData.put("login_user", userEntity); - if (messageModule == null) messageModule = new ModuleMessage(DatabaseMessages.getInstance()); - mergeData.put("messages", messageModule.getByWhereClause(null, "webdb_create desc",0,10)); - HTMLTemplateProcessor.process(res, getLanguage(req,session)+"/"+startTemplate, - mergeData, out, req.getLocale()); + + private void _sendStartPage(HttpServletResponse res, HttpServletRequest req, PrintWriter out, EntityUsers userEntity) { + String startTemplate = "admin/start_admin.template"; + String sessionUrl = res.encodeURL(""); + try { + // merge with logged in user and messages + SimpleHash mergeData = new SimpleHash(); + mergeData.put("session", sessionUrl); + mergeData.put("login_user", userEntity); + if (messageModule == null) messageModule = new ModuleMessage(DatabaseMessages.getInstance()); + mergeData.put("messages", messageModule.getByWhereClause(null, "webdb_create desc", 0, 10)); + HTMLTemplateProcessor.process(res, startTemplate, mergeData, out, getLocale(req)); + } + catch (Exception e) { + handleError(req, res, out, "error while trying to send startpage. " + e.toString()); + } } - catch(Exception e) { - handleError(req, res, out, "error while trying to send startpage. " + e.toString()); + + public String getServletInfo() { + return "Mir 1.0 rev02 multilanguage"; } - } - public String getServletInfo(){ return "Mir 1.0 rev02 multilanguage"; } + private void checkLanguage(HttpSession session, HttpServletRequest req) { + // a lang parameter always sets the language + String lang = req.getParameter("lang"); + if (lang != null) { + theLog.printInfo("selected language "+lang+" overrides accept-language"); + setLanguage(session, lang); + setLocale(session, new Locale(lang, "")); + } + // otherwise store language from accept header in session + else if (session.getAttribute("Language") == null) { + theLog.printInfo("accept-language is "+req.getLocale().getLanguage()); + setLanguage(session, req.getLocale().getLanguage()); + setLocale(session, req.getLocale()); + } + } } diff --git a/source/config.properties-dist b/source/config.properties-dist index 5e2ab939..add37ca0 100755 --- a/source/config.properties-dist +++ b/source/config.properties-dist @@ -1,7 +1,7 @@ # # Sample config for Mir # by Matthias 2001-09-12 -# +# # The Mir software realizes a semi-dynamic web service: # The web server that is accessed by users has pure static # pages. These pages are generated by the Mir software that @@ -9,16 +9,16 @@ # Mir uses a database server to store the data that is needed to # build the static site. # So there are basically three parts in this config file: -# +# # a) general setup # b) static site config # c) dynamic admin site # d) database config -# +# # edit this to suit your needs (here with sampleuser idfx) # After you edited this file, build.sh has to be invoked. # To be sure, also restart Tomcat. -# +# # Note that for Mir to work, Tomcat has to be set up to handle all # URLs that begin with /servlet. All other URLs are handled by Apache. # @@ -35,6 +35,7 @@ # GENERAL SETUP # +Mir.Version=pre-1.0 ClearXslCache=no StandardLanguage=de DirectOpenposting=yes @@ -52,7 +53,7 @@ Rsync.Script.Path=/var/www/bin/rsync-copy # the url of the static site Producer.ProductionHost=http://indy.code-fu.de -# The above URL points to the following directory, in which +# The above URL points to the following directory, in which # the generated HTML pages will be stored Producer.StorageRoot=/pub/Dokumente/Indymedia/de-tech/Mir/produced @@ -61,7 +62,7 @@ Producer.StorageRoot=/pub/Dokumente/Indymedia/de-tech/Mir/produced # # -# DYNAMIC SITE CONFIG +# DYNAMIC SITE CONFIG # # the url of the openposting-servlet @@ -105,7 +106,7 @@ Producer.Media.Path=/pub/Dokumente/Indymedia/de-tech/Mir/produced/media # absolute directory, where the realmedia data files(ra and rm) are saved # the ram files which point to the RealMedia.Host get saved in the regular Media dir -# this should make rsyncing to a separate streaming server much easier +# this should make rsyncing to a separate streaming server much easier Producer.RealMedia.Path=/pub/Dokumente/rtsp # relativ directory, where the thumbnails will be saved @@ -181,61 +182,62 @@ HTMLTemplateProcessor.Dir=templates ServletModule.Producer.Logfile=log/producer.log Entity.Logfile=log/dbentity.log - # # Servlet / Module configurations # Mir.Logfile=log/mir.log -Mir.ErrorTemplate=fehler.template +Mir.ErrorTemplate=error.template Mir.UserErrorTemplate=usererror.template +Mir.LoginTemplate=admin/login.template -ServletModule.Schwerpunkt.ConfirmTemplate=confirm.template -ServletModule.Schwerpunkt.ObjektTemplate=schwerpunkt.template -ServletModule.Schwerpunkt.ListTemplate=schwerpunktlist.template +ServletModule.Schwerpunkt.ConfirmTemplate=admin/confirm.template +ServletModule.Schwerpunkt.ObjektTemplate=admin/feature.template +ServletModule.Schwerpunkt.ListTemplate=admin/featurelist.template ServletModule.Schwerpunkt.Logfile=log/mir.log Module.Schwerpunkt.Logfile=log/mir.log -ServletModule.Feature.ConfirmTemplate=confirm.template -ServletModule.Feature.ObjektTemplate=schwerpunkt.template -ServletModule.Feature.ListTemplate=schwerpunktlist.template +ServletModule.Feature.ConfirmTemplate=admin/confirm.template +ServletModule.Feature.ObjektTemplate=admin/schwerpunkt.template +ServletModule.Feature.ListTemplate=admin/schwerpunktlist.template ServletModule.Feature.Logfile=log/mir.log Module.Feature.Logfile=log/mir.log -ServletModule.Themen.ConfirmTemplate=confirm.template -ServletModule.Themen.ObjektTemplate=themen.template -ServletModule.Themen.ListTemplate=themenlist.template +ServletModule.Themen.ConfirmTemplate=admin/confirm.template +ServletModule.Themen.ObjektTemplate=admin/topic.template +ServletModule.Themen.ListTemplate=admin/topiclist.template ServletModule.Themen.Logfile=log/mir.log Module.Themen.Logfile=log/mir.log -ServletModule.LinksImcs.ConfirmTemplate=confirm.template -ServletModule.LinksImcs.ObjektTemplate=linksimcs.template -ServletModule.LinksImcs.ListTemplate=linksimcslist.template +ServletModule.LinksImcs.ConfirmTemplate=admin/confirm.template +ServletModule.LinksImcs.ObjektTemplate=admin/linksimcs.template +ServletModule.LinksImcs.ListTemplate=admin/linksimcslist.template ServletModule.LinksImcs.Logfile=log/mir.log Module.LinksImcs.Logfile=log/mir.log -ServletModule.Users.ConfirmTemplate=confirm.template -ServletModule.Users.ObjektTemplate=users.template -ServletModule.Users.ListTemplate=userslist.template +ServletModule.Users.ConfirmTemplate=admin/confirm.template +ServletModule.Users.ObjektTemplate=admin/user.template +ServletModule.Users.ListTemplate=admin/userlist.template ServletModule.Users.Logfile=log/mir.log Module.Users.Logfile=log/mir.log -ServletModule.Bilder.ConfirmTemplate=confirm.template -ServletModule.Bilder.ObjektTemplate=bilder.template -ServletModule.Bilder.ListTemplate=bilderlist.template +ServletModule.Bilder.ConfirmTemplate=admin/confirm.template +ServletModule.Bilder.ObjektTemplate=admin/image.template +ServletModule.Bilder.ListTemplate=admin/imagelist.template ServletModule.Bilder.Logfile=log/mir.log Module.Bilder.Logfile=log/mir.log -ServletModule.Content.ConfirmTemplate=confirm.template -ServletModule.Content.ObjektTemplate=content.template -ServletModule.Content.OpTemplate=oplist.template -ServletModule.Content.ListTemplate=contentlist.template +ServletModule.Content.ConfirmTemplate=admin/confirm.template +ServletModule.Content.ObjektTemplate=admin/content.template +# is the next line ever used??? dont thinks so [br1] +#ServletModule.Content.OpTemplate=oplist.template +ServletModule.Content.ListTemplate=admin/contentlist.template ServletModule.Content.Logfile=log/mir.log Module.Content.Logfile=log/mir.log -ServletModule.Mediafolder.ConfirmTemplate=confirm.template -ServletModule.Mediafolder.ObjektTemplate=mediafolder.template -ServletModule.Mediafolder.ListTemplate=mediafolderlist.template +ServletModule.Mediafolder.ConfirmTemplate=admin/confirm.template +ServletModule.Mediafolder.ObjektTemplate=admin/mediafolder.template +ServletModule.Mediafolder.ListTemplate=admin/mediafolderlist.template ServletModule.Mediafolder.Logfile=log/mir.log Module.Mediafolder.Logfile=log/mir.log @@ -253,34 +255,35 @@ ServletModule.OpenIndy.Logfile=log/openindy.log # config for ServletModuleComment - browsing/editing/deleting comments Module.Comment.Logfile=log/comment.log ServletModule.Comment.Logfile=log/comment.log -ServletModule.Comment.ConfirmTemplate=confirm.template -ServletModule.Comment.ObjektTemplate=comment.template -ServletModule.Comment.ListTemplate=commentlist.template +ServletModule.Comment.ConfirmTemplate=admin/confirm.template +ServletModule.Comment.ObjektTemplate=admin/comment.template +ServletModule.Comment.ListTemplate=admin/commentlist.template # # config for Breaking - browsing/editing/deleting breaking news Module.Breaking.Logfile=log/breaking.log ServletModule.Breaking.Logfile=log/comment.log -ServletModule.Breaking.ConfirmTemplate=confirm.template -ServletModule.Breaking.ObjektTemplate=breaking.template -ServletModule.Breaking.ListTemplate=breakinglist.template +ServletModule.Breaking.ConfirmTemplate=admin/confirm.template +ServletModule.Breaking.ObjektTemplate=admin/breaking.template +ServletModule.Breaking.ListTemplate=admin/breakinglist.template # # config for messages - browsing/editing/deleting internal messages Module.Messages.Logfile=log/message.log ServletModule.Messages.Logfile=log/comment.log -ServletModule.Messages.ConfirmTemplate=confirm.template -ServletModule.Messages.ObjektTemplate=message.template -ServletModule.Messages.ListTemplate=messagelist.template +ServletModule.Messages.ConfirmTemplate=admin/confirm.template +ServletModule.Messages.ObjektTemplate=admin/message.template +ServletModule.Messages.ListTemplate=admin/messagelist.template # -# config for languages - browsing/editing/deleting internal messages +# config for languages - browsing/editing/deleting languages Module.Language.Logfile=log/message.log ServletModule.Language.Logfile=log/mir.log -ServletModule.Language.ConfirmTemplate=confirm.template -ServletModule.Language.ObjektTemplate=language.template -ServletModule.Language.ListTemplate=languagelist.template +ServletModule.Language.ConfirmTemplate=admin/confirm.template +ServletModule.Language.ObjektTemplate=admin/language.template +ServletModule.Language.ListTemplate=admin/languagelist.template + # # producer-related configs below diff --git a/source/mir/misc/HTMLTemplateProcessor.java b/source/mir/misc/HTMLTemplateProcessor.java index 681f063a..9688a308 100755 --- a/source/mir/misc/HTMLTemplateProcessor.java +++ b/source/mir/misc/HTMLTemplateProcessor.java @@ -224,6 +224,7 @@ public final class HTMLTemplateProcessor { configHash.put("videoHost", new SimpleScalar(videoHost)); configHash.put("audioHost", new SimpleScalar(audioHost)); configHash.put("imageHost", new SimpleScalar(imageHost)); + configHash.put("mirVersion", new SimpleScalar(MirConfig.getProp("Mir.Version"))); // this conform to updated freemarker syntax configHash.put("compressWhitespace", new freemarker.template.utility.CompressWhitespace() ); @@ -232,7 +233,7 @@ public final class HTMLTemplateProcessor { outPutHash.put("config", configHash); MessageResources messages = MessageResources.getMessageResources("admin"); - outPutHash.put("message", new MessageMethodModel(locale, messages) ); + outPutHash.put("lang", new MessageMethodModel(locale, messages) ); tmpl.process(outPutHash,out); } diff --git a/source/mir/misc/MessageMethodModel.java b/source/mir/misc/MessageMethodModel.java index 3abedd77..3ef833ff 100755 --- a/source/mir/misc/MessageMethodModel.java +++ b/source/mir/misc/MessageMethodModel.java @@ -1,88 +1,93 @@ package mir.misc; -import java.util.*; -import freemarker.template.*; -import org.apache.struts.util.*; +import freemarker.template.SimpleScalar; +import freemarker.template.TemplateMethodModel; +import freemarker.template.TemplateModel; +import org.apache.struts.util.MessageResources; + +import java.util.List; +import java.util.Locale; /** * A FreeMarker TemplateMethodModel that provides access to a * Struts MessageResources, for use in Interantionalized templates. * - * TODO: we probably want to be doing some memoizing or something with this class* * @author Kellan - * */ - public class MessageMethodModel implements TemplateMethodModel { - - /** - * The perferred locale for this instance of MessageMethod. - */ - private Locale locale; - - /** - * The MessageResources to query, a single instances shared for - * the lifetime of servlet. - */ - private MessageResources messages; - - - /** - * Construct a MessageMethod that uses the JVM's default locale. - * - * @param message The MessageResources object to query - */ - public MessageMethodModel(MessageResources messages) { - this(null, messages); - } - - /** - * Construct a MessageMethod - * - * @param locale a Locale object, persumably initialized - * from users Accept-Language header field - * - * @param message The MessageResources object to query - */ - public MessageMethodModel(Locale locale, MessageResources messages) { - this.locale = locale; - this.messages = messages; - } - - - /** - * Takes the first argument as a resource key, then looks up - * a string in the MessagesResources, based on that key, and the Locale - * TODO: this is an alpha implementation. We should then check if we have - * any keys left over, and attempt to apply MessageFormat.format. - * TODO: error messages should be i18n :) - * - * @param arguments List passed in by FM, first arguement is a string used as the key - */ - public TemplateModel exec(List arguments) { - if ( arguments != null ) { - String key = (String)arguments.get(0); - String mesg = messages.getMessage(locale, key); - if ( mesg == null ) { - return unknownTagScalar; - } - return new SimpleScalar(mesg); - } else { - return missingKeyScalar; - } - } - - // i'm not real clear on how this is used - kellan :) - public boolean isEmpty() { - if (messages == null) - return true; - else - return false; - } - - private static String errUnknownTag = "TAG NOT FOUND"; - private static String missingKey = "MESSAGE CALL WITHOUT KEY"; - private static SimpleScalar unknownTagScalar = - new SimpleScalar(errUnknownTag); - private static SimpleScalar missingKeyScalar = - new SimpleScalar(missingKey); + +public class MessageMethodModel implements TemplateMethodModel { + + /** + * The perferred locale for this instance of MessageMethod. + */ + private Locale locale; + + /** + * The MessageResources to query, a single instance shared for + * the lifetime of servlet. + */ + private MessageResources messages; + + + /** + * Construct a MessageMethod that uses the JVM's default locale. + * + * @param message The MessageResources object to query + */ + public MessageMethodModel(MessageResources messages) { + this(null, messages); + } + + /** + * Construct a MessageMethod + * + * @param locale a Locale object, persumably initialized + * from users Accept-Language header field + * + * @param message The MessageResources object to query + */ + public MessageMethodModel(Locale locale, MessageResources messages) { + this.locale = locale; + this.messages = messages; + } + + + /** + * Takes the first argument as a resource key, then looks up + * a string in the MessagesResources, based on that key, and the Locale + * + * TODO: error messages should be i18n :) + * + * @param arguments List passed in by FM, first arguement is a string used as the key + * all subsequent arguments are used as described in MessageResources + * (they are filled into the placehoders of the string being returned) + */ + public TemplateModel exec(List arguments) { + if (arguments != null) { + String key = (String) arguments.get(0); + arguments.remove(0); + String mesg = messages.getMessage(locale, key, arguments.toArray()); + + if (mesg == null) { + return new SimpleScalar(errUnknownTag+key); + } + return new SimpleScalar(mesg); + } + else { + return missingKeyScalar; + } + } + + // i'm not real clear on how this is used - kellan :) + public boolean isEmpty() { + if (messages == null) + return true; + else + return false; + } + + private static String errUnknownTag = "MESSAGE NOT FOUND: "; + private static String missingKey = "MESSAGE CALL WITHOUT KEY"; + private static SimpleScalar missingKeyScalar = + new SimpleScalar(missingKey); } diff --git a/source/mir/servlet/AbstractServlet.java b/source/mir/servlet/AbstractServlet.java index 9b3c400a..0bbeb454 100755 --- a/source/mir/servlet/AbstractServlet.java +++ b/source/mir/servlet/AbstractServlet.java @@ -1,18 +1,15 @@ package mir.servlet; +import mir.misc.Logfile; +import mir.misc.MirConfig; +import mir.misc.StringUtil; +import mir.storage.StorageObjectException; + +import javax.servlet.UnavailableException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; -import javax.servlet.UnavailableException; -import java.io.File; import java.util.Locale; -import java.util.HashMap; - -import mir.misc.HTMLTemplateProcessor; -import mir.misc.StringUtil; -import mir.misc.MirConfig; -import mir.misc.Logfile; -import mir.storage.StorageObjectException; /** * Title: Mir @@ -24,74 +21,100 @@ import mir.storage.StorageObjectException; */ public abstract class AbstractServlet extends HttpServlet { - protected static String lang; - protected static Logfile theLog; + protected static String lang; + protected static Logfile theLog; + + /** + * the configration + */ + protected boolean getConfig(HttpServletRequest req) + throws UnavailableException { - /** - * the configration - */ - protected boolean getConfig(HttpServletRequest req) - throws UnavailableException { + String RealPath = super.getServletContext().getRealPath("/"); + String Uri = req.getRequestURI(); + String Name = super.getServletName(); + String RootUri = StringUtil.replace(Uri, "/servlet/" + Name, ""); - String RealPath = super.getServletContext().getRealPath("/"); - String Uri = req.getRequestURI(); - String Name = super.getServletName(); - String RootUri = StringUtil.replace(Uri, "/servlet/" + Name, ""); + // init config + MirConfig.initConfig(RealPath, RootUri, Name, getInitParameter("Config")); - // init config - MirConfig.initConfig(RealPath, RootUri, Name, getInitParameter("Config")); + theLog = Logfile.getInstance(MirConfig.getPropWithHome(Name + ".Logfile")); + theLog.printInfo(Name + " started."); + theLog.printInfo("Path is: " + MirConfig.getProp("Home")); + theLog.printInfo("Root URI is: " + MirConfig.getProp("RootUri")); + theLog.printInfo("StandardLanguage is: " + MirConfig.getProp("StandardLanguage")); + try { + MirConfig.initDbPool(); + } + catch (StorageObjectException e) { + throw new UnavailableException( + "Could not initialize database pool. -- " + + e.toString(), 0); + } + super.getServletContext().setAttribute("mir.confed", new Boolean(true)); + return true; + } + + /** + * Bind the language to the session + */ + protected void setLanguage(HttpSession session, String language) { + session.setAttribute("Language", language); + } - theLog = Logfile.getInstance(MirConfig.getPropWithHome(Name+".Logfile")); - theLog.printInfo(Name + " started."); - theLog.printInfo("Path is: " + MirConfig.getProp("Home")); - theLog.printInfo("Root URI is: " + MirConfig.getProp("RootUri")); - theLog.printInfo("Lang is: " + MirConfig.getProp("StandardLanguage")); - try { - MirConfig.initDbPool(); - } catch ( StorageObjectException e) { - throw new UnavailableException( - "Could not initialize database pool. -- " - + e.toString(), 0); + protected void setLocale(HttpSession session, Locale loc) { + session.setAttribute("Locale", loc); } - super.getServletContext().setAttribute("mir.confed", new Boolean(true)); - return true; - } - /** - * Bind the language to the session - */ - protected void setLanguage(HttpSession session, String language){ - session.setAttribute("Language",language); - } + /** + * Get the session-bound language + */ + protected String getLanguage(HttpServletRequest req, HttpSession session) { + String lang = (String) session.getAttribute("Language"); + if (lang == null || lang.equals("")) { + return getAcceptLanguage(req); + } + else { + return lang; + } + } - /** - * Get the session-bound language - */ - protected String getLanguage(HttpServletRequest req, HttpSession session){ - String lang = (String)session.getAttribute("Language"); - if(lang==null || lang.equals("")){ - return getAcceptLanguage(req); - } else { - return lang; + /** + * get the locale either from the session or the accept-language header ot the request + * this supersedes getLanguage for the new i18n + */ + public Locale getLocale(HttpServletRequest req) { + Locale loc=null; + HttpSession session = req.getSession(false); + if (session!=null) { + // session can be null in case of logout + loc = (Locale) session.getAttribute("Locale"); + } + // if there is nothing in the session get it fron the accept-language + if (loc == null) { + loc = req.getLocale(); + } + return loc; } - } - /** - * Checks the Accept-Language of the client browser. - * If this language is available it returns its country-code, - * else it returns the standard-language - */ - protected String getAcceptLanguage(HttpServletRequest req){ - Locale loc = req.getLocale(); - lang = loc.getLanguage(); - File f = new File(HTMLTemplateProcessor.templateDir+"/"+lang); - //is there an existing template-path? - if(!f.isDirectory()){ - //no there isn't. we use standard-language - lang = MirConfig.getProp("StandardLanguage"); - theLog.printDebugInfo("language not existing"); + /** + * Checks the Accept-Language of the client browser. + * If this language is available it returns its country-code, + * else it returns the standard-language + */ + protected String getAcceptLanguage(HttpServletRequest req) { + Locale loc = req.getLocale(); + lang = loc.getLanguage(); + /* not needed anymore due to new i18n + File f = new File(HTMLTemplateProcessor.templateDir+"/"+lang); + //is there an existing template-path? + if(!f.isDirectory()){ + //no there isn't. we use standard-language + lang = MirConfig.getProp("StandardLanguage"); + theLog.printDebugInfo("language not existing"); + } + theLog.printDebugInfo("Language: " + lang); + */ + return lang; } - theLog.printDebugInfo("Language: " + lang); - return lang; - } } diff --git a/source/mir/servlet/ServletModule.java b/source/mir/servlet/ServletModule.java index 7d076bf9..84e87bc2 100755 --- a/source/mir/servlet/ServletModule.java +++ b/source/mir/servlet/ServletModule.java @@ -1,16 +1,22 @@ -package mir.servlet; +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.*; +import freemarker.template.SimpleHash; +import freemarker.template.TemplateModelRoot; +import mir.entity.EntityList; +import mir.misc.*; +import mir.module.AbstractModule; +import mir.module.ModuleException; +import mir.storage.StorageObject; +import mir.storage.StorageObjectException; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; +import java.io.IOException; +import java.io.PrintWriter; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Locale; /** @@ -28,336 +34,376 @@ import mir.misc.*; public abstract class ServletModule { - public String defaultAction; - protected Logfile theLog; - protected AbstractModule mainModule; - protected String templateListString; - protected String templateObjektString; - protected String templateConfirmString; + 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; } + /** + * 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(false); - String language = (String)session.getAttribute("Language"); - if(language==null){ - language=MirConfig.getProp("StandardLanguage"); + /** + * get the session binded language + */ + public String getLanguage(HttpServletRequest req) { + HttpSession session = req.getSession(false); + String language = (String) session.getAttribute("Language"); + if (language == null) { + language = MirConfig.getProp("StandardLanguage"); + } + return language; } - return language; - } - // ACHTUNG DEPRECATED:::: - public void process(HttpServletRequest req, HttpServletResponse res) throws ServletModuleException {} + /** + * get the locale either from the session or the accept-language header ot the request + * this supersedes getLanguage for the new i18n + */ + public Locale getLocale(HttpServletRequest req) { + Locale loc = null; + HttpSession session = req.getSession(false); + if (session != null) { + // session can be null in case of logout + loc = (Locale) session.getAttribute("Locale"); + } + // if there is nothing in the session get it fron the accept-language + if (loc == null) { + loc = req.getLocale(); + } + return loc; + } + // 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(); + /** + * 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,req.getLocale()); - } else { - deliver(req, res, theList.elementAt(0), templateObjektString); - } - } catch (Exception e) { - throw new ServletModuleException(e.toString()); + // 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, templateListString, theList, out, getLocale(req)); + } + 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 { + /** + * 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()); + 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, ServletModuleUserException { - try { - HashMap withValues = getIntersectingValues(req, mainModule.getStorageObject()); - theLog.printDebugInfo("--trying to add..."); - String id = mainModule.add(withValues); - theLog.printDebugInfo("--trying to deliver..."+id); - list(req,res); - } 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, ServletModuleUserException { + try { + HashMap withValues = getIntersectingValues(req, mainModule.getStorageObject()); + theLog.printDebugInfo("--trying to add..."); + String id = mainModule.add(withValues); + theLog.printDebugInfo("--trying to deliver..." + id); + list(req, res); + } + 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 - */ + /** + * 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); + 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()); } - } - } 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()); + /** + * 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 - */ + /** + * 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()); + 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()); - } - } - */ + // 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, req.getLocale()); - 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 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,getLanguage(req)+"/"+templateFilename, rtm , out, req.getLocale()); - 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 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, templateFilename, rtm, out, getLocale(req)); + 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 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, req.getLocale()); - } + /** + * 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.toString()); + } + catch (IOException e) { + throw new ServletModuleException(e.toString()); + } + } - /** - * 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; } + /** + * 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)); + } /** - * 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) { ; } + * 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; + } - /** - * 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()); + /** + * 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) { + ; } - HashMap withValues = new HashMap(); - String aField, aValue; + /** + * 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; i1){ - HTMLTemplateProcessor.process(res,getLanguage(req)+"/"+templateObjektString, - modelRoot, res.getWriter(), req.getLocale()); + HTMLTemplateProcessor.process(res, templateObjektString, modelRoot, res.getWriter(), getLocale(req)); } else { deliver(req, res, modelRoot, templateObjektString); } @@ -150,8 +149,7 @@ public class ServletModuleLinksImcs extends ServletModule if (theImcsList.hasPrevBatch()) modelRoot.put("prev", (new Integer(theImcsList.getPrevBatch())).toString()); - HTMLTemplateProcessor.process(res,getLanguage(req)+"/"+templateListString, - modelRoot, res.getWriter(), req.getLocale()); + HTMLTemplateProcessor.process(res, templateListString, modelRoot, res.getWriter(), getLocale(req)); } catch (Exception e) { throw new ServletModuleException(e.toString()); diff --git a/source/mircoders/servlet/ServletModuleMessage.java b/source/mircoders/servlet/ServletModuleMessage.java index 4057c08b..f9b8a935 100755 --- a/source/mircoders/servlet/ServletModuleMessage.java +++ b/source/mircoders/servlet/ServletModuleMessage.java @@ -68,8 +68,7 @@ public class ServletModuleMessage extends ServletModule mergeData.put("prev", (new Integer(theList.getPrevBatch())).toString()); // raus damit - HTMLTemplateProcessor.process(res,getLanguage(req)+"/"+templateListString, - mergeData, res.getWriter(), req.getLocale()); + HTMLTemplateProcessor.process(res, templateListString, mergeData, res.getWriter(), getLocale(req)); } catch (ModuleException e) {throw new ServletModuleException(e.toString());}