Package org.pentaho.platform.plugin.action.openflashchart.factory

Source Code of org.pentaho.platform.plugin.action.openflashchart.factory.BubbleChartFactory

/*!
* 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.openflashchart.factory;

import ofc4j.model.elements.Element;
import ofc4j.model.elements.ScatterChart;
import org.dom4j.Node;
import org.pentaho.platform.plugin.action.messages.Messages;

import java.text.DecimalFormat;
import java.text.MessageFormat;
import java.text.NumberFormat;

public class BubbleChartFactory extends AbstractChartFactory {

  private static final String MAX_BUBBLE_SIZE_NODE_LOC = "max-bubble-size"; //$NON-NLS-1$
  private static final String BUBBLE_LABEL_Z_FORMAT_NODE_LOC = "bubble-label-z-format"; //$NON-NLS-1$
  private static final String BUBBLE_LABEL_CONTENT_NODE_LOC = "bubble-label-content"; //$NON-NLS-1$

  // scatter / bubble members
  private Number bubbleMaxX;
  private int maxBubbleSize = 100;

  @Override
  public void validateData() {
    super.validateData();
    if ( getColumnCount() < 3 ) {
      throw new RuntimeException( Messages.getInstance().getErrorString(
          "BubbleChartFactory.ERROR_0001_XYZ_COLUMN_COUNT" ) ); //$NON-NLS-1$
    }
  }

  @Override
  protected void createElements() {
    Node contentNode = chartNode.selectSingleNode( BUBBLE_LABEL_CONTENT_NODE_LOC );
    String content = getValue( contentNode );
    Node zFormatNode = chartNode.selectSingleNode( BUBBLE_LABEL_Z_FORMAT_NODE_LOC );
    String zFormat = getValue( zFormatNode );
    DecimalFormat df = null;
    if ( zFormat != null ) {
      df = new DecimalFormat( zFormat );
    }

    for ( int row = 0; row < getRowCount(); row++ ) {
      Element e = null;
      String text = getRowHeader( row );

      ScatterChart sc = new ScatterChart( "" ); //$NON-NLS-1$
      sc.setColour( getColor( row ) );
      Number x = (Number) getValueAt( row, 0 );
      Number y = (Number) getValueAt( row, 1 );
      Number z = (Number) getValueAt( row, 2 );

      setupDotSize( sc, z );

      sc.addPoint( x.doubleValue(), y.doubleValue() );

      if ( content != null ) {
        String zstr = null;
        if ( df != null ) {
          zstr = df.format( z );
        } else {
          if ( z != null ) {
            zstr = z.toString();
          }
        }
        sc.setTooltip( MessageFormat.format( content, text, NumberFormat.getInstance().format( x ), NumberFormat
            .getInstance().format( y ), zstr ) );
      }

      if ( alpha != null ) {
        sc.setAlpha( alpha );
      }

      e = sc;
      e.setText( text );
      elements.add( e );
    }
  }

  @Override
  protected void setupStyles() {
    super.setupStyles();
    // max bubble x

    Number maxX = 0;
    int rowCount = getRowCount();
    for ( int row = 0; row < rowCount; row++ ) {
      Number currx = (Number) getValueAt( row, 2 );
      if ( maxX.doubleValue() < currx.doubleValue() ) {
        maxX = currx;
      }
    }
    bubbleMaxX = maxX;

    // max bubble size

    Node bubbleSizeNode = chartNode.selectSingleNode( MAX_BUBBLE_SIZE_NODE_LOC );
    if ( getValue( bubbleSizeNode ) != null ) {
      maxBubbleSize = Integer.parseInt( getValue( bubbleSizeNode ) );
    }
  }

  public void setupDotSize( ScatterChart se, Number x ) {
    se.setDotSize( Integer
        .valueOf( java.lang.Math.round( maxBubbleSize * ( x.floatValue() / bubbleMaxX.floatValue() ) ) ) );
  }

}
TOP

Related Classes of org.pentaho.platform.plugin.action.openflashchart.factory.BubbleChartFactory

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.