Package org.pentaho.reporting.engine.classic.core.modules.parser.bundle.writer

Source Code of org.pentaho.reporting.engine.classic.core.modules.parser.bundle.writer.StyleWriterUtility

/*
* 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) 2001 - 2009 Object Refinery Ltd, Pentaho Corporation and Contributors..  All rights reserved.
*/

package org.pentaho.reporting.engine.classic.core.modules.parser.bundle.writer;

import java.awt.Color;
import java.awt.Stroke;
import java.io.IOException;
import java.util.Locale;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.pentaho.reporting.engine.classic.core.ElementAlignment;
import org.pentaho.reporting.engine.classic.core.layout.BandLayoutManager;
import org.pentaho.reporting.engine.classic.core.layout.StackedLayoutManager;
import org.pentaho.reporting.engine.classic.core.layout.StaticLayoutManager;
import org.pentaho.reporting.engine.classic.core.modules.parser.bundle.BundleNamespaces;
import org.pentaho.reporting.engine.classic.core.style.BandStyleKeys;
import org.pentaho.reporting.engine.classic.core.style.BorderStyle;
import org.pentaho.reporting.engine.classic.core.style.BoxSizing;
import org.pentaho.reporting.engine.classic.core.style.ElementStyleKeys;
import org.pentaho.reporting.engine.classic.core.style.ElementStyleSheet;
import org.pentaho.reporting.engine.classic.core.style.TextStyleKeys;
import org.pentaho.reporting.engine.classic.core.util.StrokeUtility;
import org.pentaho.reporting.engine.classic.core.util.beans.ColorValueConverter;
import org.pentaho.reporting.libraries.base.util.CSVQuoter;
import org.pentaho.reporting.libraries.base.util.ObjectUtilities;
import org.pentaho.reporting.libraries.formatting.FastDecimalFormat;
import org.pentaho.reporting.libraries.xmlns.common.AttributeList;
import org.pentaho.reporting.libraries.xmlns.writer.XmlWriter;
import org.pentaho.reporting.libraries.xmlns.writer.XmlWriterSupport;

/**
* Todo: Document Me
*
* @author Thomas Morgner
*/
public class StyleWriterUtility
{
  private static final Log logger = LogFactory.getLog(StyleWriterUtility.class);

  private static final FastDecimalFormat percentageLengthFormat = new FastDecimalFormat("0.###'%'", Locale.US);
  private static final FastDecimalFormat absoluteLengthFormat = new FastDecimalFormat("0.###", Locale.US);

  private StyleWriterUtility()
  {
  }

  public static void writeStyleRule(final String namespace, final String tagName,
                                    final XmlWriter writer, final ElementStyleSheet style,
                                    final boolean writeName)
      throws IOException
  {
    if (namespace == null)
    {
      throw new NullPointerException();
    }
    if (tagName == null)
    {
      throw new NullPointerException();
    }
    if (writer == null)
    {
      throw new NullPointerException();
    }
    if (style == null)
    {
      throw new NullPointerException();
    }

    final String parentList = StyleWriterUtility.computeParentStyleList(style);

    if (parentList == null && style.getDefinedPropertyNamesArray().length == 0)
    {
      return;
    }

    final AttributeList attList = new AttributeList();
    if (writeName)
    {
      attList.setAttribute(BundleNamespaces.STYLE, "name", style.getName());
    }

    if (parentList != null)
    {
      attList.setAttribute(BundleNamespaces.STYLE, "parent", parentList);
    }

    writer.writeTag(namespace, tagName, attList, XmlWriterSupport.OPEN);

    StyleWriterUtility.writeBandStyles(writer, style);
    StyleWriterUtility.writePageBandStyles(writer, style);
    StyleWriterUtility.writeCommonStyles(writer, style);
    StyleWriterUtility.writeContentStyles(writer, style);
    StyleWriterUtility.writeTextStyles(writer, style);
    StyleWriterUtility.writeSpatialStyles(writer, style);
    StyleWriterUtility.writeBorderStyles(writer, style);

    writer.writeCloseTag();
  }

  public static void writeBorderStyles(final XmlWriter writer, final ElementStyleSheet style)
      throws IOException
  {
    if (writer == null)
    {
      throw new NullPointerException();
    }
    if (style == null)
    {
      throw new NullPointerException();
    }

    final AttributeList bandStyleAtts = new AttributeList();

    if (style.isLocalKey(ElementStyleKeys.BACKGROUND_COLOR))
    {
      final Color value = (Color) style.getStyleProperty(ElementStyleKeys.BACKGROUND_COLOR);
      bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "background-color", ColorValueConverter.colorToString(
          value));
    }

    if (style.isLocalKey(ElementStyleKeys.PADDING_TOP) &&
        style.isLocalKey(ElementStyleKeys.PADDING_LEFT) &&
        style.isLocalKey(ElementStyleKeys.PADDING_BOTTOM) &&
        style.isLocalKey(ElementStyleKeys.PADDING_RIGHT))
    {
      final double paddingTop = style.getDoubleStyleProperty(ElementStyleKeys.PADDING_TOP, 0);
      final double paddingLeft = style.getDoubleStyleProperty(ElementStyleKeys.PADDING_LEFT, 0);
      final double paddingBottom = style.getDoubleStyleProperty(ElementStyleKeys.PADDING_BOTTOM, 0);
      final double paddingRight = style.getDoubleStyleProperty(ElementStyleKeys.PADDING_RIGHT, 0);
      if (paddingTop == paddingLeft &&
          paddingTop == paddingRight &&
          paddingTop == paddingBottom)
      {
        bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "padding", absoluteLengthFormat.format(paddingTop));
      }
      else
      {
        bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "padding-top", absoluteLengthFormat.format(paddingTop));
        bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "padding-left", absoluteLengthFormat.format(paddingLeft));
        bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "padding-bottom", absoluteLengthFormat.format(
            paddingBottom));
        bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "padding-right", absoluteLengthFormat.format(paddingRight));
      }
    }
    else
    {
      if (style.isLocalKey(ElementStyleKeys.PADDING_TOP))
      {
        final double value = style.getDoubleStyleProperty(ElementStyleKeys.PADDING_TOP, 0);
        bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "padding-top", absoluteLengthFormat.format(value));
      }
      if (style.isLocalKey(ElementStyleKeys.PADDING_LEFT))
      {
        final double value = style.getDoubleStyleProperty(ElementStyleKeys.PADDING_LEFT, 0);
        bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "padding-left", absoluteLengthFormat.format(value));
      }
      if (style.isLocalKey(ElementStyleKeys.PADDING_BOTTOM))
      {
        final double value = style.getDoubleStyleProperty(ElementStyleKeys.PADDING_BOTTOM, 0);
        bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "padding-bottom", absoluteLengthFormat.format(value));
      }
      if (style.isLocalKey(ElementStyleKeys.PADDING_RIGHT))
      {
        final double value = style.getDoubleStyleProperty(ElementStyleKeys.PADDING_RIGHT, 0);
        bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "padding-right", absoluteLengthFormat.format(value));
      }
    }

    if (style.isLocalKey(ElementStyleKeys.BORDER_TOP_WIDTH) &&
        style.isLocalKey(ElementStyleKeys.BORDER_LEFT_WIDTH) &&
        style.isLocalKey(ElementStyleKeys.BORDER_BOTTOM_WIDTH) &&
        style.isLocalKey(ElementStyleKeys.BORDER_RIGHT_WIDTH))
    {
      final double top = style.getDoubleStyleProperty(ElementStyleKeys.BORDER_TOP_WIDTH, 0);
      final double left = style.getDoubleStyleProperty(ElementStyleKeys.BORDER_LEFT_WIDTH, 0);
      final double bottom = style.getDoubleStyleProperty(ElementStyleKeys.BORDER_BOTTOM_WIDTH, 0);
      final double right = style.getDoubleStyleProperty(ElementStyleKeys.BORDER_RIGHT_WIDTH, 0);
      if (top == left &&
          top == right &&
          top == bottom)
      {
        bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "border-width", absoluteLengthFormat.format(top));
      }
      else
      {
        bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "border-top-width", absoluteLengthFormat.format(top));
        bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "border-left-width", absoluteLengthFormat.format(left));
        bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "border-bottom-width", absoluteLengthFormat.format(bottom));
        bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "border-right-width", absoluteLengthFormat.format(right));
      }
    }
    else
    {
      if (style.isLocalKey(ElementStyleKeys.BORDER_TOP_WIDTH))
      {
        final double value = style.getDoubleStyleProperty(ElementStyleKeys.BORDER_TOP_WIDTH, 0);
        bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "border-top-width", absoluteLengthFormat.format(value));
      }
      if (style.isLocalKey(ElementStyleKeys.BORDER_LEFT_WIDTH))
      {
        final double value = style.getDoubleStyleProperty(ElementStyleKeys.BORDER_LEFT_WIDTH, 0);
        bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "border-left-width", absoluteLengthFormat.format(value));
      }
      if (style.isLocalKey(ElementStyleKeys.BORDER_BOTTOM_WIDTH))
      {
        final double value = style.getDoubleStyleProperty(ElementStyleKeys.BORDER_BOTTOM_WIDTH, 0);
        bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "border-bottom-width", absoluteLengthFormat.format(value));
      }
      if (style.isLocalKey(ElementStyleKeys.BORDER_RIGHT_WIDTH))
      {
        final double value = style.getDoubleStyleProperty(ElementStyleKeys.BORDER_RIGHT_WIDTH, 0);
        bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "border-right-width", absoluteLengthFormat.format(value));
      }
    }
    if (style.isLocalKey(ElementStyleKeys.BORDER_BREAK_WIDTH))
    {
      final double value = style.getDoubleStyleProperty(ElementStyleKeys.BORDER_BREAK_WIDTH, 0);
      bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "border-break-width", absoluteLengthFormat.format(value));
    }

    if (style.isLocalKey(ElementStyleKeys.BORDER_TOP_COLOR) &&
        style.isLocalKey(ElementStyleKeys.BORDER_LEFT_COLOR) &&
        style.isLocalKey(ElementStyleKeys.BORDER_BOTTOM_COLOR) &&
        style.isLocalKey(ElementStyleKeys.BORDER_RIGHT_COLOR))
    {
      final Color top = (Color) style.getStyleProperty(ElementStyleKeys.BORDER_TOP_COLOR);
      final Color left = (Color) style.getStyleProperty(ElementStyleKeys.BORDER_LEFT_COLOR);
      final Color bottom = (Color) style.getStyleProperty(ElementStyleKeys.BORDER_BOTTOM_COLOR);
      final Color right = (Color) style.getStyleProperty(ElementStyleKeys.BORDER_RIGHT_COLOR);
      if (ObjectUtilities.equal(top, left) &&
          ObjectUtilities.equal(top, right) &&
          ObjectUtilities.equal(top, bottom))
      {
        bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "border-color", ColorValueConverter.colorToString(top));
      }
      else
      {
        bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "border-top-color", ColorValueConverter.colorToString(
            top));
        bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "border-left-color", ColorValueConverter.colorToString(
            left));
        bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "border-bottom-color", ColorValueConverter.colorToString(
            bottom));
        bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "border-right-color", ColorValueConverter.colorToString(
            right));
      }
    }
    else
    {
      if (style.isLocalKey(ElementStyleKeys.BORDER_TOP_COLOR))
      {
        final Color value = (Color) style.getStyleProperty(ElementStyleKeys.BORDER_TOP_COLOR);
        bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "border-top-color", ColorValueConverter.colorToString(
            value));
      }
      if (style.isLocalKey(ElementStyleKeys.BORDER_LEFT_COLOR))
      {
        final Color value = (Color) style.getStyleProperty(ElementStyleKeys.BORDER_LEFT_COLOR);
        bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "border-left-color", ColorValueConverter.colorToString(
            value));
      }
      if (style.isLocalKey(ElementStyleKeys.BORDER_BOTTOM_COLOR))
      {
        final Color value = (Color) style.getStyleProperty(ElementStyleKeys.BORDER_BOTTOM_COLOR);
        bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "border-bottom-color", ColorValueConverter.colorToString(
            value));
      }
      if (style.isLocalKey(ElementStyleKeys.BORDER_RIGHT_COLOR))
      {
        final Color value = (Color) style.getStyleProperty(ElementStyleKeys.BORDER_RIGHT_COLOR);
        bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "border-right-color", ColorValueConverter.colorToString(
            value));
      }
    }
    if (style.isLocalKey(ElementStyleKeys.BORDER_BREAK_COLOR))
    {
      final Color value = (Color) style.getStyleProperty(ElementStyleKeys.BORDER_BREAK_COLOR);
      bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "border-break-color", ColorValueConverter.colorToString(
          value));
    }

    if (style.isLocalKey(ElementStyleKeys.BORDER_TOP_STYLE) &&
        style.isLocalKey(ElementStyleKeys.BORDER_LEFT_STYLE) &&
        style.isLocalKey(ElementStyleKeys.BORDER_BOTTOM_STYLE) &&
        style.isLocalKey(ElementStyleKeys.BORDER_RIGHT_STYLE))
    {
      final Object top = style.getStyleProperty(ElementStyleKeys.BORDER_TOP_STYLE);
      final Object left = style.getStyleProperty(ElementStyleKeys.BORDER_LEFT_STYLE);
      final Object bottom = style.getStyleProperty(ElementStyleKeys.BORDER_BOTTOM_STYLE);
      final Object right = style.getStyleProperty(ElementStyleKeys.BORDER_RIGHT_STYLE);
      if (ObjectUtilities.equal(top, left) &&
          ObjectUtilities.equal(top, right) &&
          ObjectUtilities.equal(top, bottom))
      {
        bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "border-style", top.toString());
      }
      else
      {
        bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "border-top-style", top.toString());
        bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "border-left-style", left.toString());
        bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "border-bottom-style", bottom.toString());
        bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "border-right-style", right.toString());
      }
    }
    else
    {
      if (style.isLocalKey(ElementStyleKeys.BORDER_TOP_STYLE))
      {
        final Object value = style.getStyleProperty(ElementStyleKeys.BORDER_TOP_STYLE);
        bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "border-top-style", value.toString());
      }
      if (style.isLocalKey(ElementStyleKeys.BORDER_LEFT_STYLE))
      {
        final Object value = style.getStyleProperty(ElementStyleKeys.BORDER_LEFT_STYLE);
        bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "border-left-style", value.toString());
      }
      if (style.isLocalKey(ElementStyleKeys.BORDER_BOTTOM_STYLE))
      {
        final Object value = style.getStyleProperty(ElementStyleKeys.BORDER_BOTTOM_STYLE);
        bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "border-bottom-style", value.toString());
      }
      if (style.isLocalKey(ElementStyleKeys.BORDER_RIGHT_STYLE))
      {
        final Object value = style.getStyleProperty(ElementStyleKeys.BORDER_RIGHT_STYLE);
        bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "border-right-style", value.toString());
      }
    }
    if (style.isLocalKey(ElementStyleKeys.BORDER_BREAK_STYLE))
    {
      final Object value = style.getStyleProperty(ElementStyleKeys.BORDER_BREAK_STYLE);
      bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "border-break-style", value.toString());
    }

    if (style.isLocalKey(ElementStyleKeys.BORDER_BOTTOM_LEFT_RADIUS_WIDTH) &&
        style.isLocalKey(ElementStyleKeys.BORDER_BOTTOM_RIGHT_RADIUS_WIDTH) &&
        style.isLocalKey(ElementStyleKeys.BORDER_TOP_LEFT_RADIUS_WIDTH) &&
        style.isLocalKey(ElementStyleKeys.BORDER_TOP_RIGHT_RADIUS_WIDTH))
    {
      final double bottomLeft = style.getDoubleStyleProperty(ElementStyleKeys.BORDER_BOTTOM_LEFT_RADIUS_WIDTH, 0);
      final double bottomRight = style.getDoubleStyleProperty(ElementStyleKeys.BORDER_BOTTOM_RIGHT_RADIUS_WIDTH, 0);
      final double topLeft = style.getDoubleStyleProperty(ElementStyleKeys.BORDER_TOP_LEFT_RADIUS_WIDTH, 0);
      final double topRight = style.getDoubleStyleProperty(ElementStyleKeys.BORDER_TOP_RIGHT_RADIUS_WIDTH, 0);
      if (bottomLeft == bottomRight &&
          bottomLeft == topRight &&
          bottomLeft == topLeft)
      {
        bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "border-radius-width", absoluteLengthFormat.format(
            bottomLeft));
      }
      else
      {
        bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "border-top-left-radius-width", absoluteLengthFormat.format(
            topLeft));
        bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "border-top-right-radius-width", absoluteLengthFormat.format(
            topRight));
        bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "border-bottom-left-radius-width",
            absoluteLengthFormat.format(bottomLeft));
        bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "border-bottom-right-radius-width",
            absoluteLengthFormat.format(bottomRight));
      }
    }
    else
    {
      if (style.isLocalKey(ElementStyleKeys.BORDER_TOP_LEFT_RADIUS_WIDTH))
      {
        final double value = style.getDoubleStyleProperty(ElementStyleKeys.BORDER_TOP_LEFT_RADIUS_WIDTH, 0);
        bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "border-top-left-width", absoluteLengthFormat.format(value));
      }
      if (style.isLocalKey(ElementStyleKeys.BORDER_TOP_RIGHT_RADIUS_WIDTH))
      {
        final double value = style.getDoubleStyleProperty(ElementStyleKeys.BORDER_TOP_RIGHT_RADIUS_WIDTH, 0);
        bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "border-top-right-width", absoluteLengthFormat.format(
            value));
      }
      if (style.isLocalKey(ElementStyleKeys.BORDER_BOTTOM_LEFT_RADIUS_WIDTH))
      {
        final double value = style.getDoubleStyleProperty(ElementStyleKeys.BORDER_BOTTOM_LEFT_RADIUS_WIDTH, 0);
        bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "border-bottom-left-width", absoluteLengthFormat.format(
            value));
      }
      if (style.isLocalKey(ElementStyleKeys.BORDER_BOTTOM_RIGHT_RADIUS_WIDTH))
      {
        final double value = style.getDoubleStyleProperty(ElementStyleKeys.BORDER_BOTTOM_RIGHT_RADIUS_WIDTH, 0);
        bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "border-bottom-right-width", absoluteLengthFormat.format(
            value));
      }
    }

    if (style.isLocalKey(ElementStyleKeys.BORDER_BOTTOM_LEFT_RADIUS_HEIGHT) &&
        style.isLocalKey(ElementStyleKeys.BORDER_BOTTOM_RIGHT_RADIUS_HEIGHT) &&
        style.isLocalKey(ElementStyleKeys.BORDER_TOP_LEFT_RADIUS_HEIGHT) &&
        style.isLocalKey(ElementStyleKeys.BORDER_TOP_RIGHT_RADIUS_HEIGHT))
    {
      final double bottomLeft = style.getDoubleStyleProperty(ElementStyleKeys.BORDER_BOTTOM_LEFT_RADIUS_HEIGHT, 0);
      final double bottomRight = style.getDoubleStyleProperty(ElementStyleKeys.BORDER_BOTTOM_RIGHT_RADIUS_HEIGHT, 0);
      final double topLeft = style.getDoubleStyleProperty(ElementStyleKeys.BORDER_TOP_LEFT_RADIUS_HEIGHT, 0);
      final double topRight = style.getDoubleStyleProperty(ElementStyleKeys.BORDER_TOP_RIGHT_RADIUS_HEIGHT, 0);
      if (bottomLeft == bottomRight &&
          bottomLeft == topRight &&
          bottomLeft == topLeft)
      {
        bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "border-radius-height", absoluteLengthFormat.format(
            bottomLeft));
      }
      else
      {
        bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "border-top-left-radius-height", absoluteLengthFormat.format(
            topLeft));
        bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "border-top-right-radius-height",
            absoluteLengthFormat.format(topRight));
        bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "border-bottom-left-radius-height",
            absoluteLengthFormat.format(bottomLeft));
        bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "border-bottom-right-radius-height",
            absoluteLengthFormat.format(bottomRight));
      }
    }
    else
    {
      if (style.isLocalKey(ElementStyleKeys.BORDER_TOP_LEFT_RADIUS_HEIGHT))
      {
        final double value = style.getDoubleStyleProperty(ElementStyleKeys.BORDER_TOP_LEFT_RADIUS_HEIGHT, 0);
        bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "border-top-left-height", absoluteLengthFormat.format(
            value));
      }
      if (style.isLocalKey(ElementStyleKeys.BORDER_TOP_RIGHT_RADIUS_HEIGHT))
      {
        final double value = style.getDoubleStyleProperty(ElementStyleKeys.BORDER_TOP_RIGHT_RADIUS_HEIGHT, 0);
        bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "border-top-right-height", absoluteLengthFormat.format(
            value));
      }
      if (style.isLocalKey(ElementStyleKeys.BORDER_BOTTOM_LEFT_RADIUS_HEIGHT))
      {
        final double value = style.getDoubleStyleProperty(ElementStyleKeys.BORDER_BOTTOM_LEFT_RADIUS_HEIGHT, 0);
        bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "border-bottom-left-height", absoluteLengthFormat.format(
            value));
      }
      if (style.isLocalKey(ElementStyleKeys.BORDER_BOTTOM_RIGHT_RADIUS_HEIGHT))
      {
        final double value = style.getDoubleStyleProperty(ElementStyleKeys.BORDER_BOTTOM_RIGHT_RADIUS_HEIGHT, 0);
        bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "border-bottom-right-height", absoluteLengthFormat.format(
            value));
      }
    }

    if (bandStyleAtts.isEmpty() == false)
    {
      writer.writeTag(BundleNamespaces.STYLE, "border-styles", bandStyleAtts, XmlWriterSupport.CLOSE);
    }
  }

  public static void writeSpatialStyles(final XmlWriter writer, final ElementStyleSheet style)
      throws IOException
  {
    if (writer == null)
    {
      throw new NullPointerException();
    }
    if (style == null)
    {
      throw new NullPointerException();
    }

    final AttributeList bandStyleAtts = new AttributeList();
    if (style.isLocalKey(ElementStyleKeys.POS_X))
    {
      final double value = style.getDoubleStyleProperty(ElementStyleKeys.POS_X, 0);
      bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "x", formatLength(value));
    }
    if (style.isLocalKey(ElementStyleKeys.POS_Y))
    {
      final double value = style.getDoubleStyleProperty(ElementStyleKeys.POS_Y, 0);
      bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "y", formatLength(value));
    }
    if (style.isLocalKey(ElementStyleKeys.MIN_WIDTH))
    {
      final double value = style.getDoubleStyleProperty(ElementStyleKeys.MIN_WIDTH, 0);
      bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "min-width", formatLength(value));
    }
    if (style.isLocalKey(ElementStyleKeys.MIN_HEIGHT))
    {
      final double value = style.getDoubleStyleProperty(ElementStyleKeys.MIN_HEIGHT, 0);
      bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "min-height", formatLength(value));
    }
    if (style.isLocalKey(ElementStyleKeys.WIDTH))
    {
      final double value = style.getDoubleStyleProperty(ElementStyleKeys.WIDTH, 0);
      bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "width", formatLength(value));
    }
    if (style.isLocalKey(ElementStyleKeys.HEIGHT))
    {
      final double value = style.getDoubleStyleProperty(ElementStyleKeys.HEIGHT, 0);
      bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "height", formatLength(value));
    }
    if (style.isLocalKey(ElementStyleKeys.MAX_WIDTH))
    {
      final double value = style.getDoubleStyleProperty(ElementStyleKeys.MAX_WIDTH, 0);
      bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "max-width", formatLength(value));
    }
    if (style.isLocalKey(ElementStyleKeys.MAX_HEIGHT))
    {
      final double value = style.getDoubleStyleProperty(ElementStyleKeys.MAX_HEIGHT, 0);
      bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "max-height", formatLength(value));
    }
    if (bandStyleAtts.isEmpty() == false)
    {
      writer.writeTag(BundleNamespaces.STYLE, "spatial-styles", bandStyleAtts, XmlWriterSupport.CLOSE);
    }
  }

  public static void writeTextStyles(final XmlWriter writer, final ElementStyleSheet style)
      throws IOException
  {
    if (writer == null)
    {
      throw new NullPointerException();
    }
    if (style == null)
    {
      throw new NullPointerException();
    }

    final AttributeList bandStyleAtts = new AttributeList();
    if (style.isLocalKey(TextStyleKeys.FONT))
    {
      final String value = (String) style.getStyleProperty(TextStyleKeys.FONT);
      bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "font-face", value);
    }
    if (style.isLocalKey(TextStyleKeys.BOLD))
    {
      final boolean value = style.getBooleanStyleProperty(TextStyleKeys.BOLD);
      bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "bold", String.valueOf(value));
    }
    if (style.isLocalKey(TextStyleKeys.ITALIC))
    {
      final boolean value = style.getBooleanStyleProperty(TextStyleKeys.ITALIC);
      bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "italic", String.valueOf(value));
    }
    if (style.isLocalKey(TextStyleKeys.EMBEDDED_FONT))
    {
      final boolean value = style.getBooleanStyleProperty(TextStyleKeys.EMBEDDED_FONT);
      bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "embedded", String.valueOf(value));
    }
    if (style.isLocalKey(TextStyleKeys.UNDERLINED))
    {
      final boolean value = style.getBooleanStyleProperty(TextStyleKeys.UNDERLINED);
      bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "underline", String.valueOf(value));
    }
    if (style.isLocalKey(TextStyleKeys.STRIKETHROUGH))
    {
      final boolean value = style.getBooleanStyleProperty(TextStyleKeys.STRIKETHROUGH);
      bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "strikethrough", String.valueOf(value));
    }
    if (style.isLocalKey(ElementStyleKeys.EXCEL_WRAP_TEXT))
    {
      final boolean value = style.getBooleanStyleProperty(ElementStyleKeys.EXCEL_WRAP_TEXT);
      bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "excel-text-wrapping", String.valueOf(value));
    }
    if (style.isLocalKey(TextStyleKeys.TRIM_TEXT_CONTENT))
    {
      final boolean value = style.getBooleanStyleProperty(TextStyleKeys.TRIM_TEXT_CONTENT);
      bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "trim-text-content", String.valueOf(value));
    }
    if (style.isLocalKey(TextStyleKeys.FONTENCODING))
    {
      final String value = (String) style.getStyleProperty(TextStyleKeys.FONTENCODING);
      bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "encoding", value);
    }
    if (style.isLocalKey(TextStyleKeys.RESERVED_LITERAL))
    {
      final String value = (String) style.getStyleProperty(TextStyleKeys.RESERVED_LITERAL);
      bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "ellipsis", value);
    }
    if (style.isLocalKey(TextStyleKeys.FONTSIZE))
    {
      final int value = style.getIntStyleProperty(TextStyleKeys.FONTSIZE, 0);
      if (value > 0)
      {
        bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "font-size", String.valueOf(value));
      }
    }
    if (style.isLocalKey(TextStyleKeys.LINEHEIGHT))
    {
      final double value = style.getDoubleStyleProperty(TextStyleKeys.LINEHEIGHT, 0);
      bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "line-height", formatLength(value));
    }
    if (style.isLocalKey(TextStyleKeys.WORD_SPACING))
    {
      final int value = style.getIntStyleProperty(TextStyleKeys.WORD_SPACING, 0);
      bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "word-spacing", String.valueOf(value));
    }
    if (style.isLocalKey(TextStyleKeys.X_MIN_LETTER_SPACING))
    {
      final int value = style.getIntStyleProperty(TextStyleKeys.X_MIN_LETTER_SPACING, 0);
      bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "min-letter-spacing", String.valueOf(value));
    }
    if (style.isLocalKey(TextStyleKeys.X_OPTIMUM_LETTER_SPACING))
    {
      final int value = style.getIntStyleProperty(TextStyleKeys.X_OPTIMUM_LETTER_SPACING, 0);
      bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "optimum-letter-spacing", String.valueOf(value));
    }
    if (style.isLocalKey(TextStyleKeys.X_MAX_LETTER_SPACING))
    {
      final int value = style.getIntStyleProperty(TextStyleKeys.X_MAX_LETTER_SPACING, 0);
      bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "max-letter-spacing", String.valueOf(value));
    }
    if (style.isLocalKey(TextStyleKeys.FONT_SMOOTH))
    {
      final Object value = style.getStyleProperty(TextStyleKeys.FONT_SMOOTH);
      bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "font-smooth", value.toString());
    }
    if (style.isLocalKey(TextStyleKeys.TEXT_WRAP))
    {
      final Object value = style.getStyleProperty(TextStyleKeys.TEXT_WRAP);
      bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "text-wrap", value.toString());
    }
    if (style.isLocalKey(TextStyleKeys.WHITE_SPACE_COLLAPSE))
    {
      final Object value = style.getStyleProperty(TextStyleKeys.WHITE_SPACE_COLLAPSE);
      bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "whitespace-collapse", value.toString());
    }
    if (style.isLocalKey(TextStyleKeys.VERTICAL_TEXT_ALIGNMENT))
    {
      final Object value = style.getStyleProperty(TextStyleKeys.VERTICAL_TEXT_ALIGNMENT);
      bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "whitespace-collapse", value.toString());
    }
    if (style.isLocalKey(TextStyleKeys.TEXT_INDENT))
    {
      final double value = style.getDoubleStyleProperty(TextStyleKeys.TEXT_INDENT, 0);
      bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "text-indent", formatFloat(value));
    }
    if (style.isLocalKey(TextStyleKeys.FIRST_LINE_INDENT))
    {
      final double value = style.getDoubleStyleProperty(TextStyleKeys.FIRST_LINE_INDENT, 0);
      bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "first-line-indent", formatFloat(value));
    }
    if (bandStyleAtts.isEmpty() == false)
    {
      writer.writeTag(BundleNamespaces.STYLE, "text-styles", bandStyleAtts, XmlWriterSupport.CLOSE);
    }
  }

  public static void writeContentStyles(final XmlWriter writer, final ElementStyleSheet style)
      throws IOException
  {
    if (writer == null)
    {
      throw new NullPointerException();
    }
    if (style == null)
    {
      throw new NullPointerException();
    }

    final AttributeList bandStyleAtts = new AttributeList();
    if (style.isLocalKey(ElementStyleKeys.DRAW_SHAPE))
    {
      final boolean value = style.getBooleanStyleProperty(ElementStyleKeys.DRAW_SHAPE);
      bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "draw-shape", String.valueOf(value));
    }
    if (style.isLocalKey(ElementStyleKeys.FILL_SHAPE))
    {
      final boolean value = style.getBooleanStyleProperty(ElementStyleKeys.FILL_SHAPE);
      bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "fill-shape", String.valueOf(value));
    }
    if (style.isLocalKey(ElementStyleKeys.SCALE))
    {
      final boolean value = style.getBooleanStyleProperty(ElementStyleKeys.SCALE);
      bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "scale", String.valueOf(value));
    }
    if (style.isLocalKey(ElementStyleKeys.KEEP_ASPECT_RATIO))
    {
      final boolean value = style.getBooleanStyleProperty(ElementStyleKeys.KEEP_ASPECT_RATIO);
      bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "keep-aspect-ratio", String.valueOf(value));
    }
    if (style.isLocalKey(ElementStyleKeys.DYNAMIC_HEIGHT))
    {
      final boolean value = style.getBooleanStyleProperty(ElementStyleKeys.DYNAMIC_HEIGHT);
      bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "dynamic-height", String.valueOf(value));
    }
    if (style.isLocalKey(ElementStyleKeys.PAINT))
    {
      final Color value = (Color) style.getStyleProperty(ElementStyleKeys.PAINT);
      bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "color", ColorValueConverter.colorToString(value));
    }
    if (style.isLocalKey(ElementStyleKeys.FILL_COLOR))
    {
      final Color value = (Color) style.getStyleProperty(ElementStyleKeys.FILL_COLOR);
      bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "fill-color", ColorValueConverter.colorToString(value));
    }
    if (style.isLocalKey(ElementStyleKeys.EXCEL_DATA_FORMAT_STRING))
    {
      final String value = (String) style.getStyleProperty(ElementStyleKeys.EXCEL_DATA_FORMAT_STRING);
      bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "excel-cell-format", value);
    }
    if (style.isLocalKey(ElementStyleKeys.ANTI_ALIASING))
    {
      final boolean value = style.getBooleanStyleProperty(ElementStyleKeys.ANTI_ALIASING);
      bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "anti-aliasing", String.valueOf(value));
    }
    if (style.isLocalKey(ElementStyleKeys.STROKE))
    {
      final Stroke s = (Stroke) style.getStyleProperty(ElementStyleKeys.STROKE);
      final float strokeWidth = StrokeUtility.getStrokeWidth(s);
      final BorderStyle strokeType = StrokeUtility.translateStrokeStyle(s);
      bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "stroke-weight", absoluteLengthFormat.format(strokeWidth));
      bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "stroke-style", strokeType.toString());
    }
    if (bandStyleAtts.isEmpty() == false)
    {
      writer.writeTag(BundleNamespaces.STYLE, "content-styles", bandStyleAtts, XmlWriterSupport.CLOSE);
    }
  }

  public static void writeCommonStyles(final XmlWriter writer, final ElementStyleSheet style)
      throws IOException
  {
    if (writer == null)
    {
      throw new NullPointerException();
    }
    if (style == null)
    {
      throw new NullPointerException();
    }

    final AttributeList bandStyleAtts = new AttributeList();
    if (style.isLocalKey(ElementStyleKeys.ANCHOR_NAME))
    {
      final String value = (String) style.getStyleProperty(ElementStyleKeys.ANCHOR_NAME);
      bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "anchor-name", value);
    }
    if (style.isLocalKey(ElementStyleKeys.HREF_TARGET))
    {
      final String value = (String) style.getStyleProperty(ElementStyleKeys.HREF_TARGET);
      bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "href-target", value);
    }
    if (style.isLocalKey(ElementStyleKeys.HREF_TITLE))
    {
      final String value = (String) style.getStyleProperty(ElementStyleKeys.HREF_TITLE);
      bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "href-title", value);
    }
    if (style.isLocalKey(ElementStyleKeys.HREF_WINDOW))
    {
      final String value = (String) style.getStyleProperty(ElementStyleKeys.HREF_WINDOW);
      bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "href-window", value);
    }
    if (style.isLocalKey(ElementStyleKeys.BOX_SIZING))
    {
      final BoxSizing value = (BoxSizing) style.getStyleProperty(ElementStyleKeys.BOX_SIZING);
      bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "box-sizing", value.toString());
    }
    if (style.isLocalKey(ElementStyleKeys.VISIBLE))
    {
      final boolean value = style.getBooleanStyleProperty(ElementStyleKeys.VISIBLE);
      bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "visible", String.valueOf(value));
    }
    if (style.isLocalKey(ElementStyleKeys.INVISIBLE_CONSUMES_SPACE))
    {
      final boolean value = style.getBooleanStyleProperty(ElementStyleKeys.INVISIBLE_CONSUMES_SPACE);
      bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "invisible-consumes-space", String.valueOf(value));
    }
    if (style.isLocalKey(ElementStyleKeys.WIDOWS))
    {
      final int value = style.getIntStyleProperty(ElementStyleKeys.WIDOWS, -1);
      if (value >= 0)
      {
        bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "widows", String.valueOf(value));
      }
    }
    if (style.isLocalKey(ElementStyleKeys.ORPHANS))
    {
      final int value = style.getIntStyleProperty(ElementStyleKeys.ORPHANS, -1);
      if (value >= 0)
      {
        bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "orphans", String.valueOf(value));
      }
    }
    if (style.isLocalKey(ElementStyleKeys.OVERFLOW_X))
    {
      final boolean value = style.getBooleanStyleProperty(ElementStyleKeys.OVERFLOW_X);
      bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "overflow-x", String.valueOf(value));
    }
    if (style.isLocalKey(ElementStyleKeys.OVERFLOW_Y))
    {
      final boolean value = style.getBooleanStyleProperty(ElementStyleKeys.OVERFLOW_Y);
      bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "overflow-y", String.valueOf(value));
    }
    if (style.isLocalKey(ElementStyleKeys.AVOID_PAGEBREAK_INSIDE))
    {
      final boolean value = style.getBooleanStyleProperty(ElementStyleKeys.AVOID_PAGEBREAK_INSIDE);
      bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "avoid-page-break", String.valueOf(value));
    }
    if (style.isLocalKey(ElementStyleKeys.ALIGNMENT))
    {
      final ElementAlignment value = (ElementAlignment) style.getStyleProperty(ElementStyleKeys.ALIGNMENT);
      if (ElementAlignment.CENTER.equals(value))
      {
        bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "alignment", "center");
      }
      else if (ElementAlignment.RIGHT.equals(value))
      {
        bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "alignment", "right");
      }
      else if (ElementAlignment.LEFT.equals(value))
      {
        bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "alignment", "left");
      }
    }
    if (style.isLocalKey(ElementStyleKeys.VALIGNMENT))
    {
      final ElementAlignment value = (ElementAlignment) style.getStyleProperty(ElementStyleKeys.VALIGNMENT);
      if (ElementAlignment.MIDDLE.equals(value))
      {
        bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "vertical-alignment", "middle");
      }
      else if (ElementAlignment.BOTTOM.equals(value))
      {
        bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "vertical-alignment", "bottom");
      }
      else if (ElementAlignment.TOP.equals(value))
      {
        bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "vertical-alignment", "top");
      }
    }
    if (bandStyleAtts.isEmpty() == false)
    {
      writer.writeTag(BundleNamespaces.STYLE, "common-styles", bandStyleAtts, XmlWriterSupport.CLOSE);
    }
  }

  public static void writePageBandStyles(final XmlWriter writer, final ElementStyleSheet style)
      throws IOException
  {
    if (writer == null)
    {
      throw new NullPointerException();
    }
    if (style == null)
    {
      throw new NullPointerException();
    }

    final AttributeList bandStyleAtts = new AttributeList();
    if (style.isLocalKey(BandStyleKeys.REPEAT_HEADER))
    {
      final boolean value = style.getBooleanStyleProperty(BandStyleKeys.REPEAT_HEADER);
      bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "repeat", String.valueOf(value));
    }
    if (style.isLocalKey(BandStyleKeys.DISPLAY_ON_FIRSTPAGE))
    {
      final boolean value = style.getBooleanStyleProperty(BandStyleKeys.DISPLAY_ON_FIRSTPAGE);
      bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "display-on-first-page", String.valueOf(value));
    }
    if (style.isLocalKey(BandStyleKeys.DISPLAY_ON_LASTPAGE))
    {
      final boolean value = style.getBooleanStyleProperty(BandStyleKeys.DISPLAY_ON_LASTPAGE);
      bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "display-on-last-page", String.valueOf(value));
    }
    if (style.isLocalKey(BandStyleKeys.STICKY))
    {
      final boolean value = style.getBooleanStyleProperty(BandStyleKeys.STICKY);
      bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "sticky", String.valueOf(value));
    }
    if (style.isLocalKey(BandStyleKeys.FIXED_POSITION))
    {
      final double value = style.getDoubleStyleProperty(BandStyleKeys.FIXED_POSITION, 0);
      bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "fixed-position", formatLength(value));
    }
    if (bandStyleAtts.isEmpty() == false)
    {
      writer.writeTag(BundleNamespaces.STYLE, "page-band-styles", bandStyleAtts, XmlWriterSupport.CLOSE);
    }
  }

  private static String formatFloat(final double value)
  {
    return absoluteLengthFormat.format(value);
  }

  private static String formatLength(final double value)
  {
    if (value >= 0)
    {
      return absoluteLengthFormat.format(value);
    }
    else
    {
      return percentageLengthFormat.format(-value);
    }
  }

  public static void writeBandStyles(final XmlWriter writer, final ElementStyleSheet style)
      throws IOException
  {
    if (writer == null)
    {
      throw new NullPointerException();
    }
    if (style == null)
    {
      throw new NullPointerException();
    }

    final AttributeList bandStyleAtts = new AttributeList();
    if (style.isLocalKey(BandStyleKeys.COMPUTED_SHEETNAME))
    {
      final String value = (String) style.getStyleProperty(BandStyleKeys.COMPUTED_SHEETNAME);
      bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "computed-sheetname", value);
    }
    if (style.isLocalKey(BandStyleKeys.BOOKMARK))
    {
      final String value = (String) style.getStyleProperty(BandStyleKeys.BOOKMARK);
      bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "bookmark", value);
    }
    if (style.isLocalKey(BandStyleKeys.PAGEBREAK_BEFORE))
    {
      final boolean value = style.getBooleanStyleProperty(BandStyleKeys.PAGEBREAK_BEFORE);
      bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "pagebreak-before", String.valueOf(value));
    }
    if (style.isLocalKey(BandStyleKeys.PAGEBREAK_AFTER))
    {
      final boolean value = style.getBooleanStyleProperty(BandStyleKeys.PAGEBREAK_AFTER);
      bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "pagebreak-after", String.valueOf(value));
    }
    if (style.isLocalKey(BandStyleKeys.LAYOUT))
    {
      final String value = (String) style.getStyleProperty(BandStyleKeys.LAYOUT);
      bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "layout", String.valueOf(value));
    }
    else if (style.isLocalKey(BandLayoutManager.LAYOUTMANAGER))
    {
      logger.warn("Converted old 'layout-manager' style definition into the new 'layout' style.");
      final Object value = style.getStyleProperty(BandLayoutManager.LAYOUTMANAGER);
      if (value instanceof StaticLayoutManager)
      {
        bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "layout", "canvas");
      }
      else if (value instanceof StackedLayoutManager)
      {
        bandStyleAtts.setAttribute(BundleNamespaces.STYLE, "layout", "block");
      }
    }
    if (bandStyleAtts.isEmpty() == false)
    {
      writer.writeTag(BundleNamespaces.STYLE, "band-styles", bandStyleAtts, XmlWriterSupport.CLOSE);
    }
  }

  public static String computeParentStyleList(final ElementStyleSheet styleSheet)
  {
    if (styleSheet == null)
    {
      throw new NullPointerException();
    }

    final ElementStyleSheet[] sheets = styleSheet.getParents();
    final CSVQuoter quoter = new CSVQuoter(' ', '\'');
    StringBuffer parents = null;
    for (int i = 0; i < sheets.length; i++)
    {
      final ElementStyleSheet sheet = sheets[i];
      if (sheet.isGlobalDefault())
      {
        continue;
      }

      if (parents == null)
      {
        parents = new StringBuffer(sheets.length * 30);
      }
      final String quoted = quoter.doQuoting(sheet.getName());
      if (parents.length() > 0)
      {
        parents.append(' ');
      }
      parents.append(quoted);
    }

    if (parents == null)
    {
      return null;
    }
    return parents.toString();
  }
}
TOP

Related Classes of org.pentaho.reporting.engine.classic.core.modules.parser.bundle.writer.StyleWriterUtility

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.