All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.phloc.poi.excel.style.ExcelStyle Maven / Gradle / Ivy

There is a newer version: 4.1.6
Show newest version
/**
 * Copyright (C) 2006-2015 phloc systems
 * http://www.phloc.com
 * office[at]phloc[dot]com
 *
 * Licensed 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 com.phloc.poi.excel.style;

import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import javax.annotation.concurrent.NotThreadSafe;

import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.CreationHelper;
import org.apache.poi.ss.usermodel.Font;
import org.apache.poi.ss.usermodel.IndexedColors;
import org.apache.poi.ss.usermodel.Workbook;

import com.phloc.commons.ICloneable;
import com.phloc.commons.ValueEnforcer;
import com.phloc.commons.equals.EqualsUtils;
import com.phloc.commons.hash.HashCodeGenerator;
import com.phloc.commons.string.ToStringGenerator;

/**
 * Represents a single excel style with enums instead of numeric values.
 *
 * @author Philip Helger
 */
@NotThreadSafe
public final class ExcelStyle implements ICloneable 
{
  /** By default text wrapping is disabled */
  public static final boolean DEFAULT_WRAP_TEXT = false;

  private EExcelAlignment m_eAlign;
  private EExcelVerticalAlignment m_eVAlign;
  private boolean m_bWrapText = DEFAULT_WRAP_TEXT;
  private String m_sDataFormat;
  private IndexedColors m_eFillBackgroundColor;
  private IndexedColors m_eFillForegroundColor;
  private EExcelPattern m_eFillPattern;
  private EExcelBorder m_eBorderTop;
  private EExcelBorder m_eBorderRight;
  private EExcelBorder m_eBorderBottom;
  private EExcelBorder m_eBorderLeft;
  private int m_nFontIndex = -1;

  public ExcelStyle ()
  {}

  public ExcelStyle (@Nonnull final ExcelStyle rhs)
  {
    m_eAlign = rhs.m_eAlign;
    m_eVAlign = rhs.m_eVAlign;
    m_bWrapText = rhs.m_bWrapText;
    m_sDataFormat = rhs.m_sDataFormat;
    m_eFillBackgroundColor = rhs.m_eFillBackgroundColor;
    m_eFillForegroundColor = rhs.m_eFillForegroundColor;
    m_eFillPattern = rhs.m_eFillPattern;
    m_eBorderTop = rhs.m_eBorderTop;
    m_eBorderRight = rhs.m_eBorderRight;
    m_eBorderBottom = rhs.m_eBorderBottom;
    m_eBorderLeft = rhs.m_eBorderLeft;
    m_nFontIndex = rhs.m_nFontIndex;
  }

  @Nullable
  public EExcelAlignment getAlign ()
  {
    return m_eAlign;
  }

  @Nonnull
  public ExcelStyle setAlign (@Nullable final EExcelAlignment eAlign)
  {
    m_eAlign = eAlign;
    return this;
  }

  @Nullable
  public EExcelVerticalAlignment getVerticalAlign ()
  {
    return m_eVAlign;
  }

  @Nonnull
  public ExcelStyle setVerticalAlign (@Nullable final EExcelVerticalAlignment eVAlign)
  {
    m_eVAlign = eVAlign;
    return this;
  }

  public boolean isWrapText ()
  {
    return m_bWrapText;
  }

  @Nonnull
  public ExcelStyle setWrapText (final boolean bWrapText)
  {
    m_bWrapText = bWrapText;
    return this;
  }

  @Nullable
  public String getDataFormat ()
  {
    return m_sDataFormat;
  }

  @Nonnull
  public ExcelStyle setDataFormat (@Nullable final String sDataFormat)
  {
    m_sDataFormat = sDataFormat;
    return this;
  }

  @Nullable
  public IndexedColors getFillBackgroundColor ()
  {
    return m_eFillBackgroundColor;
  }

  @Nonnull
  public ExcelStyle setFillBackgroundColor (@Nullable final IndexedColors eColor)
  {
    m_eFillBackgroundColor = eColor;
    return this;
  }

  @Nullable
  public IndexedColors getFillForegroundColor ()
  {
    return m_eFillForegroundColor;
  }

  @Nonnull
  public ExcelStyle setFillForegroundColor (@Nullable final IndexedColors eColor)
  {
    m_eFillForegroundColor = eColor;
    return this;
  }

  @Nullable
  public EExcelPattern getFillPattern ()
  {
    return m_eFillPattern;
  }

  @Nonnull
  public ExcelStyle setFillPattern (@Nullable final EExcelPattern ePattern)
  {
    m_eFillPattern = ePattern;
    return this;
  }

  @Nullable
  public EExcelBorder getBorderTop ()
  {
    return m_eBorderTop;
  }

  @Nonnull
  public ExcelStyle setBorderTop (@Nullable final EExcelBorder eBorder)
  {
    m_eBorderTop = eBorder;
    return this;
  }

  @Nullable
  public EExcelBorder getBorderRight ()
  {
    return m_eBorderRight;
  }

  @Nonnull
  public ExcelStyle setBorderRight (@Nullable final EExcelBorder eBorder)
  {
    m_eBorderRight = eBorder;
    return this;
  }

  @Nullable
  public EExcelBorder getBorderBottom ()
  {
    return m_eBorderBottom;
  }

  @Nonnull
  public ExcelStyle setBorderBottom (@Nullable final EExcelBorder eBorder)
  {
    m_eBorderBottom = eBorder;
    return this;
  }

  @Nullable
  public EExcelBorder getBorderLeft ()
  {
    return m_eBorderLeft;
  }

  @Nonnull
  public ExcelStyle setBorderLeft (@Nullable final EExcelBorder eBorder)
  {
    m_eBorderLeft = eBorder;
    return this;
  }

  @Nonnull
  public ExcelStyle setBorder (@Nullable final EExcelBorder eBorder)
  {
    return setBorderTop (eBorder).setBorderRight (eBorder).setBorderBottom (eBorder).setBorderLeft (eBorder);
  }

  public int getFontIndex ()
  {
    return m_nFontIndex;
  }

  /**
   * Set the index of the font to use. The font must have been previously
   * created via Workbook.createFont()!
   *
   * @param nFontIndex
   *        The font index to use. Values < 0 indicate no font to use
   * @return this
   */
  @Nonnull
  public ExcelStyle setFontIndex (final int nFontIndex)
  {
    m_nFontIndex = nFontIndex;
    return this;
  }

  /**
   * Set the index of the font to use. The font must have been previously
   * created via Workbook.createFont()!
   *
   * @param aFont
   *        The font to use. May not be null.
   * @return this
   */
  @Nonnull
  public ExcelStyle setFont (@Nonnull final Font aFont)
  {
    ValueEnforcer.notNull (aFont, "Font");
    return setFontIndex (aFont.getIndexAsInt ());
  }

  @Nonnull
  public ExcelStyle getClone ()
  {
    return new ExcelStyle (this);
  }

  public void fillCellStyle (@Nonnull final Workbook aWB,
                             @Nonnull final CellStyle aCS,
                             @Nonnull final CreationHelper aCreationHelper)
  {
    if (m_eAlign != null)
      aCS.setAlignment (m_eAlign.getValue ());
    if (m_eVAlign != null)
      aCS.setVerticalAlignment (m_eVAlign.getValue ());
    aCS.setWrapText (m_bWrapText);
    if (m_sDataFormat != null)
      aCS.setDataFormat (aCreationHelper.createDataFormat ().getFormat (m_sDataFormat));
    if (m_eFillBackgroundColor != null)
      aCS.setFillBackgroundColor (m_eFillBackgroundColor.getIndex ());
    if (m_eFillForegroundColor != null)
      aCS.setFillForegroundColor (m_eFillForegroundColor.getIndex ());
    if (m_eFillPattern != null)
      aCS.setFillPattern (m_eFillPattern.getValue ());
    if (m_eBorderTop != null)
      aCS.setBorderTop (m_eBorderTop.getValue ());
    if (m_eBorderRight != null)
      aCS.setBorderRight (m_eBorderRight.getValue ());
    if (m_eBorderBottom != null)
      aCS.setBorderBottom (m_eBorderBottom.getValue ());
    if (m_eBorderLeft != null)
      aCS.setBorderLeft (m_eBorderLeft.getValue ());
    if (m_nFontIndex >= 0)
      aCS.setFont (aWB.getFontAt (m_nFontIndex));
  }

  @Override
  public boolean equals (final Object o)
  {
    if (o == this)
      return true;
    if (!(o instanceof ExcelStyle))
      return false;
    final ExcelStyle rhs = (ExcelStyle) o;
    return EqualsUtils.equals (m_eAlign, rhs.m_eAlign) &&
           EqualsUtils.equals (m_eVAlign, rhs.m_eVAlign) &&
           m_bWrapText == rhs.m_bWrapText &&
           EqualsUtils.equals (m_sDataFormat, rhs.m_sDataFormat) &&
           EqualsUtils.equals (m_eFillBackgroundColor, rhs.m_eFillBackgroundColor) &&
           EqualsUtils.equals (m_eFillForegroundColor, rhs.m_eFillForegroundColor) &&
           EqualsUtils.equals (m_eFillPattern, rhs.m_eFillPattern) &&
           EqualsUtils.equals (m_eBorderTop, rhs.m_eBorderTop) &&
           EqualsUtils.equals (m_eBorderRight, rhs.m_eBorderRight) &&
           EqualsUtils.equals (m_eBorderBottom, rhs.m_eBorderBottom) &&
           EqualsUtils.equals (m_eBorderLeft, rhs.m_eBorderLeft) &&
           m_nFontIndex == rhs.m_nFontIndex;
  }

  @Override
  public int hashCode ()
  {
    return new HashCodeGenerator (this).append (m_eAlign)
                                       .append (m_eVAlign)
                                       .append (m_bWrapText)
                                       .append (m_sDataFormat)
                                       .append (m_eFillBackgroundColor)
                                       .append (m_eFillForegroundColor)
                                       .append (m_eFillPattern)
                                       .append (m_eBorderTop)
                                       .append (m_eBorderRight)
                                       .append (m_eBorderBottom)
                                       .append (m_eBorderLeft)
                                       .append (m_nFontIndex)
                                       .getHashCode ();
  }

  @Override
  public String toString ()
  {
    return new ToStringGenerator (this).appendIfNotNull ("align", m_eAlign)
                                       .appendIfNotNull ("verticalAlign", m_eVAlign)
                                       .append ("wrapText", m_bWrapText)
                                       .appendIfNotNull ("dataFormat", m_sDataFormat)
                                       .appendIfNotNull ("fillBackgroundColor", m_eFillBackgroundColor)
                                       .appendIfNotNull ("fillForegroundColor", m_eFillForegroundColor)
                                       .appendIfNotNull ("fillPattern", m_eFillPattern)
                                       .appendIfNotNull ("borderTop", m_eBorderTop)
                                       .appendIfNotNull ("borderRight", m_eBorderRight)
                                       .appendIfNotNull ("borderBottom", m_eBorderBottom)
                                       .appendIfNotNull ("borderLeft", m_eBorderLeft)
                                       .append ("fontIndex", m_nFontIndex)
                                       .toString ();
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy