Package org.pentaho.reporting.engine.classic.core.modules.output.table.html.helper

Source Code of org.pentaho.reporting.engine.classic.core.modules.output.table.html.helper.WriterService

/*
* This program is free software; you can redistribute it and/or modify it under the
*  terms of the GNU Lesser General Public License, version 2.1 as published by the Free Software
*  Foundation.
*
*  You should have received a copy of the GNU Lesser General Public License along with this
*  program; if not, you can obtain a copy at http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html
*  or from the Free Software Foundation, Inc.,
*  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
*  This program 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 Lesser General Public License for more details.
*
*  Copyright (c) 2006 - 2013 Pentaho Corporation..  All rights reserved.
*/

package org.pentaho.reporting.engine.classic.core.modules.output.table.html.helper;

import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;

import org.pentaho.reporting.engine.classic.core.modules.output.table.html.HtmlPrinter;
import org.pentaho.reporting.libraries.base.util.MemoryStringWriter;
import org.pentaho.reporting.libraries.xmlns.writer.DefaultTagDescription;
import org.pentaho.reporting.libraries.xmlns.writer.XmlWriter;

public class WriterService
{
  public static final String XHTML_NAMESPACE = "http://www.w3.org/1999/xhtml";
  private MemoryStringWriter bufferWriter;
  private BufferedWriter writer;
  private XmlWriter xmlWriter;


  private WriterService(final BufferedWriter bufferedWriter)
  {
    this.writer = bufferedWriter;
  }

  public WriterService(final BufferedWriter bufferedWriter, final MemoryStringWriter bufferWriter)
  {
    this.writer = bufferedWriter;
    this.bufferWriter = bufferWriter;
  }

  public XmlWriter getXmlWriter()
  {
    return xmlWriter;
  }

  public MemoryStringWriter getBufferWriter()
  {
    return bufferWriter;
  }

  public XmlWriter createHeaderXmlWriter()
  {
    if (isBuffered() == false)
      throw new IllegalStateException();

    final XmlWriter docWriter = new XmlWriter(writer, xmlWriter.getTagDescription());
    docWriter.addImpliedNamespace(HtmlPrinter.XHTML_NAMESPACE, "");
    docWriter.setHtmlCompatiblityMode(true);
    return docWriter;
  }

  private void setXmlWriter(final XmlWriter xmlWriter)
  {
    this.xmlWriter = xmlWriter;
  }

  private static DefaultTagDescription createTagDefinitions()
  {
    final DefaultTagDescription td = new DefaultTagDescription();
    td.setDefaultNamespace(XHTML_NAMESPACE);
    td.setNamespaceHasCData(XHTML_NAMESPACE, true);
    td.setNamespaceHasCData(XHTML_NAMESPACE, true);
    td.setElementHasCData(XHTML_NAMESPACE, "body", false);
    td.setElementHasCData(XHTML_NAMESPACE, "br", true);
    td.setElementHasCData(XHTML_NAMESPACE, "col", false);
    td.setElementHasCData(XHTML_NAMESPACE, "colgroup", false);
    td.setElementHasCData(XHTML_NAMESPACE, "div", true);
    td.setElementHasCData(XHTML_NAMESPACE, "head", false);
    td.setElementHasCData(XHTML_NAMESPACE, "html", false);
    td.setElementHasCData(XHTML_NAMESPACE, "img", true);
    td.setElementHasCData(XHTML_NAMESPACE, "input", true);
    td.setElementHasCData(XHTML_NAMESPACE, "meta", true);
    td.setElementHasCData(XHTML_NAMESPACE, "p", true);
    td.setElementHasCData(XHTML_NAMESPACE, "pre", true);
    td.setElementHasCData(XHTML_NAMESPACE, "span", true);
    td.setElementHasCData(XHTML_NAMESPACE, "style", false);
    td.setElementHasCData(XHTML_NAMESPACE, "table", false);
    td.setElementHasCData(XHTML_NAMESPACE, "tbody", false);
    td.setElementHasCData(XHTML_NAMESPACE, "td", true);
    td.setElementHasCData(XHTML_NAMESPACE, "tfoot", false);
    td.setElementHasCData(XHTML_NAMESPACE, "th", false);
    td.setElementHasCData(XHTML_NAMESPACE, "thead", false);
    td.setElementHasCData(XHTML_NAMESPACE, "title", true);
    td.setElementHasCData(XHTML_NAMESPACE, "tr", false);
    return td;
  }

  public boolean isBuffered()
  {
    return bufferWriter != null;
  }

  public static WriterService createPassThroughService(OutputStream out, String encoding) throws UnsupportedEncodingException
  {
    BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(out, encoding));

    XmlWriter xmlWriter = new XmlWriter(bufferedWriter, createTagDefinitions());
    xmlWriter.addImpliedNamespace(HtmlPrinter.XHTML_NAMESPACE, "");
    xmlWriter.setHtmlCompatiblityMode(true);

    WriterService writerService = new WriterService(bufferedWriter);
    writerService.setXmlWriter(xmlWriter);
    return writerService;
  }

  public static WriterService createBufferedService(OutputStream out, String encoding) throws UnsupportedEncodingException
  {
    MemoryStringWriter bufferWriter = new MemoryStringWriter(1024 * 512);
    XmlWriter xmlWriter = new XmlWriter(bufferWriter, createTagDefinitions());
    xmlWriter.setAdditionalIndent(1);
    xmlWriter.addImpliedNamespace(HtmlPrinter.XHTML_NAMESPACE, "");
    xmlWriter.setHtmlCompatiblityMode(true);

    BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(out, encoding));
    WriterService writerService = new WriterService(bufferedWriter, bufferWriter);
    writerService.setXmlWriter(xmlWriter);
    return writerService;
  }

  public void close() throws IOException
  {
    this.writer.close();
  }
}
TOP

Related Classes of org.pentaho.reporting.engine.classic.core.modules.output.table.html.helper.WriterService

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.