[opencms-dev] problems with own class after publishing

Petr Hollay ph at ethikom.de
Mon Sep 2 19:27:40 CEST 2002


It's simple, default settings of CmsXmlTemplate are fine for rather static
pages.
But if you want to use your own class as a base class for use in more pages
with dynamic content,
you need to disable caching or better try to setup caching properly for
different types of pages.

For example see getCacheDirectives() in class com.opencms.defaults.CmsXmlNav

Complete disabling of element caching will _really_ make your system slow.

Regards
Petr


-----Original Message-----
From: owner-opencms-dev at www.opencms.org
[mailto:owner-opencms-dev at www.opencms.org]On Behalf Of Reichmann,
Clemens
Sent: Monday, September 02, 2002 4:59 PM
To: 'opencms-dev at www.opencms.org'
Subject: [opencms-dev] problems with own class after publishing


Hi,

thanks Petr for the hint.
I disabled the cache by
   public CmsCacheDirectives getCacheDirectives(CmsObject cms,
                                                 String templateFile, String
elementName,
                                                 Hashtable parameters,
String templateSelector) {
       return new CmsCacheDirectives(false);
}
and now it works fine. Thanks a lot. But I didn't understand why I can't use
the caching mechanism inherited by
com.opencms.template.CmsXmlTemplate cause there it works fine without my
extensions.

Regards
Clemens


> -----Ursprüngliche Nachricht-----
> Von: Petr Hollay [mailto:ph at ethikom.de]
> Gesendet: Montag, 2. September 2002 18:13
> An: opencms-dev at www.opencms.org
> Betreff: RE: [opencms-dev] problems with own class after publishing
>
>
> Hi,
>
> you have to configure element caching by overriding
> getCacheDirectives()
> method for dynamic pages. Are you doing this?
>
> Regards
> Petr
>
>
> -----Original Message-----
> From: owner-opencms-dev at www.opencms.org
> [mailto:owner-opencms-dev at www.opencms.org]On Behalf Of Reichmann,
> Clemens
> Sent: Monday, September 02, 2002 4:07 PM
> To: 'opencms-dev at www.opencms.org'
> Subject: [opencms-dev] problems with own class after publishing
>
>
> Hi,
>
> we have extended the 'com.opencms.template.CmsXmlTemplate'
> class. The result
> is an own class called 'ITIVCmsXmlTemplate' (which contains
> among others a
> possiblity to request the last modification date) and a redirect for
> download resources.
> In the preview of OpenCMS all works fine, but after
> publishing the output
> (i.ex. of the file date) isn't correct. It seems that the
> system is not
> useing our class.
>
> Can anybody help?
>
> Regards
> Clemens
>
>
> ------------------------------------------
> here is the mastertemplate:
>
> <?xml version="1.0"?>
> <XMLTEMPLATE>
> <ELEMENTDEF name="contenttemplate">
> 	<CLASS>ITIVCmsXmlTemplate</CLASS>
> 	<TEMPLATE>/content/contenttemplates/contenttemplate</TEMPLATE>
> </ELEMENTDEF>
> <ELEMENTDEF name="frametemplate">
> 	<CLASS>ITIVCmsXmlTemplate</CLASS>
> 	<TEMPLATE>/content/frametemplates/frametemplate</TEMPLATE>
> </ELEMENTDEF>
> <TEMPLATE><ELEMENT name="frametemplate"/></TEMPLATE>
> </XMLTEMPLATE>
>
> --------------------------------------------
> here is the control code of a page which uses the own class:
>
> <?xml version="1.0" encoding="ISO-8859-1"?>
> <PAGE>
>     <class>com.opencms.template.CmsXmlTemplate</class>
>
> <masterTemplate>/content/templates/mastertemplate_news_level1<
> /masterTemplat
> e>
>     <ELEMENTDEF name="body">
>         <CLASS>ITIVCmsXmlTemplate</CLASS>
>         <TEMPLATE>/content/bodys/de/index.html</TEMPLATE>
>     </ELEMENTDEF>
>     <ELEMENTDEF name="news">
>         <CLASS>com.opencms.modules.homepage.news.NewsTemplate</CLASS>
>         <TEMPLATE>/content/elements/news</TEMPLATE>
>         <PARAMETER name="channelid">1</PARAMETER>
>     </ELEMENTDEF>
> </PAGE>
>
>
> --------------------------------------------
> here is the java code:
>
> /*
>  * ITIVCmsXmlTemplate.java
>  *
>  * Created on 24. August 2002, 15:38
>  */
>
> import com.opencms.core.CmsException;
> import com.opencms.file.CmsFile;
> import com.opencms.file.CmsObject;
> import com.opencms.template.CmsXmlTemplate;
> import com.opencms.template.CmsXmlTemplateFile;
>
> import java.text.DateFormat;
> import java.text.Format;
> import java.util.Date;
> import java.util.Hashtable;
> import java.util.Locale;
>
> /**
>  * EXTENDS THE DEFULT TEMPLATE
>  * @author Clemens Reichmann
>  * @version 1.0
>  */
> public class ITIVCmsXmlTemplate extends CmsXmlTemplate {
>   private final String _STRINGCHANGE = "<a
> href=\"/opencms/opencms/download/";
>   private final String _REPLACE = "<a href=\"/download/";
>
>   /**
>    * Extends the default template rendering:
>    * 1.) if there is a link to download so opencms/opencms is deleted.
>    * 2.) time and date is set u in the properties
>    * @param cms siehe OpenCMS Doku
>    * @param templateFile siehe OpenCMS Doku
>    * @param elementName siehe OpenCMS Doku
>    * @param parameters siehe OpenCMS Doku
>    * @param templateSelector siehe OpenCMS Doku
>    * @throws CmsException siehe OpenCMS Doku
>    * @return siehe OpenCMS Doku
>    */
>   public byte[] getContent(CmsObject cms, String templateFile, String
> elementName, Hashtable parameters, String templateSelector) throws
> CmsException {
>     CmsXmlTemplateFile templateDocument =
> setLastModifiedProperties(cms,
> templateFile, elementName, parameters, templateSelector);
>     byte[] array = startProcessing(cms, templateDocument, elementName,
> parameters, templateFile);
>     String tmp = replaceOpenCmsOpenCms4DownloadArea(array);
>     return tmp.getBytes();
>   }
>
>   /**
>    * replace /download/opencms/opencms/ with /download/
>    * @param theArray
>    * @return
>    */
>   private String replaceOpenCmsOpenCms4DownloadArea(byte[] theArray) {
>     String tmp = new String(theArray);
>     while (tmp.indexOf(_STRINGCHANGE) != -1) {
>       int index = tmp.indexOf(_STRINGCHANGE);
>       tmp = tmp.substring(0, index) + _REPLACE + tmp.substring(index +
> _STRINGCHANGE.length());
>     }
>     return tmp;
>   }
>
>   /**
>    * Set last modified properties
>    * @param cms
>    * @param templateFile
>    * @param elementName
>    * @param parameters
>    * @param templateSelector
>    * @return
>    * @throws CmsException
>    */
>   private CmsXmlTemplateFile
> setLastModifiedProperties(CmsObject cms, String
> templateFile, String elementName, Hashtable parameters, String
> templateSelector) throws CmsException {
>     // get time + date format
>     Locale german = new Locale("DE", "de");
>     Format fmt_de =
> DateFormat.getTimeInstance(DateFormat.SHORT, german);
>     Format fmd_de =
> DateFormat.getDateInstance(DateFormat.LONG, german);
>     Locale eng = new Locale("EN", "en");
>     Format fmt_en = DateFormat.getTimeInstance(DateFormat.SHORT, eng);
>     Format fmd_en = DateFormat.getDateInstance(DateFormat.LONG, eng);
>
>     // read last modified date from file
>     String tUri = cms.getRequestContext().getUri();
>     CmsFile tFile = cms.readFile(tUri);
>     Date lastmod = new Date(tFile.getDateLastModified());
>
>     // write formatted output to data elements
>     String tTime_de = fmt_de.format(lastmod);
>     String tDate_de = fmd_de.format(lastmod);
>     String tTime_en = fmt_en.format(lastmod);
>     String tDate_en = fmd_en.format(lastmod);
>
>     CmsXmlTemplateFile templateDocument = getOwnTemplateFile(cms,
> templateFile, elementName, parameters, templateSelector);
>     templateDocument.setData("zeit", tTime_de);
>     templateDocument.setData("datum", tDate_de);
>     templateDocument.setData("time", tTime_en);
>     templateDocument.setData("date", tDate_en);
>     return templateDocument;
>   }
>
>   /**
>    * TEST
>    * @param args
>    */
>   public static void main(String[] args) {
>     String STRINGCHANGE = "<a href=\"/opencms/opencms/download/";
>     String REPLACE = "<a href=\"/download/";
>     String original = ("hällo#und&<>" + STRINGCHANGE + " bal ö blub" +
> STRINGCHANGE + "hi <a href=\"/opencms/opencms/sel");
>     byte[] b = original.getBytes();
>     String tmp = new String(b);
>     System.out.println("[ITIVCmsXmlTemplate.main] 0=" + original);
>     System.out.println("[ITIVCmsXmlTemplate.main] s=" + tmp);
>     while (tmp.indexOf(STRINGCHANGE) != -1) {
>       int index = tmp.indexOf(STRINGCHANGE);
>       tmp = tmp.substring(0, index) + REPLACE + tmp.substring(index +
> STRINGCHANGE.length());
>     }
>     System.out.println("[ITIVCmsXmlTemplate.main] r=" + tmp);
>   }
> } // end of class
>
> Dipl.-Ing. Clemens Reichmann
> Universität Karlsruhe (ITIV Gebäude 30.10)
> Engesserstr. 5
> 76131 Karlsruhe
> Tel:  +49 721 608-7659
> Fax: +49 721 60 74 38
> mailto:reichmann at itiv.uni-karlsruhe.de
> http://www.itiv.uni-karlsruhe.de
>
>




More information about the opencms-dev mailing list