Package org.pentaho.reporting.engine.classic.extensions.modules.sbarcodes

Source Code of org.pentaho.reporting.engine.classic.extensions.modules.sbarcodes.SimpleBarcodesType

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

package org.pentaho.reporting.engine.classic.extensions.modules.sbarcodes;

import java.util.Locale;

import net.sourceforge.barbecue.Barcode;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.krysalis.barcode4j.BarcodeGenerator;
import org.pentaho.reporting.engine.classic.core.AttributeNames;
import org.pentaho.reporting.engine.classic.core.ReportElement;
import org.pentaho.reporting.engine.classic.core.filter.types.ContentType;
import org.pentaho.reporting.engine.classic.core.filter.types.ElementTypeUtils;
import org.pentaho.reporting.engine.classic.core.function.ExpressionRuntime;

/**
* This <code>ElementType</code> is responsible to create the barcode object as defined by its definition named
* <code>simple-barcodes</code>.
*
* @author Cedric Pronzato
*/
public class SimpleBarcodesType extends ContentType
{
  public static final SimpleBarcodesType INSTANCE = new SimpleBarcodesType();

  private static final Log logger = LogFactory.getLog(SimpleBarcodesType.class);

  public SimpleBarcodesType()
  {
    super("simple-barcodes");
  }

  public Object getDesignValue(final ExpressionRuntime runtime, final ReportElement element)
  {
    Object value = ElementTypeUtils.queryStaticValue(element);
    if (value == null)
    {
      final String type = (String) element.getAttribute
          (SimpleBarcodesAttributeNames.NAMESPACE, SimpleBarcodesAttributeNames.TYPE_ATTRIBUTE);

      value = SimpleBarcodesUtility.getBarcodeSampleData(type);
    }

    return createBarcode(runtime, element, value);
  }

  /**
   * Returns the current value for the data source.
   *
   * @param runtime the expression runtime that is used to evaluate formulas and expressions when computing the value of
   *                this filter.
   * @param element the element for which the data is computed.
   * @return the value.
   */
  public Object getValue(final ExpressionRuntime runtime, final ReportElement element)
  {
    final Object value = ElementTypeUtils.queryFieldOrValue(runtime, element);
    if (value == null)
    {
      final Object nullValue = element.getAttribute(AttributeNames.Core.NAMESPACE, AttributeNames.Core.NULL_VALUE);
      return filter(runtime, element, nullValue);
    }
    return createBarcode(runtime, element, value);
  }

  private Object createBarcode(final ExpressionRuntime runtime,
                               final ReportElement element,
                               final Object value)
  {
    // retrieve custom barcode attributes
    final String type = (String) element.getAttribute
        (SimpleBarcodesAttributeNames.NAMESPACE, SimpleBarcodesAttributeNames.TYPE_ATTRIBUTE);
    if (type == null)
    {
      final Object nullValue = element.getAttribute(AttributeNames.Core.NAMESPACE, AttributeNames.Core.NULL_VALUE);
      return filter(runtime, element, nullValue);
    }

    // retrieve custom barcode styles
    final Number barHeight = ElementTypeUtils.getNumberAttribute(element, SimpleBarcodesAttributeNames.NAMESPACE, SimpleBarcodesAttributeNames.BAR_HEIGHT_ATTRIBUTE, null);
    final Number barWidth = ElementTypeUtils.getNumberAttribute(element, SimpleBarcodesAttributeNames.NAMESPACE, SimpleBarcodesAttributeNames.BAR_WIDTH_ATTRIBUTE, null);
    final boolean showText = ElementTypeUtils.getBooleanAttribute
        (element, SimpleBarcodesAttributeNames.NAMESPACE, SimpleBarcodesAttributeNames.SHOW_TEXT_ATTRIBUTE, true);
    final boolean checksum = ElementTypeUtils.getBooleanAttribute
        (element, SimpleBarcodesAttributeNames.NAMESPACE, SimpleBarcodesAttributeNames.CHECKSUM_ATTRIBUTE, true);

    try
    {
      final BarcodeGenerator generator = SimpleBarcodesUtility.createBarcode4J(type, showText, checksum, barHeight);
      if (generator != null)
      {
        return new BarcodeDrawable(generator, value.toString());
      }

      // create barcde and set its properties
      final Barcode barcode = SimpleBarcodesUtility.createBarcode(value.toString(), type, checksum);
      if (barcode == null)
      {
        final Object nullValue = element.getAttribute(AttributeNames.Core.NAMESPACE, AttributeNames.Core.NULL_VALUE);
        return filter(runtime, element, nullValue);
      }
      barcode.setDrawingText(showText);
      if (barWidth != null)
      {
        barcode.setBarWidth(barWidth.intValue());
      }
      else
      {
        barcode.setBarWidth(1);
      }
      if (barHeight != null)
      {
        barcode.setBarHeight(barHeight.intValue());
      }
      else
      {
        barcode.setBarHeight(18);
      }
      barcode.setDrawingText(showText);
      return new BarcodeWrapper(barcode);
    }
    catch (Exception e)
    {
      if (logger.isInfoEnabled())
      {
        logger.info("Error creating barcode, falling back to null value", e);
      }
      final Object nullValue = element.getAttribute(AttributeNames.Core.NAMESPACE, AttributeNames.Core.NULL_VALUE);
      return filter(runtime, element, nullValue);
    }
  }

  public void configureDesignTimeDefaults(final ReportElement element, final Locale locale)
  {
    element.setAttribute(SimpleBarcodesAttributeNames.NAMESPACE, SimpleBarcodesAttributeNames.TYPE_ATTRIBUTE,
        SimpleBarcodesUtility.BARCODE_CODE128);
  }
}
TOP

Related Classes of org.pentaho.reporting.engine.classic.extensions.modules.sbarcodes.SimpleBarcodesType

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.