MelatiWebmacroStringWriter.java

  1. /*
  2.  * $Source$
  3.  * $Revision$
  4.  *
  5.  * Copyright (C) 2003 Jim Wright - Bohemian Enterprise
  6.  *
  7.  * Part of Melati (http://melati.org), a framework for the rapid
  8.  * development of clean, maintainable web applications.
  9.  *
  10.  * Melati is free software; Permission is granted to copy, distribute
  11.  * and/or modify this software under the terms either:
  12.  *
  13.  * a) the GNU General Public License as published by the Free Software
  14.  *    Foundation; either version 2 of the License, or (at your option)
  15.  *    any later version,
  16.  *
  17.  *    or
  18.  *
  19.  * b) any version of the Melati Software License, as published
  20.  *    at http://melati.org
  21.  *
  22.  * You should have received a copy of the GNU General Public License and
  23.  * the Melati Software License along with this program;
  24.  * if not, write to the Free Software Foundation, Inc.,
  25.  * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA to obtain the
  26.  * GNU General Public License and visit http://melati.org to obtain the
  27.  * Melati Software License.
  28.  *
  29.  * Feel free to contact the Developers of Melati (http://melati.org),
  30.  * if you would like to work out a different arrangement than the options
  31.  * outlined here.  It is our intention to allow Melati to be used by as
  32.  * wide an audience as possible.
  33.  *
  34.  * This program is distributed in the hope that it will be useful,
  35.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  36.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  37.  * GNU General Public License for more details.
  38.  *
  39.  * Contact details for copyright holder:
  40.  *
  41.  *     Jim Wright <jimw At paneris.org>
  42.  */

  43. package org.melati.template.webmacro;

  44. import org.melati.Melati;
  45. import org.melati.template.TemplateIOException;
  46. import org.melati.util.MelatiBugMelatiException;
  47. import org.melati.util.MelatiStringWriter;

  48. import org.webmacro.Broker;
  49. import org.webmacro.InitException;

  50. import java.io.IOException;
  51. import java.io.UnsupportedEncodingException;

  52. /**
  53.  * {@link MelatiStringWriter} that can be used with WebMacro.
  54.  *
  55.  * @see WebmacroTemplate#write(org.melati.util.MelatiWriter,
  56.  *                             org.melati.template.TemplateContext)
  57.  */
  58. public class MelatiWebmacroStringWriter extends MelatiStringWriter
  59.     implements MelatiWebmacroWriter {

  60.   /**
  61.    * @return a <code>FastWriter</code> that can be used for a while.
  62.    *
  63.    * {@inheritDoc}
  64.    * @see #stopUsingFastWriter
  65.    * @see org.melati.template.webmacro.MelatiWebmacroWriter#getFastWriter
  66.    *         (org.melati.template.TemplateEngine)
  67.    */
  68.   public org.webmacro.FastWriter getFastWriter() {
  69.     // All we want to do is efficiently convert to and from bytes
  70.     // in an encoding that works for all Java characters.
  71.     // Sun's Javadocs java.nio.charset.Charset explains this well
  72.     // where other references fail to spell it out: UTF-16 is cool.
  73.     // Except Webmacro does not support it due to byte order mark.
  74.     // So Jim used UTF-16BE
  75.     // Changed to default in the desperate hope of getting something to work
  76.     try {
  77.       return org.webmacro.FastWriter.getInstance(Broker.getBroker(), Melati.DEFAULT_ENCODING);
  78.     }
  79.     catch (UnsupportedEncodingException e) {
  80.       throw new MelatiBugMelatiException(
  81.           "Assumption that all JVMs and WebMacro support " + Melati.DEFAULT_ENCODING + " has not held", e);
  82.     } catch (InitException e) {
  83.       throw new MelatiBugMelatiException(
  84.           "Problem initialising WebMacro", e);
  85.     }
  86.   }

  87.   /**
  88.    * Stop using the given <code>FastWriter</code> obtained from
  89.    * this object.
  90.    */
  91.   public void stopUsingFastWriter(org.webmacro.FastWriter fw) {
  92.     try {
  93.       write(fw.toString());
  94.     } catch (IOException e) {
  95.       throw new TemplateIOException(e);
  96.     }
  97.     try {
  98.       fw.close();
  99.     } catch (IOException e) {
  100.       throw new TemplateIOException(e);
  101.     }
  102.   }

  103. }