[opencms-dev] problems with own class after publishing

Petr Hollay ph at ethikom.de
Mon Sep 2 18:12:57 CEST 2002


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