Package org.pentaho.platform.plugin.action.jfreereport

Source Code of org.pentaho.platform.plugin.action.jfreereport.JFreeReportGeneratorComponent

/*!
* 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) 2002-2013 Pentaho Corporation..  All rights reserved.
*/

package org.pentaho.platform.plugin.action.jfreereport;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.dom4j.Document;
import org.dom4j.Node;
import org.pentaho.actionsequence.dom.actions.JFreeReportGenAction;
import org.pentaho.commons.connection.IPentahoResultSet;
import org.pentaho.jfreereport.castormodel.reportspec.Field;
import org.pentaho.jfreereport.castormodel.reportspec.ReportSpec;
import org.pentaho.jfreereport.castormodel.reportspec.ReportSpecChoice;
import org.pentaho.jfreereport.wizard.utility.report.ReportGenerationUtility;
import org.pentaho.platform.engine.core.system.PentahoSystem;
import org.pentaho.platform.engine.services.solution.ComponentBase;
import org.pentaho.platform.engine.services.solution.PentahoEntityResolver;
import org.pentaho.platform.plugin.action.messages.Messages;
import org.pentaho.platform.util.xml.dom4j.XmlDom4JHelper;

import java.io.ByteArrayOutputStream;
import java.math.BigDecimal;
import java.sql.Date;
import java.sql.Types;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;

/**
* @author Bill Seyler, Michael D'Amour
*
*
*/
public class JFreeReportGeneratorComponent extends ComponentBase {
  /**
   *
   */
  private static final long serialVersionUID = 9050456842938084174L;

  private static final String GROUP_LABELS_PROP = "group-labels"; //$NON-NLS-1$

  private static final String GROUP_LABEL_PROP = "group-label"; //$NON-NLS-1$

  private static final String GROUPED_COLUMNS_PROP = "grouped-columns"; //$NON-NLS-1$

  private static final String GROUPED_COLUMN_INDICES_PROP = "group-index"; //$NON-NLS-1$

  private static final String COLUMN_NAMES_PROP = "column-names"; //$NON-NLS-1$

  private static final String COLUMN_NAME_PROP = "column-name"; //$NON-NLS-1$

  private static final String COLUMN_WIDTHS_PROP = "column-widths"; //$NON-NLS-1$

  private static final String WIDTH_PROP = "width"; //$NON-NLS-1$

  private static final String COLUMN_ALIGNMENTS_PROP = "column-alignments"; //$NON-NLS-1$

  private static final String COLUMN_ALIGNMENT_PROP = "column-alignment"; //$NON-NLS-1$

  private static final String ITEM_HIDES_PROP = "item-hide-columns"; //$NON-NLS-1$

  private static final String ITEM_HIDE_PROP = "use-item-hide"; //$NON-NLS-1$

  private static final String COLUMN_FORMATS_PROP = "column-formats"; //$NON-NLS-1$

  private static final String FORMAT_PROP = "column-format"; //$NON-NLS-1$

  IPentahoResultSet resultSet = null;

  String[] displayNames = null;

  String compPath = null;

  String path = null;

  String orientation = "landscape"; //$NON-NLS-1$

  String[] groupLabels = null;

  int[] groupIndices = null;

  int[] widths = null;

  boolean[] itemHides = null;

  String[] formats = null;

  String[] columnAlignments;

  String reportName = ""; //$NON-NLS-1$

  boolean createSubTotals = false;

  boolean createGrandTotals = false;

  boolean createRowBanding = false;

  boolean createTotalColumn = false;

  String totalColumnName = "All"; //$NON-NLS-1$

  int totalColumnWidth = 120;

  String totalColumnFormat = "#,##0"; //$NON-NLS-1$

  String rowBandingColor = "#A0A0A0"; //$NON-NLS-1$

  int spacerWidth = 10;

  String columnHeaderBackgroundColor = "#C0C0C0"; //$NON-NLS-1$

  String columnHeaderForegroundColor = "#202020"; //$NON-NLS-1$

  String columnHeaderFontFace = "SansSerif"; //$NON-NLS-1$

  String columnHeaderFontSize = "12"; //$NON-NLS-1$

  int columnHeaderGap = 2;

  String nullString = ""; //$NON-NLS-1$

  int horizontalOffset = 0;

  @Override
  public Log getLogger() {
    return LogFactory.getLog( JFreeReportGeneratorComponent.class );
  }

  @Override
  protected boolean validateSystemSettings() {
    // This component does not have any system settings to validate
    return true;
  }

  @Override
  protected boolean validateAction() {
    /*
     * String templatePath = getComponentSetting(TEMPLATE_PATH_PROP); if (templatePath == null) {
     * error("Undefined Template Path"); return false; }
     */
    return true;
  }

  @Override
  public void done() {
  }

  @Override
  protected boolean executeAction() {
    /*
     * The on-the-fly JFreeReport generator will expect the following: =============================================
     *
     * INPUT: Path (String) to Existing JFreeReport to use as "template" OutputStream to write generated report
     * IPentahoResultSet List of Columns to "Group" List of column widths
     *
     * OUTPUT: JFreeReport XML to provided Path or OutputStream
     *
     * ASSUMPTIONS: List of column widths - last provided item is to be repeated for all remaining columns Perform
     * ItemSumFunction on all numeric columns per group and grand total Perform ItemSumFunction on calculated column per
     * group and grand total Groups and Items will be removed from template (we will retain font/color data)
     * =============================================
     *
     * public OnTheFlyJFreeReportGenerator(String path, IPentahoResultSet set, List groupLabels, List widths,
     * OutputStream stream) ------ public void process()
     */

    JFreeReportGenAction genAction = null;

    if ( !( getActionDefinition() instanceof JFreeReportGenAction ) ) {
      error( Messages.getInstance().getErrorString(
          "JFreeReportGeneratorComponent.ERROR_0001_UNKNOWN_ACTION_TYPE", getActionDefinition().getElement().asXML() ) ); //$NON-NLS-1$
      return false;
    } else {
      genAction = (JFreeReportGenAction) getActionDefinition();

      resultSet = (IPentahoResultSet) genAction.getResultSet().getValue();
      Node componentNode = null;
      String settingsFromActionSequence = null;
      try {
        settingsFromActionSequence = genAction.getComponentSettings().getStringValue();
      } catch ( Exception ex ) {
        //ignore
      }
      if ( settingsFromActionSequence != null ) {
        try {
          Document settingsDoc =
              XmlDom4JHelper.getDocFromString( settingsFromActionSequence, new PentahoEntityResolver() );
          componentNode = settingsDoc.getRootElement();
        } catch ( Exception e ) {
          error( "Could not get settings from action sequence document", e ); //$NON-NLS-1$
          return false;
        }
      } else {
        componentNode = getComponentDefinition();
      }
      try {
        compPath = genAction.getTemplatePath().getStringValue();
        path = PentahoSystem.getApplicationContext().getSolutionPath( compPath );
        orientation = genAction.getOrientation().getStringValue();
        nullString = genAction.getNullString().getStringValue();
        horizontalOffset = genAction.getHorizontalOffset().getIntValue( horizontalOffset );
        reportName = genAction.getReportName().getStringValue();
        createSubTotals = genAction.getCreateSubTotals().getBooleanValue( false );
        createGrandTotals = genAction.getCreateGrandTotals().getBooleanValue( false );
        createRowBanding = genAction.getCreateRowBanding().getBooleanValue( false );
        createTotalColumn = genAction.getCreateTotalColumn().getBooleanValue( false );
        totalColumnName = genAction.getTotalColumnName().getStringValue();
        totalColumnWidth = genAction.getTotalColumnWidth().getIntValue( totalColumnWidth );
        totalColumnFormat = genAction.getTotalColumnFormat().getStringValue();
        rowBandingColor = genAction.getRowBandingColor().getStringValue();
        spacerWidth = genAction.getSpacerWidth().getIntValue( spacerWidth );
        columnHeaderBackgroundColor = genAction.getColumnHeaderBackgroundColor().getStringValue();
        columnHeaderForegroundColor = genAction.getColumnHeaderForegroundColor().getStringValue();
        columnHeaderFontFace = genAction.getColumnHeaderFontFace().getStringValue();
        columnHeaderFontSize = genAction.getColumnHeaderFontSize().getStringValue();
        columnHeaderGap = genAction.getColumnHeaderGap().getIntValue( columnHeaderGap );
      } catch ( Exception e ) {
        e.printStackTrace();
      }

      // Get the group display labels
      List groupLabelNodes =
          componentNode.selectNodes( JFreeReportGeneratorComponent.GROUP_LABELS_PROP
              + "/" + JFreeReportGeneratorComponent.GROUP_LABEL_PROP ); //$NON-NLS-1$
      if ( groupLabelNodes != null ) {
        groupLabels = new String[groupLabelNodes.size()];
        for ( int i = 0; i < groupLabels.length; i++ ) {
          groupLabels[i] = ( (Node) groupLabelNodes.get( i ) ).getText();
        }
      }
      // Get the grouped columns indices
      List groupedColumnsIndicesNodes =
          componentNode.selectNodes( JFreeReportGeneratorComponent.GROUPED_COLUMNS_PROP
              + "/" + JFreeReportGeneratorComponent.GROUPED_COLUMN_INDICES_PROP ); //$NON-NLS-1$
      if ( groupedColumnsIndicesNodes != null ) {
        groupIndices = new int[groupedColumnsIndicesNodes.size()];
        for ( int i = 0; i < groupIndices.length; i++ ) {
          groupIndices[i] = Integer.parseInt( ( (Node) groupedColumnsIndicesNodes.get( i ) ).getText() ) - 1;
          // I am zero based, this is not
        }
      }
      // get display names
      List displayNameNodes =
          componentNode.selectNodes( JFreeReportGeneratorComponent.COLUMN_NAMES_PROP
              + "/" + JFreeReportGeneratorComponent.COLUMN_NAME_PROP ); //$NON-NLS-1$
      if ( displayNameNodes != null ) {
        displayNames = new String[displayNameNodes.size()];
        for ( int i = 0; i < displayNames.length; i++ ) {
          displayNames[i] = ( (Node) displayNameNodes.get( i ) ).getText();
        }
      }
      // get column alignments
      List columnAlignmentNodes =
          componentNode.selectNodes( JFreeReportGeneratorComponent.COLUMN_ALIGNMENTS_PROP
              + "/" + JFreeReportGeneratorComponent.COLUMN_ALIGNMENT_PROP ); //$NON-NLS-1$
      if ( columnAlignmentNodes != null ) {
        columnAlignments = new String[columnAlignmentNodes.size()];
        for ( int i = 0; i < columnAlignments.length; i++ ) {
          columnAlignments[i] = ( (Node) columnAlignmentNodes.get( i ) ).getText();
        }
      }
      // Get the column widths
      List widthNodes =
          componentNode.selectNodes( JFreeReportGeneratorComponent.COLUMN_WIDTHS_PROP
              + "/" + JFreeReportGeneratorComponent.WIDTH_PROP ); //$NON-NLS-1$
      if ( widthNodes != null ) {
        widths = new int[widthNodes.size()];
        for ( int i = 0; i < widths.length; i++ ) {
          widths[i] = Integer.valueOf( ( (Node) widthNodes.get( i ) ).getText() ).intValue();
        }
      }
      // Get the column item hides
      List itemHideNodes =
          componentNode.selectNodes( JFreeReportGeneratorComponent.ITEM_HIDES_PROP
              + "/" + JFreeReportGeneratorComponent.ITEM_HIDE_PROP ); //$NON-NLS-1$
      if ( itemHideNodes != null ) {
        itemHides = new boolean[itemHideNodes.size()];
        for ( int i = 0; i < itemHides.length; i++ ) {
          itemHides[i] = Boolean.valueOf( ( (Node) itemHideNodes.get( i ) ).getText() ).booleanValue();
        }
      }
      // Get the column formats
      List formatNodes =
          componentNode.selectNodes( JFreeReportGeneratorComponent.COLUMN_FORMATS_PROP
              + "/" + JFreeReportGeneratorComponent.FORMAT_PROP ); //$NON-NLS-1$
      if ( formatNodes != null ) {
        formats = new String[formatNodes.size()];
        for ( int i = 0; i < formats.length; i++ ) {
          formats[i] = ( (Node) formatNodes.get( i ) ).getText();
        }
      }
    }
    String reportDefinition = process();
    if ( reportDefinition != null ) {
      if ( genAction.getOutputReportDefinition() != null ) {
        genAction.getOutputReportDefinition().setValue( reportDefinition );
      } else {
        // This is to support the old way where
        // we did not check if report-definition existed in the output section
        setOutputValue( JFreeReportGenAction.REPORT_DEFINITION, reportDefinition );
      }
    }

    return true;
  }

  @SuppressWarnings( "deprecation" )
  public String process() {
    // CREATE report-spec.xml
    // USE passed in jfreeReportTemplate as "include" -- stuff in
    // report-spec
    // GENERATE JFreeReport from report-spec using code already written in
    // DesignerUtility
    //
    ByteArrayOutputStream outputStream = null;
    try {
      outputStream = new ByteArrayOutputStream();
    } catch ( Exception e ) {
      getLogger().error( e );
    }
    ReportSpec reportSpec = new ReportSpec();
    reportSpec.setReportName( reportName );
    reportSpec.setHorizontalOffset( horizontalOffset );
    reportSpec.setIncludeSrc( getPath() );
    reportSpec.setQuery( "no query" ); //$NON-NLS-1$
    reportSpec.setReportSpecChoice( new ReportSpecChoice() );
    reportSpec.getReportSpecChoice().setJndiSource( "SampleData" ); //$NON-NLS-1$
    reportSpec.setCalculateGrandTotals( createGrandTotals );
    reportSpec.setTopMargin( 10 );
    reportSpec.setBottomMargin( 10 );
    reportSpec.setLeftMargin( 10 );
    reportSpec.setRightMargin( 10 );
    reportSpec.setUseRowBanding( createRowBanding );
    reportSpec.setColumnHeaderGap( columnHeaderGap );
    if ( rowBandingColor != null ) {
      reportSpec.setRowBandingColor( rowBandingColor );
    }
    if ( columnHeaderBackgroundColor != null ) {
      reportSpec.setColumnHeaderBackgroundColor( columnHeaderBackgroundColor );
    }
    if ( columnHeaderForegroundColor != null ) {
      reportSpec.setColumnHeaderFontColor( columnHeaderForegroundColor );
    }
    if ( columnHeaderFontFace != null ) {
      reportSpec.setColumnHeaderFontName( columnHeaderFontFace );
    }
    if ( columnHeaderFontSize != null ) {
      reportSpec.setColumnHeaderFontSize( Integer.parseInt( columnHeaderFontSize ) );
    }
    reportSpec.setOrientation( orientation );
    Object[] colHeaders = resultSet.getMetaData().getColumnHeaders()[0];
    int totalWidth = reportSpec.getLeftMargin() + reportSpec.getRightMargin();
    List groupsList = new LinkedList();
    List details = new LinkedList();
    // leading spacer
    if ( spacerWidth > 0 ) {
      Field spacer = new Field();
      spacer.setName( "" ); //$NON-NLS-1$
      spacer.setDisplayName( "" ); //$NON-NLS-1$
      spacer.setType( Types.VARCHAR );
      spacer.setFormat( "" ); //$NON-NLS-1$
      spacer.setHorizontalAlignment( "right" ); //$NON-NLS-1$
      spacer.setVerticalAlignment( "middle" ); //$NON-NLS-1$
      spacer.setWidth( new BigDecimal( spacerWidth ) );
      spacer.setWidthLocked( true );
      totalWidth += spacerWidth;
      spacer.setExpression( "none" ); //$NON-NLS-1$
      spacer.setIsWidthPercent( false );
      spacer.setIsDetail( true );
      reportSpec.addField( spacer );
    }
    for ( int i = 0; i < colHeaders.length; i++ ) {
      // System.out.println("header [" + i + "] = " + colHeaders[i]);
      Class typeClass = null;
      for ( int j = 0; j < resultSet.getRowCount(); j++ ) {
        Object value = resultSet.getValueAt( j, i );
        if ( ( value != null ) && !value.toString().equals( "" ) ) { //$NON-NLS-1$
          typeClass = value.getClass();
        }
      }
      String columnName = colHeaders[i].toString();
      Field f = new Field();
      f.setName( columnName );
      f.setNullString( getNullString() );
      if ( isGroup( columnName ) ) {
        f.setDisplayName( getGroupLabel( columnName, i ) );
      } else if ( i < displayNames.length ) {
        f.setDisplayName( displayNames[i] );
      } else {
        f.setDisplayName( columnName );
      }
      f.setIsWidthPercent( false );
      f.setWidth( new BigDecimal( getWidth( columnName ) ) );
      f.setWidthLocked( true );
      f.setIsDetail( !isGroup( columnName ) );
      if ( f.getIsDetail() ) {
        details.add( f );
      } else {
        groupsList.add( f );
      }
      f.setBackgroundColor( "#FFFFFF" ); //$NON-NLS-1$
      f.setType( getType( typeClass ) );
      if ( ( itemHides == null ) || ( itemHides.length == 0 ) ) {
        f.setUseItemHide( getType( typeClass ) == Types.NUMERIC ? false : true );
      } else {
        f.setUseItemHide( useItemHide( columnName ) );
      }
      f.setVerticalAlignment( "middle" ); //$NON-NLS-1$
      f.setFormat( getColumnFormat( columnName ) );
      String alignment = getColumnAlignment( columnName );
      if ( alignment != null ) {
        f.setHorizontalAlignment( alignment );
      } else {
        if ( f.getIsDetail() && ( f.getType() == Types.NUMERIC ) ) {
          f.setHorizontalAlignment( "right" ); //$NON-NLS-1$
        }
      }
      if ( f.getIsDetail() && ( f.getType() == Types.NUMERIC ) ) {
        f.setExpression( "sum" ); //$NON-NLS-1$
      } else {
        f.setExpression( "none" ); //$NON-NLS-1$
      }
      f.setCalculateGroupTotals( createSubTotals );
      reportSpec.addField( f );
      if ( ( spacerWidth > 0 ) && f.getIsDetail() ) {
        // spacer
        Field spacer = new Field();
        spacer.setName( "" ); //$NON-NLS-1$
        spacer.setDisplayName( "" ); //$NON-NLS-1$
        spacer.setType( Types.VARCHAR );
        spacer.setFormat( "" ); //$NON-NLS-1$
        spacer.setHorizontalAlignment( "right" ); //$NON-NLS-1$
        spacer.setVerticalAlignment( "middle" ); //$NON-NLS-1$
        spacer.setWidth( new BigDecimal( spacerWidth ) );
        spacer.setWidthLocked( true );
        totalWidth += spacerWidth;
        spacer.setExpression( "none" ); //$NON-NLS-1$
        spacer.setIsWidthPercent( false );
        spacer.setIsDetail( true );
        reportSpec.addField( spacer );
      }
    }
    for ( int i = 0; i < details.size(); i++ ) {
      Field f = (Field) details.get( i );
      totalWidth += f.getWidth().intValue();
    }
    if ( createTotalColumn ) {
      Field f = new Field();
      f.setName( "TOTAL_COLUMN" ); //$NON-NLS-1$
      f.setDisplayName( totalColumnName );
      f.setType( Types.NUMERIC );
      f.setFormat( totalColumnFormat );
      f.setHorizontalAlignment( "right" ); //$NON-NLS-1$
      f.setVerticalAlignment( "middle" ); //$NON-NLS-1$
      f.setWidth( new BigDecimal( totalColumnWidth ) );
      f.setWidthLocked( true );
      f.setExpression( "sum" ); //$NON-NLS-1$
      f.setIsWidthPercent( false );
      f.setIsDetail( true );
      reportSpec.addField( f );
      totalWidth += totalColumnWidth;
      if ( spacerWidth > 0 ) {
        // spacer
        Field spacer = new Field();
        spacer.setName( "" ); //$NON-NLS-1$
        spacer.setDisplayName( "" ); //$NON-NLS-1$
        spacer.setType( Types.VARCHAR );
        spacer.setFormat( "" ); //$NON-NLS-1$
        spacer.setHorizontalAlignment( "right" ); //$NON-NLS-1$
        spacer.setVerticalAlignment( "middle" ); //$NON-NLS-1$
        spacer.setWidth( new BigDecimal( spacerWidth ) );
        spacer.setWidthLocked( true );
        totalWidth += spacerWidth;
        spacer.setExpression( "none" ); //$NON-NLS-1$
        spacer.setIsWidthPercent( false );
        spacer.setIsDetail( true );
        reportSpec.addField( spacer );
      }
    }
    try {
      reportSpec.setUseCustomPageFormat( true );
      int width = 612;
      int height = 792;
      if ( orientation.equalsIgnoreCase( "landscape" ) ) { //$NON-NLS-1$
        width = height;
        height = 612;
      }
      // w totalWidth
      // - = ------------
      // h scaledHeight
      int scaledHeight = ( height * totalWidth ) / width;
      if ( orientation.equalsIgnoreCase( "landscape" ) ) { //$NON-NLS-1$
        reportSpec.setCustomPageFormatHeight( totalWidth );
        reportSpec.setCustomPageFormatWidth( scaledHeight );
        ReportGenerationUtility.createJFreeReportXML( reportSpec, outputStream, scaledHeight, totalWidth,
            createTotalColumn, totalColumnName, totalColumnWidth, spacerWidth );
      } else {
        reportSpec.setCustomPageFormatHeight( scaledHeight );
        reportSpec.setCustomPageFormatWidth( totalWidth );
        ReportGenerationUtility.createJFreeReportXML( reportSpec, outputStream, totalWidth, scaledHeight,
            createTotalColumn, totalColumnName, totalColumnWidth, spacerWidth );
      }
    } catch ( Exception e ) {
      //ignore
    }
    return new String( outputStream.toByteArray() );
  }

  public int getType( final Class typeClass ) {
    if ( typeClass != null ) {
      if ( typeClass.getName().equals( String.class.getName() ) ) {
        return Types.VARCHAR;
      } else if ( typeClass.getName().equals( BigDecimal.class.getName() )
          || typeClass.getName().equals( Integer.class.getName() ) ) {
        return Types.NUMERIC;
      } else if ( typeClass.getName().equals( Date.class.getName() ) ) {
        return Types.DATE;
      }
    }
    return Types.VARCHAR;
  }

  public String getGroupLabel( final String columnName, final int index ) {
    Object[] colHeaders = resultSet.getMetaData().getColumnHeaders()[0];
    for ( int i = 0; i < colHeaders.length; i++ ) {
      if ( colHeaders[i].equals( columnName ) ) {
        // at this point we verified the column is in the metadata, but is the index a group?
        for ( int j = 0; j < getGroupIndices().length; j++ ) {
          if ( i == getGroupIndices()[j] ) {
            return groupLabels[j];
          }
        }
      }
    }
    return displayNames[index];
  }

  public boolean isGroup( final String columnName ) {
    Object[] colHeaders = resultSet.getMetaData().getColumnHeaders()[0];
    for ( int i = 0; i < colHeaders.length; i++ ) {
      if ( colHeaders[i].equals( columnName ) ) {
        // at this point we verified the column is in the metadata, but is the index a group?
        for ( int j = 0; j < getGroupIndices().length; j++ ) {
          if ( i == getGroupIndices()[j] ) {
            return true;
          }
        }
      }
    }
    return false;
  }

  public String getColumnAlignment( final String columnName ) {
    Object[] colHeaders = resultSet.getMetaData().getColumnHeaders()[0];
    for ( int i = 0; i < colHeaders.length; i++ ) {
      if ( colHeaders[i].equals( columnName ) ) {
        try {
          String alignment = getColumnAlignments()[getColumnAlignments().length - 1];
          alignment = getColumnAlignments()[i];
          return alignment;
        } catch ( Exception e ) {
          //ignore
        }
      }
    }
    return null;
  }

  public boolean useItemHide( final String columnName ) {
    Object[] colHeaders = resultSet.getMetaData().getColumnHeaders()[0];
    for ( int i = 0; i < colHeaders.length; i++ ) {
      if ( colHeaders[i].equals( columnName ) ) {
        boolean itemHide = getItemHides()[getItemHides().length - 1];
        try {
          itemHide = getItemHides()[i];
        } catch ( Exception e ) {
          //ignore
        }
        return itemHide;
      }
    }
    return false;
  }

  public int getWidth( final String columnName ) {
    Object[] colHeaders = resultSet.getMetaData().getColumnHeaders()[0];
    for ( int i = 0; i < colHeaders.length; i++ ) {
      if ( colHeaders[i].equals( columnName ) ) {
        int width = getWidths()[getWidths().length - 1];
        try {
          width = getWidths()[i];
        } catch ( Exception e ) {
          //ignore
        }
        return width;
      }
    }
    return 0;
  }

  public String getColumnFormat( final String columnName ) {
    Object[] colHeaders = resultSet.getMetaData().getColumnHeaders()[0];
    for ( int i = 0; i < colHeaders.length; i++ ) {
      if ( colHeaders[i].equals( columnName ) ) {
        String format = ""; //$NON-NLS-1$
        try {
          format = getFormats()[getFormats().length - 1];
          format = getFormats()[i];
        } catch ( Exception e ) {
          //ignore
        }
        return format;
      }
    }
    return ""; //$NON-NLS-1$
  }

  public String getResultOutputName() {
    Set outputs = getOutputNames();
    if ( ( outputs == null ) || ( outputs.size() == 0 ) ) {
      error( "NO OUPUT DEFINED" ); //$NON-NLS-1$
      return null;
    }
    String outputName = (String) outputs.iterator().next();
    return outputName;
  }

  @Override
  public boolean init() {
    // nothing to do here really
    return true;
  }

  /**
   * @return Returns the formats.
   */
  public String[] getFormats() {
    return formats;
  }

  /**
   * @param formats
   *          The formats to set.
   */
  public void setFormats( final String[] formats ) {
    this.formats = formats;
  }

  /**
   * @return Returns the groupLabels.
   */
  public String[] getGroupLabels() {
    return groupLabels;
  }

  /**
   * @param groupLabels
   *          The groupLabels to set.
   */
  public void setGroups( final String[] groupLabels ) {
    this.groupLabels = groupLabels;
  }

  /**
   * @return Returns the path.
   */
  public String getPath() {
    return path;
  }

  /**
   * @param path
   *          The path to set.
   */
  public void setPath( final String path ) {
    this.path = path;
  }

  /**
   * @return Returns the widths.
   */
  public int[] getWidths() {
    return widths;
  }

  /**
   * @param widths
   *          The widths to set.
   */
  public void setWidths( final int[] widths ) {
    this.widths = widths;
  }

  /**
   * @return Returns the item hides
   */
  public boolean[] getItemHides() {
    return itemHides;
  }

  /**
   * @param widths
   *          The item hides to set.
   */
  public void setItemHides( final boolean[] itemHides ) {
    this.itemHides = itemHides;
  }

  /**
   * @return Returns the widths.
   */
  public String[] getColumnAlignments() {
    return columnAlignments;
  }

  /**
   * @param widths
   *          The widths to set.
   */
  public void setColumnAlignments( final String[] columnAlignments ) {
    this.columnAlignments = columnAlignments;
  }

  public int[] getGroupIndices() {
    return groupIndices;
  }

  public void setGroupIndices( final int[] groupIndices ) {
    this.groupIndices = groupIndices;
  }

  public String getNullString() {
    return nullString;
  }

  public void setNullString( final String nullString ) {
    this.nullString = nullString;
  }
}
TOP

Related Classes of org.pentaho.platform.plugin.action.jfreereport.JFreeReportGeneratorComponent

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.