package rocks.inspectit.ui.rcp.editor.graph.plot.datasolver.impl;
import java.text.DecimalFormat;
import java.text.FieldPosition;
import java.text.NumberFormat;
import java.text.ParsePosition;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.axis.NumberTickUnit;
import org.jfree.data.Range;
import rocks.inspectit.ui.rcp.editor.graph.plot.datasolver.AbstractPlotDataSolver;
import rocks.inspectit.ui.rcp.formatter.NumberFormatter;
/**
* This class is used to plot data as percentage data.
*
* @author Marius Oehler
*
*/
public class PercentageDataSolver extends AbstractPlotDataSolver {
/**
* The number formatter used to label the axis.
*/
private static NumberFormat numberFormat = new NumberFormat() {
/**
* Generated UID.
*/
private static final long serialVersionUID = 558623875022886643L;
/**
* {@inheritDoc}
*/
@Override
public Number parse(String source, ParsePosition parsePosition) {
return null;
}
/**
* {@inheritDoc}
*/
@Override
public StringBuffer format(long number, StringBuffer toAppendTo, FieldPosition pos) {
return null;
}
/**
* {@inheritDoc}
*/
@Override
public StringBuffer format(double number, StringBuffer toAppendTo, FieldPosition pos) {
return toAppendTo.append((int) number).append("%");
}
};
/**
* Package-private Constructor.
*/
PercentageDataSolver() {
}
/**
* {@inheritDoc}
*/
@Override
public NumberAxis getAxis() {
NumberAxis rangeAxis = new NumberAxis("Percentage");
rangeAxis.setRange(new Range(0, 100), false, false);
rangeAxis.setAutoRangeMinimumSize(50, false);
rangeAxis.setTickUnit(new NumberTickUnit(10.0d, new DecimalFormat("0")));
rangeAxis.setNumberFormatOverride(numberFormat);
return rangeAxis;
}
/**
* {@inheritDoc}
*/
@Override
public double valueConvert(double value) {
return value * 100D;
}
/**
* {@inheritDoc}
*/
@Override
protected String valueToHumanReadableImpl(double value) {
return NumberFormatter.formatDoubleToPercent(value / 100D);
}
/**
* {@inheritDoc}
*/
@Override
public boolean isAggregatable() {
return true;
}
}