X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=source%2Fmir%2Fmisc%2FHTMLTemplateProcessor.java;h=f517a3ce0af9cfa80b023709b7187d5ff23103f3;hb=e1f215ca7e06db66dd267485f373a08182957e98;hp=3d6e40ce5efe17358de55c54d05c5e8f43505f72;hpb=bec1ab257c7704def8631f7c65036fda47941264;p=mir.git diff --git a/source/mir/misc/HTMLTemplateProcessor.java b/source/mir/misc/HTMLTemplateProcessor.java index 3d6e40ce..f517a3ce 100755 --- a/source/mir/misc/HTMLTemplateProcessor.java +++ b/source/mir/misc/HTMLTemplateProcessor.java @@ -1,8 +1,34 @@ /* - * put your module comment here + * Copyright (C) 2001, 2002 The Mir-coders group + * + * This file is part of Mir. + * + * Mir is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * Mir is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Mir; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * In addition, as a special exception, The Mir-coders gives permission to link + * the code of this program with the com.oreilly.servlet library, any library + * licensed under the Apache Software License, The Sun (tm) Java Advanced + * Imaging library (JAI), The Sun JIMI library (or with modified versions of + * the above that use the same license as the above), and distribute linked + * combinations including the two. You must obey the GNU General Public + * License in all respects for all of the code used other than the above + * mentioned libraries. If you modify this file, you may extend this exception + * to your version of the file, but you are not obligated to do so. If you do + * not wish to do so, delete this exception statement from your version. */ - package mir.misc; import java.lang.*; @@ -13,6 +39,7 @@ import freemarker.template.*; import mir.entity.*; import mir.storage.*; import javax.servlet.http.*; +import org.apache.struts.util.MessageResources; /** @@ -29,32 +56,50 @@ public final class HTMLTemplateProcessor { private static String audioHost; private static String videoHost; private static String imageHost; + private static String imagePath; private static String openAction; - protected static String producerDocRoot = MirConfig.getProp("Producer.DocRoot"); - protected static String producerStorageRoot = MirConfig.getProp("Producer.StorageRoot"); - + private static String defEncoding; + private static String generateFO; + private static String generatePDF; + protected static String producerDocRoot = + MirConfig.getProp("Producer.DocRoot"); + protected static String producerStorageRoot = + MirConfig.getProp("Producer.StorageRoot"); // // init static { - + /** @todo either in the above block or here :) //rk */ templateDir = MirConfig.getPropWithHome("HTMLTemplateProcessor.Dir"); templateCache = new FileTemplateCache(templateDir); templateCache.setLoadingPolicy(templateCache.LOAD_ON_DEMAND); - templateCache.startAutoUpdate(); + // gone in freemarker 1.7.1 + // templateCache.startAutoUpdate(); theLog = Logfile.getInstance(MirConfig.getPropWithHome("HTMLTemplateProcessor.Logfile")); docRoot = MirConfig.getProp("RootUri"); - actionRoot = docRoot + "/servlet/" + MirConfig.getProp("ServletName"); - + //the quick hack is back in effect as it was more broken than ever before + // -mh + // sorry: nadir back in town, i have to debug the mirbase.jar in the + // nadir evironment. from my point of coding, this needs an urgent + // fixxx. + // yeah, from my point too - tob. + //actionRoot = docRoot + "/servlet/" + MirConfig.getProp("ServletName"); + //actionRoot = docRoot + "/servlet/NadirAktuell"; + + actionRoot = docRoot + "/Mir"; + + defEncoding = MirConfig.getProp("Mir.DefaultEncoding"); openAction = MirConfig.getProp("Producer.OpenAction"); productionHost = MirConfig.getProp("Producer.ProductionHost"); videoHost = MirConfig.getProp("Producer.VideoHost"); audioHost = MirConfig.getProp("Producer.AudioHost"); imageHost = MirConfig.getProp("Producer.Image.Host"); + imagePath = MirConfig.getProp("Producer.Image.Path"); producerDocRoot = MirConfig.getProp("Producer.DocRoot"); producerStorageRoot = MirConfig.getProp("Producer.StorageRoot"); - + generateFO = MirConfig.getProp("GenerateFO"); + generatePDF = MirConfig.getProp("GeneratePDF"); } /** @@ -95,9 +140,10 @@ public final class HTMLTemplateProcessor { * @param out * @exception HTMLParseException */ - public static void process(HttpServletResponse res,String templateFilename, EntityList entList, PrintWriter out) - throws HTMLParseException { - process(res, templateFilename, entList, (String)null, (TemplateModelRoot)null, out); + public static void process(HttpServletResponse res,String templateFilename, + EntityList entList, PrintWriter out, Locale locale) + throws HTMLParseException { + process(res, templateFilename, entList, (String)null, (TemplateModelRoot)null, out, locale); } /** @@ -113,14 +159,16 @@ public final class HTMLTemplateProcessor { * @param out * @exception HTMLParseException */ - public static void process(HttpServletResponse res,String templateFilename, EntityList entList, String additionalModelName, - TemplateModelRoot additionalModel, PrintWriter out) + public static void process(HttpServletResponse res,String templateFilename, + EntityList entList, String additionalModelName, + TemplateModelRoot additionalModel, PrintWriter out, + Locale locale) throws HTMLParseException { SimpleHash modelRoot = new SimpleHash(); if (entList == null) { - process(null,templateFilename, modelRoot, out); + process(null,templateFilename, modelRoot, out, locale); } else { try { modelRoot = makeSimpleHashWithEntitylistInfos(entList); @@ -129,7 +177,7 @@ public final class HTMLTemplateProcessor { if (additionalModelName != null && additionalModel != null) modelRoot.put(additionalModelName, additionalModel); - process(res,templateFilename, modelRoot, out); + process(res,templateFilename, modelRoot, out, locale); } catch (StorageObjectException e) { throw new HTMLParseException(e.toString()); } @@ -142,13 +190,14 @@ public final class HTMLTemplateProcessor { * out * * @param templateFilename - * @param mergeData + * @param mergeData - a HashMap with mergeData to be converted in SimpleHash * @param out * @exception HTMLParseException */ - public static void process(HttpServletResponse res,String templateFilename, HashMap mergeData, PrintWriter out) + public static void process(HttpServletResponse res,String templateFilename, + HashMap mergeData, PrintWriter out, Locale locale) throws HTMLParseException { - process(res,templateFilename, makeSimpleHash(mergeData), out); + process(res,templateFilename, makeSimpleHash(mergeData), out, locale); } /** @@ -160,13 +209,14 @@ public final class HTMLTemplateProcessor { * @param out * @exception HTMLParseException */ - public static void process(String templateFilename, PrintWriter out) + public static void process(String templateFilename, PrintWriter out, + Locale locale) throws HTMLParseException { - process(null,templateFilename, (TemplateModelRoot)null, out); + process(null,templateFilename, (TemplateModelRoot)null, out, locale); } - /** + /** * Mischt die freemarker-Struktur tmr mit * Template templateFilename und gibt das Ergebnis an den PrintWriter * out @@ -176,54 +226,96 @@ public final class HTMLTemplateProcessor { * @param out * @exception HTMLParseException */ - public static void process(HttpServletResponse res,String templateFilename, TemplateModelRoot tmr, PrintWriter out) - throws HTMLParseException { - if (out==null) throw new HTMLParseException("no outputstream"); - Template tmpl = getTemplateFor(templateFilename); - if (tmpl == null) throw new HTMLParseException("no template: " + templateFilename); - if (tmr==null) tmr = new SimpleHash(); - - /** @todo what is this for? (rk) */ - String session=null; - if (res!=null) { - session=res.encodeURL(""); - } + public static void process(HttpServletResponse res,String templateFilename, + TemplateModelRoot tmr, PrintWriter out, Locale locale) + throws HTMLParseException { + process(res,templateFilename,tmr,null,out,locale); - // put standard configuration into tempalteRootmodel - SimpleHash configHash = new SimpleHash(); - configHash.put("docroot", new SimpleScalar(producerDocRoot)); - configHash.put("storageroot", new SimpleScalar(producerStorageRoot)); - configHash.put("productionhost", new SimpleScalar(productionHost)); - configHash.put("openaction", new SimpleScalar(openAction)); - configHash.put("actionRootLogin",new SimpleScalar(actionRoot)); + } - - tmr.put("docRoot", new SimpleScalar(docRoot)); - tmr.put("now", new SimpleScalar(StringUtil.date2readableDateTime(new GregorianCalendar()))); - tmr.put("actionRoot", new SimpleScalar(actionRoot+session)); - tmr.put("openAction", new SimpleScalar(openAction)); - tmr.put("productionHost", new SimpleScalar(productionHost)); - tmr.put("videoHost", new SimpleScalar(videoHost)); - tmr.put("audioHost", new SimpleScalar(audioHost)); - tmr.put("imageHost", new SimpleScalar(imageHost)); - - tmr.put("config", configHash); - tmpl.process(tmr, out); - - } + /** + * Mischt die freemarker-Struktur tmr mit + * Template templateFilename und gibt das Ergebnis an den PrintWriter + * out + * + * @param templateFilename + * @param mergeData + * @param out + * @exception HTMLParseException + */ + public static void process(HttpServletResponse res,String templateFilename, + TemplateModelRoot tmr, TemplateModelRoot extra, + PrintWriter out, Locale locale) + throws HTMLParseException { + if (out==null) throw new HTMLParseException("no outputstream"); + Template tmpl = getTemplateFor(templateFilename); + if (tmpl == null) throw new HTMLParseException("no template: " + templateFilename); + if (tmr==null) tmr = new SimpleHash(); + + /** @todo what is this for? (rk) */ + String session=""; + if (res!=null) { + session=res.encodeURL(""); + } + + // @todo wouldn't it be so much easier to just pass the whole damn config + // Hash here from Mirconfig... ??????? than we could access arbitrary config + // values in the templates. -mh + // put standard configuration into tempalteRootmodel + SimpleHash configHash = new SimpleHash(); + configHash.put("defEncoding", new SimpleScalar(defEncoding)); + configHash.put("producerDocRoot", new SimpleScalar(producerDocRoot)); + configHash.put("storageRoot", new SimpleScalar(producerStorageRoot)); + configHash.put("productionHost", new SimpleScalar(productionHost)); + configHash.put("openAction", new SimpleScalar(openAction)); + configHash.put("actionRootLogin",new SimpleScalar(actionRoot)); + configHash.put("docRoot", new SimpleScalar(docRoot)); + configHash.put("now", new SimpleScalar(StringUtil.date2readableDateTime(new GregorianCalendar()))); + configHash.put("actionRoot", new SimpleScalar(actionRoot+session)); + configHash.put("videoHost", new SimpleScalar(videoHost)); + configHash.put("audioHost", new SimpleScalar(audioHost)); + configHash.put("imageHost", new SimpleScalar(imageHost)); + configHash.put("imagePath", new SimpleScalar(imagePath)); + configHash.put("mirVersion", new SimpleScalar(MirConfig.getProp("Mir.Version"))); + // this conform to updated freemarker syntax + configHash.put("compressWhitespace", new freemarker.template.utility.CompressWhitespace() ); + configHash.put("generateFO", new SimpleScalar(generateFO)); + configHash.put("generatePDF", new SimpleScalar(generatePDF)); + + SimpleHash outPutHash = new SimpleHash(); + + if(extra!=null){ + outPutHash.put("extra",extra); + try{ + while(((SimpleList)extra).hasNext()){ + theLog.printDebugInfo(((SimpleList)extra).next().toString()); + } + }catch(Exception e){} + } + outPutHash.put("data",tmr); + outPutHash.put("config", configHash); + + MessageResources messages = MessageResources.getMessageResources("bundles.admin"); + outPutHash.put("lang", new MessageMethodModel(locale, messages) ); + + tmpl.process(outPutHash,out); + } /** - * Wandelt eine Entity-Liste in eine SimpleList von SimpleHashes um. + * Converts Entity-List to SimpleList of SimpleHashes. * @param aList ist eine Liste von Entity * @return eine freemarker.template.SimpleList von SimpleHashes. + * + * @deprecated EntityLists comply with TemplateListModel now. */ public static SimpleList makeSimpleList(EntityList aList) throws StorageObjectException { - SimpleList simpleList = new SimpleList(); + theLog.printWarning("## using deprecated makeSimpleList(entityList) - a waste of resources"); + SimpleList simpleList = new SimpleList(); if (aList != null) { - for(int i=0;i"); - return null; - } + public static SimpleHash makeSimpleHash(Entity entity) { + if (entity != null) { + theLog.printWarning("## using deprecated makeSimpleHash(entity) - a waste of resources"); + return makeSimpleHash(entity.getValues()); } + else + return null; + } /** * Konvertiert ein Hashtable mit den keys und values als String @@ -290,37 +385,38 @@ public final class HTMLTemplateProcessor { /** - * Wandelt EntityListe in SimpleHash um, und versieht die Liste mit StandardInfos, - * die aus EntityList kommen. + * Converts EntityList in SimpleHash and adds additional information + * to the returned SimpleHash * * @param entList - * @return SimpleHash mit Entity-Daten und ZusatzInfos. + * @return SimpleHash returns SimpleHash with the converted EntityList plus + * additional Data about the list. * @exception StorageObjectException */ - public static SimpleHash makeSimpleHashWithEntitylistInfos(EntityList entList) throws StorageObjectException { - SimpleHash modelRoot = new SimpleHash(); - if (entList!=null) { - modelRoot.put("contentlist", makeSimpleList(entList)); - modelRoot.put("count", new SimpleScalar((new Integer(entList.getCount())).toString())); - if (entList.getWhere()!=null) { - modelRoot.put("where", new SimpleScalar(entList.getWhere())); - modelRoot.put("where_encoded", new SimpleScalar(URLEncoder.encode(entList.getWhere()))); - } - - if(entList.getOrder()!=null) { - modelRoot.put("order", new SimpleScalar(entList.getOrder())); - modelRoot.put("order_encoded", new SimpleScalar(URLEncoder.encode(entList.getOrder()))); - } - modelRoot.put("from", new SimpleScalar((new Integer(entList.getFrom())).toString())); - modelRoot.put("to", new SimpleScalar((new Integer(entList.getTo())).toString())); - - if (entList.hasNextBatch()) - modelRoot.put("next", new SimpleScalar((new Integer(entList.getNextBatch())).toString())); - if (entList.hasPrevBatch()) - modelRoot.put("prev", new SimpleScalar((new Integer(entList.getPrevBatch())).toString())); + + public static SimpleHash makeSimpleHashWithEntitylistInfos(EntityList entList) throws StorageObjectException { + SimpleHash modelRoot = new SimpleHash(); + if (entList!=null) { + modelRoot.put("contentlist", entList); + modelRoot.put("count", new SimpleScalar((new Integer(entList.getCount())).toString())); + if (entList.getWhere()!=null) { + modelRoot.put("where", new SimpleScalar(entList.getWhere())); + modelRoot.put("where_encoded", new SimpleScalar(URLEncoder.encode(entList.getWhere()))); + } + if(entList.getOrder()!=null) { + modelRoot.put("order", new SimpleScalar(entList.getOrder())); + modelRoot.put("order_encoded", new SimpleScalar(URLEncoder.encode(entList.getOrder()))); } - return modelRoot; + modelRoot.put("from", new SimpleScalar((new Integer(entList.getFrom())).toString())); + modelRoot.put("to", new SimpleScalar((new Integer(entList.getTo())).toString())); + + if (entList.hasNextBatch()) + modelRoot.put("next", new SimpleScalar((new Integer(entList.getNextBatch())).toString())); + if (entList.hasPrevBatch()) + modelRoot.put("prev", new SimpleScalar((new Integer(entList.getPrevBatch())).toString())); } + return modelRoot; + } /** * Private methods to get template from a templateFilename @@ -330,11 +426,17 @@ public final class HTMLTemplateProcessor { */ private static Template getTemplateFor(String templateFilename) throws HTMLParseException { - if (templateFilename!=null) return templateCache.getTemplate(templateFilename); - else { + Template returnTemplate = null; + if (templateFilename!=null) + returnTemplate = (Template)templateCache.getItem(templateFilename,"template"); + + + if (returnTemplate==null) { theLog.printError("CACHE (ERR): Unknown template: " + templateFilename); throw new HTMLParseException("Templatefile: "+ templateFilename + " not found."); } + + return returnTemplate; } public static void stopAutoUpdate(){