net.sourceforge.jabm.view.BarChart.java Source code

Java tutorial

Introduction

Here is the source code for net.sourceforge.jabm.view.BarChart.java

Source

/*
 * JABM - Java Agent-Based Modeling Toolkit
 * Copyright (C) 2013 Steve Phelps
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License as
 * published by the Free Software Foundation; either version 3 of
 * the License, or (at your option) any later version.
 *
 * 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 General Public License for more details.
 */
package net.sourceforge.jabm.view;

import java.awt.Dimension;
import java.awt.HeadlessException;
import java.io.Serializable;
import java.lang.reflect.InvocationTargetException;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;

import javax.swing.JComponent;
import javax.swing.SwingUtilities;

import net.sourceforge.jabm.event.Model;
import net.sourceforge.jabm.event.ReportVariablesChangedEvent;
import net.sourceforge.jabm.event.SimEvent;
import net.sourceforge.jabm.report.ReportVariables;
import net.sourceforge.jabm.report.ReportWithGUI;

import org.apache.log4j.Logger;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.general.Dataset;
import org.jfree.data.general.DatasetChangeEvent;
import org.jfree.data.general.DatasetChangeListener;
import org.jfree.data.general.DatasetGroup;
import org.springframework.beans.factory.InitializingBean;

@SuppressWarnings("rawtypes")
public class BarChart implements CategoryDataset, ReportWithGUI, Serializable, InitializingBean {

    protected ReportVariables reportVariables;

    protected Map<Object, Number> variableBindings = new LinkedHashMap<Object, Number>();

    protected LinkedList<Object> variableNames = new LinkedList<Object>();

    protected LinkedList<DatasetChangeListener> listeners = new LinkedList<DatasetChangeListener>();

    protected String chartTitle;

    protected String valueAxisLabel;

    protected ChartPanel chartPanel;

    static Logger logger = Logger.getLogger(BarChart.class);

    public BarChart() throws HeadlessException {
        super();
    }

    public void afterPropertiesSet() {
        String name = chartTitle;
        if (name == null) {
            name = reportVariables.getName();
        }
        //      series.initialise(null);
        JFreeChart chart = ChartFactory.createBarChart(//title, categoryAxisLabel, valueAxisLabel, dataset, orientation, legend, tooltips, urls)(
                name, // chart title
                "t", // domain axis label
                valueAxisLabel, // range axis label
                this, // data
                PlotOrientation.VERTICAL, true, // include legend
                true, // tooltips?
                false // URLs?
        );
        chartPanel = new ChartPanel(chart, false);
        chartPanel.setPreferredSize(new Dimension(500, 270));
        //        getContentPane().add(chartPanel);
        //        pack();
        //        computeVariableNames();
        //        setTitle("JABM: " + name);
        //        setVisible(true);
        ((Model) reportVariables).addListener(this);
    }

    public Map<Object, Number> getVariableBindings() {
        return reportVariables.getVariableBindings();
    }

    public void computeVariableNames() {
        this.variableBindings = reportVariables.getVariableBindings();
        this.variableBindings.remove(reportVariables.getName() + ".t");
        this.variableNames = new LinkedList<Object>();
        this.variableNames.addAll(variableBindings.keySet());
    }

    public void compute(ReportVariablesChangedEvent event) {
        computeVariableNames();
        final Dataset eventOriginator = this;
        try {
            SwingUtilities.invokeAndWait(new Runnable() {
                public void run() {
                    for (DatasetChangeListener listener : listeners) {
                        listener.datasetChanged(new DatasetChangeEvent(eventOriginator, eventOriginator));
                    }
                }
            });
        } catch (InterruptedException e) {
            logger.warn(e);
            Thread.currentThread().interrupt();
        } catch (InvocationTargetException e) {
            logger.warn(e);
        }
    }

    public void dispose(SimEvent event) {
        reportVariables.dispose(event);
    }

    public void initialise(SimEvent event) {
        reportVariables.initialise(event);
    }

    public void addChangeListener(DatasetChangeListener arg0) {
        listeners.add(arg0);
    }

    public void removeChangeListener(DatasetChangeListener arg0) {
        listeners.remove(arg0);
    }

    public void eventOccurred(SimEvent event) {
        //      series.eventOccurred(event);
        if (event instanceof ReportVariablesChangedEvent) {
            compute((ReportVariablesChangedEvent) event);
        }
    }

    public String getChartTitle() {
        return chartTitle;
    }

    public void setChartTitle(String chartTitle) {
        this.chartTitle = chartTitle;
    }

    public String getValueAxisLabel() {
        return valueAxisLabel;
    }

    public void setValueAxisLabel(String valueAxisLabel) {
        this.valueAxisLabel = valueAxisLabel;
    }

    @Override
    public Comparable getRowKey(int row) {
        Comparable result = variableNames.get(row).toString();
        return result;
    }

    @Override
    public int getRowIndex(Comparable key) {
        return variableNames.indexOf(key);
    }

    @Override
    public List getRowKeys() {
        return variableNames;
    }

    @Override
    public Comparable getColumnKey(int column) {
        return "1";
    }

    @Override
    public int getColumnIndex(Comparable key) {
        return 0;
    }

    @SuppressWarnings("unchecked")
    @Override
    public List getColumnKeys() {
        List result = new LinkedList();
        result.add("1");
        return result;
    }

    @Override
    public Number getValue(Comparable rowKey, Comparable columnKey) {
        Number result = variableBindings.get(rowKey);
        return result;
    }

    @Override
    public int getRowCount() {
        int result = variableBindings.size();
        return result;
    }

    @Override
    public int getColumnCount() {
        return 1;
    }

    @Override
    public Number getValue(int row, int column) {
        if (variableBindings == null) {
            return null;
        }
        String variableName = variableNames.get(row).toString();
        return getValue(variableName, null);
    }

    @Override
    public DatasetGroup getGroup() {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public void setGroup(DatasetGroup group) {
        // TODO Auto-generated method stub

    }

    public ReportVariables getReportVariables() {
        return reportVariables;
    }

    public void setReportVariables(ReportVariables reportVariables) {
        this.reportVariables = reportVariables;
    }

    @Override
    public String getName() {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public JComponent getComponent() {
        return chartPanel;
    }

}