Package org.odftoolkit.simple.style

Source Code of org.odftoolkit.simple.style.PageLayoutProperties

/*
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements.  See the NOTICE file
distributed with this work for additional information
regarding copyright ownership.  The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License.  You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied.  See the License for the
specific language governing permissions and limitations
under the License.
*/

package org.odftoolkit.simple.style;

import org.odftoolkit.odfdom.dom.attribute.fo.FoBorderAttribute;
import org.odftoolkit.odfdom.dom.attribute.fo.FoBorderBottomAttribute;
import org.odftoolkit.odfdom.dom.attribute.fo.FoBorderLeftAttribute;
import org.odftoolkit.odfdom.dom.attribute.fo.FoBorderRightAttribute;
import org.odftoolkit.odfdom.dom.attribute.fo.FoBorderTopAttribute;
import org.odftoolkit.odfdom.dom.attribute.fo.FoMarginBottomAttribute;
import org.odftoolkit.odfdom.dom.attribute.fo.FoMarginLeftAttribute;
import org.odftoolkit.odfdom.dom.attribute.fo.FoMarginRightAttribute;
import org.odftoolkit.odfdom.dom.attribute.fo.FoMarginTopAttribute;
import org.odftoolkit.odfdom.dom.attribute.fo.FoPageHeightAttribute;
import org.odftoolkit.odfdom.dom.attribute.fo.FoPageWidthAttribute;
import org.odftoolkit.odfdom.dom.attribute.style.StyleBorderLineWidthAttribute;
import org.odftoolkit.odfdom.dom.attribute.style.StyleBorderLineWidthBottomAttribute;
import org.odftoolkit.odfdom.dom.attribute.style.StyleBorderLineWidthLeftAttribute;
import org.odftoolkit.odfdom.dom.attribute.style.StyleBorderLineWidthRightAttribute;
import org.odftoolkit.odfdom.dom.attribute.style.StyleBorderLineWidthTopAttribute;
import org.odftoolkit.odfdom.dom.attribute.style.StyleColorAttribute;
import org.odftoolkit.odfdom.dom.attribute.style.StyleDistanceAfterSepAttribute;
import org.odftoolkit.odfdom.dom.attribute.style.StyleDistanceBeforeSepAttribute;
import org.odftoolkit.odfdom.dom.attribute.style.StyleNumFormatAttribute;
import org.odftoolkit.odfdom.dom.attribute.style.StylePrintOrientationAttribute;
import org.odftoolkit.odfdom.dom.attribute.style.StyleRelWidthAttribute;
import org.odftoolkit.odfdom.dom.attribute.style.StyleWidthAttribute;
import org.odftoolkit.odfdom.dom.element.OdfStyleBase;
import org.odftoolkit.odfdom.dom.element.OdfStylePropertiesBase;
import org.odftoolkit.odfdom.dom.element.style.StyleFootnoteSepElement;
import org.odftoolkit.odfdom.dom.element.style.StylePageLayoutPropertiesElement;
import org.odftoolkit.odfdom.dom.style.props.OdfStylePropertiesSet;
import org.odftoolkit.odfdom.type.Color;
import org.odftoolkit.odfdom.type.Length;
import org.odftoolkit.odfdom.type.Percent;
import org.odftoolkit.odfdom.type.Length.Unit;
import org.odftoolkit.simple.style.StyleTypeDefinitions.AdjustmentStyle;
import org.odftoolkit.simple.style.StyleTypeDefinitions.LineStyle;
import org.odftoolkit.simple.style.StyleTypeDefinitions.WritingMode;

/**
* This class represents the page layout style settings. It provides methods to
* access borders, margins,number format, page width, page height and etc. More
* functions will be added latter.
*
* <p>
* This class is a corresponded high level class for element
* "style:page-layout-properties". It provides methods to access the attributes
* and children of "style:page-layout-properties".
*
* @since 0.8
*/
public class PageLayoutProperties {
  // fo:background-color

  // fo:border, style:border-line-width
  // fo:border-bottom, style:border-line-width-bottom
  // fo:border-left, style:border-line-width-left
  // fo:border-right, style:border-line-width-right
  // fo:border-top, style:border-line-width-top

  // fo:margin
  // fo:margin-bottom
  // fo:margin-left
  // fo:margin-right
  // fo:margin-top

  // fo:padding
  // fo:padding-bottom
  // fo:padding-left
  // fo:padding-right
  // fo:padding-top

  // fo:page-height
  // fo:page-width

  // style:layout-grid-base-height
  // style:layout-grid-base-width
  // style:layout-grid-color
  // style:layout-grid-display
  // style:layout-grid-lines
  // style:layout-grid-mode
  // style:layout-grid-print
  // style:layout-grid-ruby-below
  // style:layout-grid-ruby-height
  // style:layout-grid-snap-to
  // style:layout-grid-standard-mode

  // style:num-format
  // style:num-letter-sync
  // style:num-prefix
  // style:num-suffix

  // style:print
  // style:print-orientation
  // style:first-page-number
  // style:footnote-max-height
  // style:paper-tray-name
  // style:print-page-order
  // style:register-truth-ref-style-name
  // style:scale-to
  // style:scale-to-pages
  // style:shadow
  // style:table-centering
  // style:writing-mode

  // the default size as used for left-, right-margin and indention
  private static final String DEFAULT_LENGTH = "0in";
  private static final String DEFAULT_PERCENT = "0%";
  StylePageLayoutPropertiesElement mElement;
  StyleFootnoteSepElement mFootnoteSepElement;
  BorderPropertiesImpl mBorderPropertiesHandler;

  /**
   * Create an instance of PageLayoutProperties
   */
  protected PageLayoutProperties() {
  }

  /**
   * Create an instance of PageLayoutProperties from an element
   * <style:page-layout-properties>
   *
   * @param pageLayoutProperties
   *            - the element of style:page-layout-properties
   */
  protected PageLayoutProperties(
      StylePageLayoutPropertiesElement pageLayoutProperties) {
    mElement = pageLayoutProperties;
    mFootnoteSepElement = (StyleFootnoteSepElement) pageLayoutProperties
        .getElementsByTagName(
            StyleFootnoteSepElement.ELEMENT_NAME.getQName())
        .item(0);
    mBorderPropertiesHandler = new BorderPropertiesImpl(mElement);
  }

  /**
   * Set the border style.
   * <p>
   * The first parameter <code>bordersType</code> describes which borders you
   * want to apply the style to, e.g. up border, bottom border, left border,
   * right border or four borders.
   * <p>
   * The border style information will be removed if the parameter
   * <code>bordersType</code> is NONE.
   *
   * @param bordersType
   *            - the type of the borders
   * @param border
   *            - the border style description
   */
  public void setBorders(StyleTypeDefinitions.CellBordersType bordersType,
      Border border) {
    switch (bordersType) {
    case BOTTOM:
      setBottomBorder(border);
      break;
    case LEFT:
      setLeftBorder(border);
      break;
    case RIGHT:
      setRightBorder(border);
      break;
    case TOP:
      setTopBorder(border);
      break;
    case ALL_FOUR:
      setBorder(border);
      break;
    case LEFT_RIGHT:
      setLeftBorder(border);
      setRightBorder(border);
      break;
    case TOP_BOTTOM:
      setTopBorder(border);
      setBottomBorder(border);
      break;
    case NONE:
      mElement
          .removeAttribute(StyleBorderLineWidthAttribute.ATTRIBUTE_NAME
              .getQName());
      mElement.removeAttribute(FoBorderAttribute.ATTRIBUTE_NAME
          .getQName());
      mElement
          .removeAttribute(StyleBorderLineWidthBottomAttribute.ATTRIBUTE_NAME
              .getQName());
      mElement.removeAttribute(FoBorderBottomAttribute.ATTRIBUTE_NAME
          .getQName());
      mElement
          .removeAttribute(StyleBorderLineWidthTopAttribute.ATTRIBUTE_NAME
              .getQName());
      mElement.removeAttribute(FoBorderTopAttribute.ATTRIBUTE_NAME
          .getQName());
      mElement
          .removeAttribute(StyleBorderLineWidthLeftAttribute.ATTRIBUTE_NAME
              .getQName());
      mElement.removeAttribute(FoBorderLeftAttribute.ATTRIBUTE_NAME
          .getQName());
      mElement
          .removeAttribute(StyleBorderLineWidthRightAttribute.ATTRIBUTE_NAME
              .getQName());
      mElement.removeAttribute(FoBorderRightAttribute.ATTRIBUTE_NAME
          .getQName());
    }
  }

  /**
   * Return the border setting for all four borders.
   * <p>
   * Null will be returned if there is no border setting for all four borders.
   *
   * @return the border setting
   */
  public Border getBorder() {
    return mBorderPropertiesHandler.getBorder();
  }

  /**
   * Return the border setting for the top border.
   * <p>
   * Null will be returned if there is no border setting for the top border.
   *
   * @return the border setting
   */
  public Border getTopBorder() {
    return mBorderPropertiesHandler.getTopBorder();
  }

  /**
   * Return the border setting for the left border.
   * <p>
   * Null will be returned if there is no border setting for the left border.
   *
   * @return the border setting
   */
  public Border getLeftBorder() {
    return mBorderPropertiesHandler.getLeftBorder();
  }

  /**
   * Return the border setting for the right border.
   * <p>
   * Null will be returned if there is no border setting for the right border.
   *
   * @return the border setting
   */
  public Border getRightBorder() {
    return mBorderPropertiesHandler.getRightBorder();
  }

  // fo:border-bottom
  // style:border-line-width-bottom
  /**
   * Return the border setting for the bottom border.
   * <p>
   * Null will be returned if there is no border setting for the bottom
   * border.
   *
   * @return the border setting
   */
  public Border getBottomBorder() {
    return mBorderPropertiesHandler.getBottomBorder();
  }

  // fo:border
  // style:border-line-width
  /**
   * Set the border definition for all four borders.
   * <p>
   * If the parameter <code>border</code> is null, the border definition for
   * all four borders will be removed.
   * <p>
   * If the line type in the border definition is NONE, the border definition
   * for all four borders will be removed.
   *
   * @param border
   *            - the border setting
   */
  public void setBorder(Border border) {
    mBorderPropertiesHandler.setBorder(border);
  }

  // fo:border-bottom
  // style:border-line-width-bottom
  /**
   * Set the border definition for the bottom border.
   * <p>
   * If the parameter <code>border</code> is null, the border definition for
   * the bottom border will be removed.
   * <p>
   * If the line type in the border definition is NONE, the border definition
   * for the bottom border will be removed.
   *
   * @param border
   *            - the border setting
   */
  public void setBottomBorder(Border border) {
    mBorderPropertiesHandler.setBottomBorder(border);
  }

  // fo:border-top
  // style:border-line-width-top
  /**
   * Set the border definition for the top border.
   * <p>
   * If the parameter <code>border</code> is null, the border definition for
   * the top border will be removed.
   * <p>
   * If the line type in the border definition is NONE, the border definition
   * for the top border will be removed.
   *
   * @param border
   *            - the border setting
   */
  public void setTopBorder(Border border) {
    mBorderPropertiesHandler.setTopBorder(border);
  }

  // fo:border-left
  // style:border-line-width-left
  /**
   * Set the border definition for the left border.
   * <p>
   * If the parameter <code>border</code> is null, the border definition for
   * the left border will be removed.
   * <p>
   * If the line type in the border definition is NONE, the border definition
   * for the left border will be removed.
   *
   * @param border
   *            - the border setting
   */
  public void setLeftBorder(Border border) {
    mBorderPropertiesHandler.setLeftBorder(border);
  }

  // fo:border-right
  // style:border-line-width-right
  /**
   * Set the border definition for the right border.
   * <p>
   * If the parameter <code>border</code> is null, the border definition for
   * the right border will be removed.
   * <p>
   * If the line type in the border definition is NONE, the border definition
   * for the right border will be removed.
   *
   * @param border
   *            - the border setting
   */
  public void setRightBorder(Border border) {
    mBorderPropertiesHandler.setRightBorder(border);
  }

  /**
   * Set the left margin of this <code>PageLayoutProperties</code>
   * <p>
   * If the size is set to zero, the left margin definition will be removed.
   *
   * @param marginLeft
   *            the size of the left margin (in Millimeter)
   */
  public void setMarginLeft(double marginLeft) {
    if (marginLeft == 0) {
      mElement.removeAttribute(FoMarginLeftAttribute.ATTRIBUTE_NAME
          .getQName());
    } else {
      mElement.setFoMarginLeftAttribute(getInchValue(marginLeft));
    }
  }

  /**
   * Returns the provided Millimeter value as Inch value
   *
   * @param value
   *            the value to set the attribute value to (in Millimeter)
   */
  private static String getInchValue(double value) {
    // build the string for mm
    final String mmValueString = value + Unit.MILLIMETER.abbr();
    // convert the length to inch
    final String inchValueString = Length.mapToUnit(mmValueString,
        Unit.INCH);

    // return the value
    return inchValueString;
  }

  /**
   * Get the size of the left margin of this <code>PageLayoutProperties</code>
   * <p>
   * If the size is set to zero, the left margin definition will be removed.
   *
   * @return the size of the left margin (in Millimeter)
   */
  public double getMarginLeft() {
    // get the value
    String valueString = mElement.getFoMarginLeftAttribute();
    // check if a value was returned
    if (valueString == null) {
      // if not use the default length
      valueString = DEFAULT_LENGTH;
    }
    // return the converted value
    return Length.parseDouble(valueString, Unit.MILLIMETER);
  }

  /**
   * Set the right margin of this <code>PageLayoutProperties</code>
   * <p>
   * If the size is set to zero, the right margin definition will be removed.
   *
   * @param marginRight
   *            the size of the right margin (in Millimeter)
   */
  public void setMarginRight(double marginRight) {
    if (marginRight == 0) {
      mElement.removeAttribute(FoMarginRightAttribute.ATTRIBUTE_NAME
          .getQName());
    } else {
      mElement.setFoMarginRightAttribute(getInchValue(marginRight));
    }
  }

  /**
   * Get the size of the right margin of this
   * <code>PageLayoutProperties</code>
   *
   * @return the size of the right margin (in Millimeter)
   */
  public double getMarginRight() {
    // get the value
    String valueString = mElement.getFoMarginRightAttribute();
    // check if a value was returned
    if (valueString == null) {
      // if not use the default length
      valueString = DEFAULT_LENGTH;
    }
    // return the converted value
    return Length.parseDouble(valueString, Unit.MILLIMETER);
  }

  /**
   * Set the top margin of this <code>PageLayoutProperties</code>
   * <p>
   * If the size is set to zero, the top margin definition will be removed.
   *
   * @param marginTop
   *            the size of the right margin (in Millimeter)
   */
  public void setMarginTop(double marginTop) {
    if (marginTop == 0) {
      mElement.removeAttribute(FoMarginTopAttribute.ATTRIBUTE_NAME
          .getQName());
    } else {
      mElement.setFoMarginTopAttribute(getInchValue(marginTop));
    }
  }

  /**
   * Get the size of the top margin of this <code>PageLayoutProperties</code>
   *
   * @return the size of the top margin (in Millimeter)
   */
  public double getMarginTop() {
    // get the value
    String valueString = mElement.getFoMarginTopAttribute();
    // check if a value was returned
    if (valueString == null) {
      // if not use the default length
      valueString = DEFAULT_LENGTH;
    }
    // return the converted value
    return Length.parseDouble(valueString, Unit.MILLIMETER);
  }

  /**
   * Set the bottom margin of this <code>PageLayoutProperties</code>
   * <p>
   * If the size is set to zero, the bottom margin definition will be removed.
   *
   * @param marginBottom
   *            the size of the bottom margin (in Millimeter)
   */
  public void setMarginBottom(double marginBottom) {
    if (marginBottom == 0) {
      mElement.removeAttribute(FoMarginBottomAttribute.ATTRIBUTE_NAME
          .getQName());
    } else {
      mElement.setFoMarginBottomAttribute(getInchValue(marginBottom));
    }
  }

  /**
   * Get the size of the bottom margin of this
   * <code>PageLayoutProperties</code>
   *
   * @return the size of the bottom margin (in Millimeter)
   */
  public double getMarginBottom() {
    // get the value
    String valueString = mElement.getFoMarginBottomAttribute();
    // check if a value was returned
    if (valueString == null) {
      // if not use the default length
      valueString = DEFAULT_LENGTH;
    }
    // return the converted value
    return Length.parseDouble(valueString, Unit.MILLIMETER);
  }

  /**
   * Get the number format of this <code>PageLayoutProperties</code>
   *
   * @return the number format
   */
  public String getNumberFormat() {
    return mElement.getStyleNumFormatAttribute();
  }

  /**
   * Set the number format of this <code>PageLayoutProperties</code>
   * <p>
   * If the parameter <code>format</code> is null, the definition will be
   * removed.
   *
   * @param format
   *            specify the number format. The values of the style:num-format
   *            attribute are 1, i, I, string, an empty string, a or A.
   */
  public void setNumberFormat(String format) {
    if (format == null) {
      mElement.removeAttribute(StyleNumFormatAttribute.ATTRIBUTE_NAME
          .getQName());
    } else {
      mElement.setStyleNumFormatAttribute(format);
    }
  }

  /**
   * Get the page width of this <code>PageLayoutProperties</code>
   *
   * @return the size of page width (in Millimeter)
   */
  public double getPageWidth() {
    // get the value
    String valueString = mElement.getFoPageWidthAttribute();
    // check if a value was returned
    if (valueString == null) {
      // if not use the default length
      valueString = DEFAULT_LENGTH;
    }
    // return the converted value
    return Length.parseDouble(valueString, Unit.MILLIMETER);
  }

  /**
   * Set the page width of this <code>PageLayoutProperties</code>
   * <p>
   * If the size is set to zero, the page width definition will be removed.
   *
   * @param pageWidth
   *            the size of the page width (in Millimeter)
   */
  public void setPageWidth(double pageWidth) {
    if (pageWidth == 0) {
      mElement.removeAttribute(FoPageWidthAttribute.ATTRIBUTE_NAME
          .getQName());
    } else {
      mElement.setFoPageWidthAttribute(getInchValue(pageWidth));
    }
  }

  /**
   * Get the page height of this <code>PageLayoutProperties</code>
   *
   * @return the size of page height (in Millimeter)
   */
  public double getPageHeight() {
    // get the value
    String valueString = mElement.getFoPageHeightAttribute();
    // check if a value was returned
    if (valueString == null) {
      // if not use the default length
      valueString = DEFAULT_LENGTH;
    }
    // return the converted value
    return Length.parseDouble(valueString, Unit.MILLIMETER);
  }

  /**
   * Set the page height of this <code>PageLayoutProperties</code>
   * <p>
   * If the size is set to zero, the page height definition will be removed.
   *
   * @param pageHeight
   *            the size of the page height (in Millimeter)
   */
  public void setPageHeight(double pageHeight) {
    if (pageHeight == 0) {
      mElement.removeAttribute(FoPageHeightAttribute.ATTRIBUTE_NAME
          .getQName());
    } else {
      mElement.setFoPageHeightAttribute(getInchValue(pageHeight));
    }
  }

  /**
   * Get the print orientation of this <code>PageLayoutProperties</code>
   *
   * @return the print orientation
   */
  public String getPrintOrientation() {
    return mElement.getStylePrintOrientationAttribute();
  }

  /**
   * Set the print orientation of this <code>PageLayoutProperties</code>
   * <p>
   * If the parameter <code>orientation</code> is null, the print orientation
   * definition will be removed.
   *
   * @param orientation
   *            - the print orientation
   */
  public void setPrintOrientation(
      StyleTypeDefinitions.PrintOrientation orientation) {
    if (orientation == null) {
      mElement
          .removeAttribute(StylePrintOrientationAttribute.ATTRIBUTE_NAME
              .getQName());
    } else {
      mElement.setStylePrintOrientationAttribute(orientation.toString());
    }
  }

  /**
   * Get the way in which a footnote separator line is aligned on a page.
   * <p>
   * If there is no <code>style:footnote-sep</code> element, the default value
   * "left" will be returned.
   *
   * @return the adjustment value of footnote separator line.
   */
  public String getFootnoteSepAdjustment() {
    if (mFootnoteSepElement == null) {
      return AdjustmentStyle.LEFT.toString();
    } else {
      return mFootnoteSepElement.getStyleAdjustmentAttribute();
    }
  }

  /**
   * Get the color of footnote separator line.
   * <p>
   * If there is no <code>style:footnote-sep</code> element, the null value
   * will be returned.
   *
   * @return the color of footnote separator line.
   */
  public String getFootnoteSepColor() {
    if (mFootnoteSepElement == null) {
      return null;
    } else {
      return mFootnoteSepElement.getStyleColorAttribute();
    }
  }

  /**
   * Get the distance between a footnote separator line and the footnote text.
   * <p>
   * If there is no <code>style:footnote-sep</code> element, null will be
   * returned.
   *
   * @return the distance after a footnote separator line.
   */
  public double getFootnoteSepDistanceAfterSep() {
    if (mFootnoteSepElement == null) {
      return 0;
    } else {
      String value = mFootnoteSepElement
          .getStyleDistanceAfterSepAttribute();
      if (value == null)
        value = DEFAULT_LENGTH;
      return Length.parseDouble(value, Unit.MILLIMETER);
    }
  }

  /**
   * Get the distance between the text area and a footnote separator line.
   * <p>
   * If there is no <code>style:footnote-sep</code> element, null will be
   * returned.
   *
   * @return the distance before a footnote separator line.
   */
  public double getFootnoteSepDistanceBeforeSep() {
    if (mFootnoteSepElement == null) {
      return 0;
    } else {
      String value = mFootnoteSepElement
          .getStyleDistanceBeforeSepAttribute();
      if (value == null)
        value = DEFAULT_LENGTH;
      return Length.parseDouble(value, Unit.MILLIMETER);
    }
  }

  /**
   * Get the line style of a footnote separator line.
   * <p>
   * If there is no <code>style:footnote-sep</code> element, the default value
   * "NONE" will be returned.
   *
   * @return the line style of a footnote separator line.
   */
  public String getFootnoteSepLineStyle() {
    if (mFootnoteSepElement == null) {
      return LineStyle.NONE.toString();
    } else {
      return mFootnoteSepElement.getStyleLineStyleAttribute();
    }
  }

  /**
   * Get the width of a footnote separator line.
   * <p>
   * If there is no <code>style:footnote-sep</code> element, the default value
   * 0 will be returned.
   *
   * @return the width a footnote separator line.
   */
  public double getFootnoteSepWidth() {
    if (mFootnoteSepElement == null) {
      return 0;
    } else {
      String value = mFootnoteSepElement.getStyleRelWidthAttribute();
      if (value == null)
        value = DEFAULT_PERCENT;
      return Percent.valueOf(value).doubleValue();
    }
  }

  /**
   * Get the thickness of a footnote separator line.
   * <p>
   * If there is no <code>style:footnote-sep</code> element, the default value
   * 0 will be returned.
   *
   * @return the thickness a footnote separator line.
   */
  public double getFootnoteSepThickness() {
    if (mFootnoteSepElement == null) {
      return 0;
    } else {
      String value = mFootnoteSepElement.getStyleWidthAttribute();
      if (value == null)
        value = DEFAULT_LENGTH;
      return Length.parseDouble(value, Unit.MILLIMETER);
    }
  }

  /**
   * Set the formatting of footnote separator of this
   * <code>PageLayoutProperties</code>
   * <p>
   * If the parameter <code>adjustment</code> is null, the adjustment
   * definition will be set as left. <br>
   * If the parameter <code>lineStyle</code> is null, the line style
   * definition will be set as NONE. <br>
   * If other parameters, like <code>color,
   * distanceAfterSep, distanceBeforeSep, width or thickness</code> is null,
   * the corresponding definition will be removed.
   *
   * @param adjustment
   *            - specifies how a footnote separator line is aligned on a
   *            page.
   *
   * @param color
   *            - specifies the color of a column or footnote separator line
   *
   * @param distanceAfterSep
   *            - specifies the space between a footnote separator line and
   *            the footnote text.
   *
   * @param distanceBeforeSep
   *            - specifies the space between the body text area and a
   *            footnote separator line.
   *
   * @param lineStyle
   *            - specifies the style of a footnote separator line.
   *
   * @param width
   *            - specifies the length of the footnote separator line as a
   *            percentage of the body text area.
   *
   * @param thickness
   *            - specifies the width or thickness of a line.
   */
  public void setFootnoteSepProperties(AdjustmentStyle adjustment,
      Color color, double distanceAfterSep, double distanceBeforeSep,
      StyleTypeDefinitions.LineStyle lineStyle, Percent width,
      double thickness) {
    if (mFootnoteSepElement == null) {
      mFootnoteSepElement = mElement.newStyleFootnoteSepElement();
    }

    // style:adjustment
    if (adjustment != null) {
      mFootnoteSepElement.setStyleAdjustmentAttribute(adjustment
          .toString());
    } else {
      mFootnoteSepElement
          .setStyleAdjustmentAttribute(AdjustmentStyle.LEFT
              .toString());
    }

    // style:color
    if (color != null) {
      mFootnoteSepElement.setStyleColorAttribute(color.toString());
    } else {
      mFootnoteSepElement
          .removeAttribute(StyleColorAttribute.ATTRIBUTE_NAME
              .getQName());
    }

    // style:distance-after-sep
    if (distanceAfterSep == 0) {
      mFootnoteSepElement
          .removeAttribute(StyleDistanceAfterSepAttribute.ATTRIBUTE_NAME
              .getQName());
    } else {
      mFootnoteSepElement
          .setStyleDistanceAfterSepAttribute(getInchValue(distanceAfterSep));
    }

    // style:distance-before-sep
    if (distanceBeforeSep == 0) {
      mFootnoteSepElement
          .removeAttribute(StyleDistanceBeforeSepAttribute.ATTRIBUTE_NAME
              .getQName());
    } else {
      mFootnoteSepElement
          .setStyleDistanceBeforeSepAttribute(getInchValue(distanceBeforeSep));
    }

    // style:line-style
    if (lineStyle == null) {
      mFootnoteSepElement.setStyleLineStyleAttribute(LineStyle.NONE
          .toString());
    } else {
      mFootnoteSepElement
          .setStyleLineStyleAttribute(lineStyle.toString());
    }

    // style:rel-width
    if (width == null) {
      mFootnoteSepElement
          .removeAttribute(StyleRelWidthAttribute.ATTRIBUTE_NAME
              .getQName());
    } else {
      mFootnoteSepElement.setStyleRelWidthAttribute(width.toString());
    }

    // style:width
    if (thickness == 0) {
      mFootnoteSepElement
          .removeAttribute(StyleWidthAttribute.ATTRIBUTE_NAME
              .getQName());
    } else {
      mFootnoteSepElement.setStyleWidthAttribute(getInchValue(thickness));
    }
  }

  /**
   * Set the writing mode of this <code>PageLayoutProperties</code>
   * <p>
   * If the parameter <code>mode</code> is null, the default value of writing
   * node "page" will be set.
   *
   * @param mode
   *            - specifies a writing mode.
   */
  public void setWritingMode(WritingMode mode) {
    if (mode == null) {
      mElement.setStyleWritingModeAttribute(WritingMode.PAGE.toString());
    } else {
      mElement.setStyleWritingModeAttribute(mode.toString());
    }
  }

  /**
   * Get the writing mode of this <code>PageLayoutProperties</code>
   *
   * @return the value of writing mode
   */
  public String getWritingMode() {
    return WritingMode.enumValueOf(mElement.getStyleWritingModeAttribute())
        .toString();
  }

  /**
   * Set the max height of a footnote area on a page.
   * <p>
   * If the value of this attribute is set to 0, there is no limit to the
   * amount of space that the footnote can occupy.
   *
   * @param height
   *            - the max height which a footnote area can occupy
   */
  public void setFootnoteMaxHeight(double height) {
    mElement.setStyleFootnoteMaxHeightAttribute(getInchValue(height));
  }

  /**
   * Get the max height of a footnote area on a page.
   *
   * @return the value of max height of footnote area.
   */
  public double getFootnoteMaxHeight() {
    String valueString = mElement.getStyleFootnoteMaxHeightAttribute();
    // check if a value was returned
    if (valueString == null) {
      // if not use the default length
      valueString = DEFAULT_LENGTH;
    }
    // return the converted value
    return Length.parseDouble(valueString, Unit.MILLIMETER);
  }

  /**
   * Return an instance of
   * <code>PageLayoutProperties</p> to represent the "style:page-layout-properties" in a style element.
   * <p>If there is no "style:page-layout-properties" defined in the style element, a new "style:page-layout-properties" element will be created.
   *
   * @param style
   *            - a style element
   * @return an instance of <code>PageLayoutProperties</p>
   */
  public static PageLayoutProperties getOrCreatePageLayoutProperties(
      OdfStyleBase style) {
    OdfStylePropertiesBase properties = style
        .getOrCreatePropertiesElement(OdfStylePropertiesSet.PageLayoutProperties);
    return new PageLayoutProperties(
        (StylePageLayoutPropertiesElement) properties);
  }

  /**
   * Return an instance of
   * <code>PageLayoutProperties</p> to represent the "style:page-layout-properties" in a style element.
   * <p>If there is no "style:page-layout-properties" defined in the style element, null will be returned.
   *
   * @param style
   *            - a style element
   * @return an instance of <code>PageLayoutProperties</p>;Null if there is no
   *         "style:page-layout-properties" defined
   */
  public static PageLayoutProperties getPageLayoutProperties(
      OdfStyleBase style) {
    OdfStylePropertiesBase properties = style
        .getPropertiesElement(OdfStylePropertiesSet.PageLayoutProperties);
    if (properties != null)
      return new PageLayoutProperties(
          (StylePageLayoutPropertiesElement) properties);
    else
      return null;
  }
}
TOP

Related Classes of org.odftoolkit.simple.style.PageLayoutProperties

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.