mirror of https://github.com/rusefi/RomRaider.git
refactored out parameter update handlers
git-svn-id: http://svn.3splooges.com/romraider-arch/trunk@249 d2e2e1cd-ba16-0410-be16-b7c4453c7c2d
This commit is contained in:
parent
a4aeed3fb6
commit
727a289420
|
@ -7,6 +7,12 @@ import enginuity.logger.ui.LoggerDataTableModel;
|
|||
import enginuity.logger.ui.ParameterListTableModel;
|
||||
import enginuity.logger.ui.ParameterRegistrationBroker;
|
||||
import enginuity.logger.ui.ParameterRegistrationBrokerImpl;
|
||||
import enginuity.logger.ui.handler.DashboardUpdateHandler;
|
||||
import enginuity.logger.ui.handler.FileUpdateHandler;
|
||||
import enginuity.logger.ui.handler.GraphUpdateHandler;
|
||||
import enginuity.logger.ui.handler.LiveDataUpdateHandler;
|
||||
import enginuity.logger.ui.handler.ParameterUpdateHandlerManager;
|
||||
import enginuity.logger.ui.handler.ParameterUpdateHandlerManagerImpl;
|
||||
|
||||
import javax.swing.*;
|
||||
import static javax.swing.JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED;
|
||||
|
@ -28,28 +34,57 @@ public final class EcuLogger extends JFrame implements WindowListener, PropertyC
|
|||
private final JComboBox portsComboBox = new JComboBox();
|
||||
private final LoggerDataTableModel dataTableModel = new LoggerDataTableModel();
|
||||
private final JPanel graphPanel = new JPanel();
|
||||
private final ParameterRegistrationBroker broker = new ParameterRegistrationBrokerImpl(settings, dataTableModel, graphPanel);
|
||||
private final ParameterUpdateHandlerManager handlerManager = new ParameterUpdateHandlerManagerImpl();
|
||||
private final ParameterRegistrationBroker broker = new ParameterRegistrationBrokerImpl(handlerManager, settings);
|
||||
private final ParameterListTableModel paramListTableModel = new ParameterListTableModel(broker);
|
||||
|
||||
public EcuLogger(String title) {
|
||||
super(title);
|
||||
|
||||
//build left and right components of split pane
|
||||
JComponent leftComponent = buildLeftComponent();
|
||||
JComponent rightComponent = buildRightComponent();
|
||||
// setup the user interface
|
||||
initUserInterface();
|
||||
|
||||
//build split pane
|
||||
JSplitPane splitPane = buildSplitPane(leftComponent, rightComponent);
|
||||
splitPane.addPropertyChangeListener(this);
|
||||
|
||||
//add to container
|
||||
getContentPane().add(splitPane);
|
||||
// setup parameter update handlers
|
||||
initParameterUpdateHandlers();
|
||||
|
||||
// load ecu params from logger config
|
||||
loadEcuParamsFromConfig();
|
||||
|
||||
}
|
||||
|
||||
private void initUserInterface() {
|
||||
// build left and right components of split pane
|
||||
JComponent leftComponent = buildLeftComponent();
|
||||
JComponent rightComponent = buildRightComponent();
|
||||
|
||||
// build split pane
|
||||
JSplitPane splitPane = buildSplitPane(leftComponent, rightComponent);
|
||||
splitPane.addPropertyChangeListener(this);
|
||||
|
||||
// add to container
|
||||
getContentPane().add(splitPane);
|
||||
}
|
||||
|
||||
private void loadEcuParamsFromConfig() {
|
||||
//TODO: handle errors here better!
|
||||
try {
|
||||
EcuParameterLoaderImpl parameterLoader = new EcuParameterLoaderImpl();
|
||||
List<EcuParameter> ecuParams = parameterLoader.loadFromXml(settings.getLoggerConfigFilePath(), settings.getLoggerProtocol());
|
||||
for (EcuParameter ecuParam : ecuParams) {
|
||||
paramListTableModel.addParam(ecuParam);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
private void initParameterUpdateHandlers() {
|
||||
handlerManager.addHandler(new LiveDataUpdateHandler(dataTableModel));
|
||||
handlerManager.addHandler(new GraphUpdateHandler(graphPanel));
|
||||
handlerManager.addHandler(new DashboardUpdateHandler());
|
||||
handlerManager.addHandler(new FileUpdateHandler(settings));
|
||||
}
|
||||
|
||||
private JComponent buildLeftComponent() {
|
||||
return new JScrollPane(new JTable(paramListTableModel), VERTICAL_SCROLLBAR_AS_NEEDED, HORIZONTAL_SCROLLBAR_AS_NEEDED);
|
||||
}
|
||||
|
@ -138,19 +173,6 @@ public final class EcuLogger extends JFrame implements WindowListener, PropertyC
|
|||
return new JScrollPane(dashboardPanel, VERTICAL_SCROLLBAR_AS_NEEDED, HORIZONTAL_SCROLLBAR_NEVER);
|
||||
}
|
||||
|
||||
private void loadEcuParamsFromConfig() {
|
||||
//TODO: handle errors here better!
|
||||
try {
|
||||
EcuParameterLoaderImpl parameterLoader = new EcuParameterLoaderImpl();
|
||||
List<EcuParameter> ecuParams = parameterLoader.loadFromXml(settings.getLoggerConfigFilePath(), settings.getLoggerProtocol());
|
||||
for (EcuParameter ecuParam : ecuParams) {
|
||||
paramListTableModel.addParam(ecuParam);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
public void windowOpened(WindowEvent windowEvent) {
|
||||
}
|
||||
|
||||
|
@ -176,6 +198,9 @@ public final class EcuLogger extends JFrame implements WindowListener, PropertyC
|
|||
public void propertyChange(PropertyChangeEvent propertyChangeEvent) {
|
||||
}
|
||||
|
||||
//**********************************************************************
|
||||
|
||||
|
||||
public static void main(String... args) {
|
||||
SwingUtilities.invokeLater(new Runnable() {
|
||||
public void run() {
|
||||
|
|
|
@ -5,70 +5,33 @@ import enginuity.logger.LoggerController;
|
|||
import enginuity.logger.LoggerControllerImpl;
|
||||
import enginuity.logger.definition.EcuParameter;
|
||||
import enginuity.logger.query.LoggerCallback;
|
||||
import static enginuity.logger.ui.SpringUtilities.makeCompactGrid;
|
||||
import org.jfree.chart.ChartFactory;
|
||||
import org.jfree.chart.ChartPanel;
|
||||
import org.jfree.chart.JFreeChart;
|
||||
import static org.jfree.chart.plot.PlotOrientation.VERTICAL;
|
||||
import org.jfree.data.xy.XYDataset;
|
||||
import org.jfree.data.xy.XYSeries;
|
||||
import org.jfree.data.xy.XYSeriesCollection;
|
||||
import enginuity.logger.ui.handler.ParameterUpdateHandlerManager;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import static java.util.Collections.synchronizedMap;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
public final class ParameterRegistrationBrokerImpl implements ParameterRegistrationBroker {
|
||||
private final LoggerController controller;
|
||||
private final LoggerDataTableModel dataTableModel;
|
||||
private final JPanel graphPanel;
|
||||
private final Map<EcuParameter, ChartPanel> chartMap = synchronizedMap(new HashMap<EcuParameter, ChartPanel>());
|
||||
private final ParameterUpdateHandlerManager handlerManager;
|
||||
private final List<EcuParameter> registeredEcuParameters = Collections.synchronizedList(new ArrayList<EcuParameter>());
|
||||
private int loggerCount = 0;
|
||||
private long loggerStartTime = 0;
|
||||
|
||||
public ParameterRegistrationBrokerImpl(Settings settings, LoggerDataTableModel dataTableModel, JPanel graphPanel) {
|
||||
public ParameterRegistrationBrokerImpl(ParameterUpdateHandlerManager handlerManager, Settings settings) {
|
||||
this.handlerManager = handlerManager;
|
||||
this.controller = new LoggerControllerImpl(settings);
|
||||
this.dataTableModel = dataTableModel;
|
||||
this.graphPanel = graphPanel;
|
||||
}
|
||||
|
||||
public synchronized void registerEcuParameterForLogging(final EcuParameter ecuParam) {
|
||||
if (!registeredEcuParameters.contains(ecuParam)) {
|
||||
// add to datatable
|
||||
dataTableModel.addParam(ecuParam);
|
||||
|
||||
// add to charts
|
||||
final XYSeries series = new XYSeries(ecuParam.getName());
|
||||
//TODO: Make chart max item count configurable via settings
|
||||
series.setMaximumItemCount(1000);
|
||||
final XYDataset xyDataset = new XYSeriesCollection(series);
|
||||
final JFreeChart chart = ChartFactory.createXYLineChart(ecuParam.getName(), "Time (sec)", ecuParam.getName() + " (" + ecuParam.getConvertor().getUnits() + ")",
|
||||
xyDataset, VERTICAL, false, true, false);
|
||||
ChartPanel chartPanel = new ChartPanel(chart, false, true, true, true, true);
|
||||
graphPanel.add(chartPanel);
|
||||
//graphPanel.add(new ChartScrollBar(Adjustable.HORIZONTAL, chart));
|
||||
chartMap.put(ecuParam, chartPanel);
|
||||
makeCompactGrid(graphPanel, ++loggerCount, 1, 10, 10, 20, 20);
|
||||
repaintGraphPanel(2);
|
||||
|
||||
// add to dashboard
|
||||
// register param with handlers
|
||||
handlerManager.registerParam(ecuParam);
|
||||
|
||||
// add logger and setup callback
|
||||
controller.addLogger(ecuParam, new LoggerCallback() {
|
||||
public void callback(byte[] value) {
|
||||
// update data table
|
||||
dataTableModel.updateParam(ecuParam, value);
|
||||
|
||||
// update graph
|
||||
series.add((System.currentTimeMillis() - loggerStartTime) / 1000.0, ecuParam.getConvertor().convert(value));
|
||||
|
||||
// update dashboard
|
||||
|
||||
// update handlers
|
||||
handlerManager.handleParamUpdate(ecuParam, value, System.currentTimeMillis() - loggerStartTime);
|
||||
}
|
||||
});
|
||||
|
||||
|
@ -82,16 +45,8 @@ public final class ParameterRegistrationBrokerImpl implements ParameterRegistrat
|
|||
// remove logger
|
||||
controller.removeLogger(ecuParam);
|
||||
|
||||
// remove from datatable
|
||||
dataTableModel.removeParam(ecuParam);
|
||||
|
||||
// remove from charts
|
||||
graphPanel.remove(chartMap.get(ecuParam));
|
||||
chartMap.remove(ecuParam);
|
||||
makeCompactGrid(graphPanel, --loggerCount, 1, 10, 10, 20, 20);
|
||||
repaintGraphPanel(1);
|
||||
|
||||
// remove from dashboard
|
||||
// deregister param from handlers
|
||||
handlerManager.deregisterParam(ecuParam);
|
||||
|
||||
// remove from registered list
|
||||
registeredEcuParameters.remove(ecuParam);
|
||||
|
@ -113,17 +68,4 @@ public final class ParameterRegistrationBrokerImpl implements ParameterRegistrat
|
|||
controller.stop();
|
||||
}
|
||||
|
||||
private void repaintGraphPanel(int parentRepaintLevel) {
|
||||
if (loggerCount < parentRepaintLevel) {
|
||||
graphPanel.doLayout();
|
||||
graphPanel.repaint();
|
||||
} else {
|
||||
if (loggerCount == 1) {
|
||||
graphPanel.doLayout();
|
||||
}
|
||||
graphPanel.getParent().doLayout();
|
||||
graphPanel.getParent().repaint();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -0,0 +1,16 @@
|
|||
package enginuity.logger.ui.handler;
|
||||
|
||||
import enginuity.logger.definition.EcuParameter;
|
||||
|
||||
public final class DashboardUpdateHandler implements ParameterUpdateHandler {
|
||||
|
||||
public void registerParam(EcuParameter ecuParam) {
|
||||
}
|
||||
|
||||
public void handleParamUpdate(EcuParameter ecuParam, byte[] value, long timestamp) {
|
||||
}
|
||||
|
||||
public void deregisterParam(EcuParameter ecuParam) {
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,22 @@
|
|||
package enginuity.logger.ui.handler;
|
||||
|
||||
import enginuity.logger.definition.EcuParameter;
|
||||
import enginuity.Settings;
|
||||
|
||||
public final class FileUpdateHandler implements ParameterUpdateHandler {
|
||||
private final Settings settings;
|
||||
|
||||
public FileUpdateHandler(Settings settings) {
|
||||
this.settings = settings;
|
||||
}
|
||||
|
||||
public void registerParam(EcuParameter ecuParam) {
|
||||
}
|
||||
|
||||
public void handleParamUpdate(EcuParameter ecuParam, byte[] value, long timestamp) {
|
||||
}
|
||||
|
||||
public void deregisterParam(EcuParameter ecuParam) {
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,70 @@
|
|||
package enginuity.logger.ui.handler;
|
||||
|
||||
import enginuity.logger.definition.EcuParameter;
|
||||
import static enginuity.logger.ui.SpringUtilities.makeCompactGrid;
|
||||
import org.jfree.chart.ChartFactory;
|
||||
import org.jfree.chart.ChartPanel;
|
||||
import org.jfree.chart.JFreeChart;
|
||||
import static org.jfree.chart.plot.PlotOrientation.VERTICAL;
|
||||
import org.jfree.data.xy.XYDataset;
|
||||
import org.jfree.data.xy.XYSeries;
|
||||
import org.jfree.data.xy.XYSeriesCollection;
|
||||
|
||||
import javax.swing.*;
|
||||
import static java.util.Collections.synchronizedMap;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
public final class GraphUpdateHandler implements ParameterUpdateHandler {
|
||||
private final JPanel graphPanel;
|
||||
private final Map<EcuParameter, ChartPanel> chartMap = synchronizedMap(new HashMap<EcuParameter, ChartPanel>());
|
||||
private final Map<EcuParameter, XYSeries> seriesMap = synchronizedMap(new HashMap<EcuParameter, XYSeries>());
|
||||
private int loggerCount = 0;
|
||||
|
||||
public GraphUpdateHandler(JPanel graphPanel) {
|
||||
this.graphPanel = graphPanel;
|
||||
}
|
||||
|
||||
public void registerParam(EcuParameter ecuParam) {
|
||||
// add to charts
|
||||
final XYSeries series = new XYSeries(ecuParam.getName());
|
||||
//TODO: Make chart max item count configurable via settings
|
||||
series.setMaximumItemCount(1000);
|
||||
final XYDataset xyDataset = new XYSeriesCollection(series);
|
||||
final JFreeChart chart = ChartFactory.createXYLineChart(ecuParam.getName(), "Time (sec)", ecuParam.getName()
|
||||
+ " (" + ecuParam.getConvertor().getUnits() + ")", xyDataset, VERTICAL, false, true, false);
|
||||
ChartPanel chartPanel = new ChartPanel(chart, false, true, true, true, true);
|
||||
graphPanel.add(chartPanel);
|
||||
seriesMap.put(ecuParam, series);
|
||||
chartMap.put(ecuParam, chartPanel);
|
||||
makeCompactGrid(graphPanel, ++loggerCount, 1, 10, 10, 20, 20);
|
||||
repaintGraphPanel(2);
|
||||
}
|
||||
|
||||
public void handleParamUpdate(EcuParameter ecuParam, byte[] value, long timestamp) {
|
||||
// update chart
|
||||
XYSeries series = seriesMap.get(ecuParam);
|
||||
series.add(timestamp / 1000.0, ecuParam.getConvertor().convert(value));
|
||||
}
|
||||
|
||||
public void deregisterParam(EcuParameter ecuParam) {
|
||||
// remove from charts
|
||||
graphPanel.remove(chartMap.get(ecuParam));
|
||||
chartMap.remove(ecuParam);
|
||||
makeCompactGrid(graphPanel, --loggerCount, 1, 10, 10, 20, 20);
|
||||
repaintGraphPanel(1);
|
||||
}
|
||||
|
||||
private void repaintGraphPanel(int parentRepaintLevel) {
|
||||
if (loggerCount < parentRepaintLevel) {
|
||||
graphPanel.doLayout();
|
||||
graphPanel.repaint();
|
||||
} else {
|
||||
if (loggerCount == 1) {
|
||||
graphPanel.doLayout();
|
||||
}
|
||||
graphPanel.getParent().doLayout();
|
||||
graphPanel.getParent().repaint();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,28 @@
|
|||
package enginuity.logger.ui.handler;
|
||||
|
||||
import enginuity.logger.definition.EcuParameter;
|
||||
import enginuity.logger.ui.LoggerDataTableModel;
|
||||
|
||||
public final class LiveDataUpdateHandler implements ParameterUpdateHandler {
|
||||
private final LoggerDataTableModel dataTableModel;
|
||||
|
||||
public LiveDataUpdateHandler(LoggerDataTableModel dataTableModel) {
|
||||
this.dataTableModel = dataTableModel;
|
||||
}
|
||||
|
||||
public void registerParam(EcuParameter ecuParam) {
|
||||
// add to datatable
|
||||
dataTableModel.addParam(ecuParam);
|
||||
}
|
||||
|
||||
public void handleParamUpdate(EcuParameter ecuParam, byte[] value, long timestamp) {
|
||||
// update data table
|
||||
dataTableModel.updateParam(ecuParam, value);
|
||||
}
|
||||
|
||||
public void deregisterParam(EcuParameter ecuParam) {
|
||||
// remove from datatable
|
||||
dataTableModel.removeParam(ecuParam);
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,13 @@
|
|||
package enginuity.logger.ui.handler;
|
||||
|
||||
import enginuity.logger.definition.EcuParameter;
|
||||
|
||||
public interface ParameterUpdateHandler {
|
||||
|
||||
void registerParam(EcuParameter ecuParam);
|
||||
|
||||
void handleParamUpdate(EcuParameter ecuParam, byte[] value, long timestamp);
|
||||
|
||||
void deregisterParam(EcuParameter ecuParam);
|
||||
|
||||
}
|
|
@ -0,0 +1,7 @@
|
|||
package enginuity.logger.ui.handler;
|
||||
|
||||
public interface ParameterUpdateHandlerManager extends ParameterUpdateHandler {
|
||||
|
||||
void addHandler(ParameterUpdateHandler handler);
|
||||
|
||||
}
|
|
@ -0,0 +1,32 @@
|
|||
package enginuity.logger.ui.handler;
|
||||
|
||||
import enginuity.logger.definition.EcuParameter;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public final class ParameterUpdateHandlerManagerImpl implements ParameterUpdateHandlerManager {
|
||||
private final List<ParameterUpdateHandler> handlers = new ArrayList<ParameterUpdateHandler>();
|
||||
|
||||
public synchronized void addHandler(ParameterUpdateHandler handler) {
|
||||
handlers.add(handler);
|
||||
}
|
||||
|
||||
public synchronized void registerParam(EcuParameter ecuParam) {
|
||||
for (ParameterUpdateHandler handler : handlers) {
|
||||
handler.registerParam(ecuParam);
|
||||
}
|
||||
}
|
||||
|
||||
public synchronized void handleParamUpdate(EcuParameter ecuParam, byte[] value, long timestamp) {
|
||||
for (ParameterUpdateHandler handler : handlers) {
|
||||
handler.handleParamUpdate(ecuParam, value, timestamp);
|
||||
}
|
||||
}
|
||||
|
||||
public synchronized void deregisterParam(EcuParameter ecuParam) {
|
||||
for (ParameterUpdateHandler handler : handlers) {
|
||||
handler.deregisterParam(ecuParam);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -17,15 +17,8 @@ public final class ColorScaler {
|
|||
float[] minColorHSB = new float[3];
|
||||
float[] maxColorHSB = new float[3];
|
||||
|
||||
Color.RGBtoHSB(minColor.getRed(),
|
||||
minColor.getGreen(),
|
||||
minColor.getBlue(),
|
||||
minColorHSB);
|
||||
|
||||
Color.RGBtoHSB(maxColor.getRed(),
|
||||
maxColor.getGreen(),
|
||||
maxColor.getBlue(),
|
||||
maxColorHSB);
|
||||
rgbToHsb(minColor, minColorHSB);
|
||||
rgbToHsb(maxColor, maxColorHSB);
|
||||
|
||||
float h = minColorHSB[0] + (maxColorHSB[0] - minColorHSB[0]) * (float)scale;
|
||||
float s = minColorHSB[1] + (maxColorHSB[1] - minColorHSB[1]) * (float)scale;
|
||||
|
@ -34,4 +27,8 @@ public final class ColorScaler {
|
|||
return Color.getHSBColor(h, s, b);
|
||||
|
||||
}
|
||||
|
||||
private static void rgbToHsb(Color color, float[] colorHSB) {
|
||||
Color.RGBtoHSB(color.getRed(), color.getGreen(), color.getBlue(), colorHSB);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue