001 package org.expasy.jpl.commons.collection.render;
002
003
004 import java.awt.Dimension;
005 import java.util.List;
006 import org.expasy.jpl.commons.base.render.BarChartRenderer;
007 import org.expasy.jpl.commons.base.render.ImageFormat;
008 import org.expasy.jpl.commons.collection.stat.StatisticalSerie;
009 import org.jfree.chart.renderer.xy.XYBarRenderer;
010 import org.jfree.data.xy.XYSeriesCollection;
011
012
013 /**
014 * TODO: This object renders {@code BarCode} objects.
015 *
016 * @author nikitin
017 *
018 * @version 1.0
019 *
020 */
021 public final class BarCodeRenderer<T extends Number> extends
022 Abstract2DChartRenderer<StatisticalSerie<T>> implements BarChartRenderer {
023
024 private static final XYBarRenderer DEFAULT_RENDERER;
025
026 /** the peak bar width */
027 private static final double BAR_WIDTH = 0.0;
028
029 static {
030 XYBarRenderer.setDefaultShadowsVisible(false);
031
032 DEFAULT_RENDERER = new XYBarRenderer();
033 DEFAULT_RENDERER.setDrawBarOutline(false);
034 DEFAULT_RENDERER.setMargin(0.0);
035 }
036
037 private BarCodeRenderer(XYBarRenderer renderer, ImageFormat format,
038 Dimension dim) {
039 super(renderer, format, dim);
040 }
041
042 public static <T extends Number> BarCodeRenderer<T> newInstance() {
043 return new BarCodeRenderer<T>(DEFAULT_RENDERER,
044 Abstract2DChartRenderer.DEFAULT_IMAGE_FORMAT,
045 Abstract2DChartRenderer.DEFAULT_DIMENSION);
046 }
047
048 @Override
049 public String getXLegend() {
050 return "x";
051 }
052
053 @Override
054 public String getYLegend() {
055 return "frequency";
056 }
057
058 @Override
059 public XYSeriesCollection initDataset() {
060 XYSeriesCollection dataset = new XYSeriesCollection();
061 dataset.setIntervalWidth(BAR_WIDTH);
062 return dataset;
063 }
064
065 public void setBarWidth(double width) {
066 dataset.setIntervalWidth(width);
067 }
068
069 /**
070 * Add the statistical data set (default colors: 1st serie (blue), 2nd serie
071 * (red)).
072 *
073 * @param statSerie the statistical serie to render.
074 * @param title the title associated to the data set.
075 */
076 public void populateData(StatisticalSerie<T> statSerie) {
077 List<T> values = statSerie.getValues();
078
079 for (int i = 0; i < values.size(); i++) {
080 T x = values.get(i);
081 double y = statSerie.getFrequency(x);
082
083 addToCurrentDataSeries(x.doubleValue(), y);
084 }
085 }
086
087 /**
088 * Export as image file.
089 *
090 * @param statSerie the statistical serie to render and export.
091 * @param dir the directory to put new file in.
092 * @param title the file name.
093 */
094 public void exportChart(StatisticalSerie<T> statSerie, String dir,
095 String title) {
096 addDataSet(statSerie, title);
097 exportChart(dir, title);
098 }
099
100 /**
101 * Export a chart (prerequisite: data sets have already been entered via
102 * {@code addDataSet} method).
103 *
104 * @param dir the directory to put new file in.
105 * @param title the file name.
106 */
107 public void exportChart(String dir, String title) {
108 exportChart(dir + "/" + title);
109 }
110
111 }