/*! * 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.reporting.engine.classic.core.modules.misc.survey; import java.awt.BasicStroke; import java.awt.Color; import java.util.Locale; 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; public class SurveyScaleType extends ContentType { public static final SurveyScaleType INSTANCE = new SurveyScaleType(); public SurveyScaleType() { super( "survey-scale" ); } public Object getDesignValue( final ExpressionRuntime runtime, final ReportElement element ) { final Object value = ElementTypeUtils.queryFieldOrValue( runtime, element ); Number[] numbers = ElementTypeUtils.getData( value ); if ( numbers == null ) { numbers = new Number[] { Integer.valueOf( 1 ), Integer.valueOf( 2 ), Integer.valueOf( 4 ) }; } final int lowest = ElementTypeUtils.getIntAttribute( element, SurveyModule.NAMESPACE, SurveyModule.LOWEST, 1 ); final int highest = ElementTypeUtils.getIntAttribute( element, SurveyModule.NAMESPACE, SurveyModule.HIGHEST, 5 ); final Number rangeLowerBound = ElementTypeUtils.getNumberAttribute( element, SurveyModule.NAMESPACE, SurveyModule.RANGE_LOWER_BOUND, null ); final Number rangeUpperBound = ElementTypeUtils.getNumberAttribute( element, SurveyModule.NAMESPACE, SurveyModule.RANGE_UPPER_BOUND, null ); final SurveyScale drawable = new SurveyScale( lowest, highest, numbers ); drawable.setRangeLowerBound( rangeLowerBound ); drawable.setRangeUpperBound( rangeUpperBound ); return ( drawable ); } public void configureDesignTimeDefaults( final ReportElement element, final Locale locale ) { element.setAttribute( SurveyModule.NAMESPACE, SurveyModule.LOWEST, Integer.valueOf( 1 ) ); element.setAttribute( SurveyModule.NAMESPACE, SurveyModule.HIGHEST, Integer.valueOf( 5 ) ); } public Object getValue( final ExpressionRuntime runtime, final ReportElement element ) { final Object value = ElementTypeUtils.queryFieldOrValue( runtime, element ); final Number[] numbers = ElementTypeUtils.getData( value ); if ( numbers == null ) { final Object nullValue = element.getAttribute( AttributeNames.Core.NAMESPACE, AttributeNames.Core.NULL_VALUE ); return filter( runtime, element, nullValue ); } final int lowest = ElementTypeUtils.getIntAttribute( element, SurveyModule.NAMESPACE, SurveyModule.LOWEST, 1 ); final int highest = ElementTypeUtils.getIntAttribute( element, SurveyModule.NAMESPACE, SurveyModule.HIGHEST, 5 ); final Number rangeLowerBound = ElementTypeUtils.getNumberAttribute( element, SurveyModule.NAMESPACE, SurveyModule.RANGE_LOWER_BOUND, null ); final Number rangeUpperBound = ElementTypeUtils.getNumberAttribute( element, SurveyModule.NAMESPACE, SurveyModule.RANGE_UPPER_BOUND, null ); final SurveyScale drawable = new SurveyScale( lowest, highest, numbers ); drawable.setRangeLowerBound( rangeLowerBound ); drawable.setRangeUpperBound( rangeUpperBound ); // handles scale-value-font, scale-value-color, fill-paint drawable.setAutoConfigure( true ); final Object tickMarkPaint = element.getAttribute( SurveyModule.NAMESPACE, SurveyModule.TICK_MARK_PAINT ); if ( tickMarkPaint instanceof Color ) { drawable.setRangePaint( (Color) tickMarkPaint ); } final Number lowerMargin = ElementTypeUtils.getNumberAttribute( element, SurveyModule.NAMESPACE, SurveyModule.LOWER_MARGIN, null ); if ( lowerMargin != null ) { drawable.setLowerMargin( lowerMargin.doubleValue() ); } final Number upperMargin = ElementTypeUtils.getNumberAttribute( element, SurveyModule.NAMESPACE, SurveyModule.UPPER_MARGIN, null ); if ( upperMargin != null ) { drawable.setUpperMargin( upperMargin.doubleValue() ); } final Object defaultShape = element.getAttribute( SurveyModule.NAMESPACE, SurveyModule.DEFAULT_SHAPE ); if ( defaultShape instanceof SurveyScaleShapeType ) { drawable.setDefaultShape( (SurveyScaleShapeType) defaultShape ); } final Object outlineStroke = element.getAttribute( SurveyModule.NAMESPACE, SurveyModule.OUTLINE_STROKE ); if ( outlineStroke instanceof BasicStroke ) { drawable.setOutlineStroke( (BasicStroke) outlineStroke ); } return ( drawable ); } }