From 1ebf3b307fbbafd22427d7abdbbf696581c5c6f6 Mon Sep 17 00:00:00 2001 From: kascade Date: Wed, 13 Sep 2006 10:22:31 +0000 Subject: [PATCH] convertor update listeners added git-svn-id: http://svn.3splooges.com/romraider-arch/trunk@287 d2e2e1cd-ba16-0410-be16-b7c4453c7c2d --- src/enginuity/logger/EcuLogger.java | 31 ++++++++++++++----- .../definition/ConvertorUpdateListener.java | 7 +++++ .../definition/EcuDerivedParameterImpl.java | 26 +++++++++++++--- .../logger/definition/EcuParameter.java | 2 +- .../logger/definition/EcuParameterImpl.java | 27 +++++++++++++--- .../logger/definition/EcuSwitch.java | 2 -- .../logger/manager/QueryManagerImpl.java | 2 +- .../ui/handler/DashboardUpdateHandler.java | 6 +++- .../logger/ui/handler/FileUpdateHandler.java | 12 ++++--- .../logger/ui/handler/GraphUpdateHandler.java | 18 +++++++++-- .../ui/handler/LiveDataUpdateHandler.java | 6 +++- 11 files changed, 110 insertions(+), 29 deletions(-) create mode 100644 src/enginuity/logger/definition/ConvertorUpdateListener.java diff --git a/src/enginuity/logger/EcuLogger.java b/src/enginuity/logger/EcuLogger.java index ebe12a1f..8c55d488 100644 --- a/src/enginuity/logger/EcuLogger.java +++ b/src/enginuity/logger/EcuLogger.java @@ -43,7 +43,6 @@ import java.beans.PropertyChangeListener; import java.util.List; /* -TODO: finish multi-conversion support for ecu params (already defined in xml) TODO: add better debug logging, preferably to a file and switchable (on/off) TODO: finish dashboard tab TODO: add configuration screen (log file destination, etc) @@ -55,27 +54,40 @@ So much to do, so little time.... public final class EcuLogger extends JFrame implements WindowListener, PropertyChangeListener, MessageListener { private static final String HEADING_PARAMETERS = "Parameters"; private static final String HEADING_SWITCHES = "Switches"; + private final Settings settings = new Settings(); private final LoggerController controller = new LoggerControllerImpl(settings, this); private final JLabel statusBarLabel = new JLabel("Enginuity ECU Logger"); private final JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.BOTTOM); private final SerialPortComboBox portsComboBox = new SerialPortComboBox(settings); - private final LoggerDataTableModel dataTableModel = new LoggerDataTableModel(); - private final JPanel graphPanel = new JPanel(); - private final JPanel dashboardPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); + private final DataUpdateHandlerManager dataHandlerManager = new DataUpdateHandlerManagerImpl(); + private final ParameterRegistrationBroker dataTabBroker = new ParameterRegistrationBrokerImpl(controller, dataHandlerManager); private final ParameterListTableModel dataTabParamListTableModel = new ParameterListTableModel(dataTabBroker, HEADING_PARAMETERS); private final ParameterListTableModel dataTabSwitchListTableModel = new ParameterListTableModel(dataTabBroker, HEADING_SWITCHES); + private final DataUpdateHandlerManager graphHandlerManager = new DataUpdateHandlerManagerImpl(); private final ParameterRegistrationBroker graphTabBroker = new ParameterRegistrationBrokerImpl(controller, graphHandlerManager); private final ParameterListTableModel graphTabParamListTableModel = new ParameterListTableModel(graphTabBroker, HEADING_PARAMETERS); private final ParameterListTableModel graphTabSwitchListTableModel = new ParameterListTableModel(graphTabBroker, HEADING_SWITCHES); + private final DataUpdateHandlerManager dashboardHandlerManager = new DataUpdateHandlerManagerImpl(); private final ParameterRegistrationBroker dashboardTabBroker = new ParameterRegistrationBrokerImpl(controller, dashboardHandlerManager); private final ParameterListTableModel dashboardTabParamListTableModel = new ParameterListTableModel(dashboardTabBroker, HEADING_PARAMETERS); private final ParameterListTableModel dashboardTabSwitchListTableModel = new ParameterListTableModel(dashboardTabBroker, HEADING_SWITCHES); + private final FileUpdateHandler fileUpdateHandler = new FileUpdateHandler(settings); + + private final LoggerDataTableModel dataTableModel = new LoggerDataTableModel(); + private final LiveDataUpdateHandler liveDataUpdateHandler = new LiveDataUpdateHandler(dataTableModel); + + private final JPanel graphPanel = new JPanel(); + private final GraphUpdateHandler graphUpdateHandler = new GraphUpdateHandler(graphPanel); + + private final JPanel dashboardPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); + private final DashboardUpdateHandler dashboardUpdateHandler = new DashboardUpdateHandler(dashboardPanel); + public EcuLogger(String title) { super(title); @@ -129,6 +141,10 @@ public final class EcuLogger extends JFrame implements WindowListener, PropertyC dataTabParamListTableModel.addParam(ecuParam); graphTabParamListTableModel.addParam(ecuParam); dashboardTabParamListTableModel.addParam(ecuParam); + ecuParam.addConvertorUpdateListener(fileUpdateHandler); + ecuParam.addConvertorUpdateListener(liveDataUpdateHandler); + ecuParam.addConvertorUpdateListener(graphUpdateHandler); + ecuParam.addConvertorUpdateListener(dashboardUpdateHandler); } List ecuSwitches = dataLoader.getEcuSwitches(); for (EcuSwitch ecuSwitch : ecuSwitches) { @@ -143,12 +159,11 @@ public final class EcuLogger extends JFrame implements WindowListener, PropertyC } private void initParameterUpdateHandlers() { - FileUpdateHandler fileUpdateHandler = new FileUpdateHandler(settings); - dataHandlerManager.addHandler(new LiveDataUpdateHandler(dataTableModel)); + dataHandlerManager.addHandler(liveDataUpdateHandler); dataHandlerManager.addHandler(fileUpdateHandler); - graphHandlerManager.addHandler(new GraphUpdateHandler(graphPanel)); + graphHandlerManager.addHandler(graphUpdateHandler); graphHandlerManager.addHandler(fileUpdateHandler); - dashboardHandlerManager.addHandler(new DashboardUpdateHandler(dashboardPanel)); + dashboardHandlerManager.addHandler(dashboardUpdateHandler); dashboardHandlerManager.addHandler(fileUpdateHandler); } diff --git a/src/enginuity/logger/definition/ConvertorUpdateListener.java b/src/enginuity/logger/definition/ConvertorUpdateListener.java new file mode 100644 index 00000000..171e6a9d --- /dev/null +++ b/src/enginuity/logger/definition/ConvertorUpdateListener.java @@ -0,0 +1,7 @@ +package enginuity.logger.definition; + +public interface ConvertorUpdateListener { + + void notifyConvertorUpdate(EcuData updatedEcuData); + +} diff --git a/src/enginuity/logger/definition/EcuDerivedParameterImpl.java b/src/enginuity/logger/definition/EcuDerivedParameterImpl.java index e11f15a8..a6ac8e63 100644 --- a/src/enginuity/logger/definition/EcuDerivedParameterImpl.java +++ b/src/enginuity/logger/definition/EcuDerivedParameterImpl.java @@ -4,12 +4,16 @@ import static enginuity.logger.definition.EcuDataType.PARAMETER; import static enginuity.util.ParamChecker.checkNotNull; import static enginuity.util.ParamChecker.checkNotNullOrEmpty; +import java.util.HashSet; +import java.util.Set; + public final class EcuDerivedParameterImpl implements EcuParameter { private final String id; private final String name; private final String description; private final EcuDerivedParameterConvertor[] convertors; private final String[] addresses; + private final Set listeners = new HashSet(); private int selectedConvertorIndex = 0; public EcuDerivedParameterImpl(String id, String name, String description, EcuData[] ecuDatas, EcuDerivedParameterConvertor[] convertors) { @@ -51,11 +55,14 @@ public final class EcuDerivedParameterImpl implements EcuParameter { } public void selectConvertor(EcuDataConvertor convertor) { - for (int i = 0; i < convertors.length; i++) { - EcuDerivedParameterConvertor parameterConvertor = convertors[i]; - if (convertor == parameterConvertor) { - selectedConvertorIndex = i; + if (convertor != getSelectedConvertor()) { + for (int i = 0; i < convertors.length; i++) { + EcuDerivedParameterConvertor parameterConvertor = convertors[i]; + if (convertor == parameterConvertor) { + selectedConvertorIndex = i; + } } + notifyUpdateListeners(); } } @@ -63,6 +70,11 @@ public final class EcuDerivedParameterImpl implements EcuParameter { return PARAMETER; } + public void addConvertorUpdateListener(ConvertorUpdateListener listener) { + checkNotNull(listener, "listener"); + listeners.add(listener); + } + private String[] setAddresses(EcuData[] ecuDatas) { String[] addresses = new String[0]; for (EcuData ecuData : ecuDatas) { @@ -80,4 +92,10 @@ public final class EcuDerivedParameterImpl implements EcuParameter { convertor.setEcuDatas(ecuDatas); } } + + private void notifyUpdateListeners() { + for (ConvertorUpdateListener listener : listeners) { + listener.notifyConvertorUpdate(this); + } + } } diff --git a/src/enginuity/logger/definition/EcuParameter.java b/src/enginuity/logger/definition/EcuParameter.java index b669617d..79f8c8ae 100644 --- a/src/enginuity/logger/definition/EcuParameter.java +++ b/src/enginuity/logger/definition/EcuParameter.java @@ -2,6 +2,6 @@ package enginuity.logger.definition; public interface EcuParameter extends EcuData { - EcuDataConvertor getSelectedConvertor(); + void addConvertorUpdateListener(ConvertorUpdateListener listener); } diff --git a/src/enginuity/logger/definition/EcuParameterImpl.java b/src/enginuity/logger/definition/EcuParameterImpl.java index aafc3829..1daa7c42 100644 --- a/src/enginuity/logger/definition/EcuParameterImpl.java +++ b/src/enginuity/logger/definition/EcuParameterImpl.java @@ -4,12 +4,16 @@ import static enginuity.logger.definition.EcuDataType.PARAMETER; import static enginuity.util.ParamChecker.checkNotNull; import static enginuity.util.ParamChecker.checkNotNullOrEmpty; +import java.util.HashSet; +import java.util.Set; + public final class EcuParameterImpl implements EcuParameter { private final String id; private final String name; private final String description; private final String[] addresses; private final EcuDataConvertor[] convertors; + private final Set listeners = new HashSet(); private int selectedConvertorIndex = 0; public EcuParameterImpl(String id, String name, String description, String[] address, EcuDataConvertor[] convertors) { @@ -50,15 +54,30 @@ public final class EcuParameterImpl implements EcuParameter { } public void selectConvertor(EcuDataConvertor convertor) { - for (int i = 0; i < convertors.length; i++) { - EcuDataConvertor dataConvertor = convertors[i]; - if (convertor == dataConvertor) { - selectedConvertorIndex = i; + if (convertor != getSelectedConvertor()) { + for (int i = 0; i < convertors.length; i++) { + EcuDataConvertor dataConvertor = convertors[i]; + if (convertor == dataConvertor) { + selectedConvertorIndex = i; + } } + notifyUpdateListeners(); } } public EcuDataType getDataType() { return PARAMETER; } + + public void addConvertorUpdateListener(ConvertorUpdateListener listener) { + checkNotNull(listener, "listener"); + listeners.add(listener); + } + + private void notifyUpdateListeners() { + for (ConvertorUpdateListener listener : listeners) { + listener.notifyConvertorUpdate(this); + } + } + } diff --git a/src/enginuity/logger/definition/EcuSwitch.java b/src/enginuity/logger/definition/EcuSwitch.java index 08d25b07..55679f09 100644 --- a/src/enginuity/logger/definition/EcuSwitch.java +++ b/src/enginuity/logger/definition/EcuSwitch.java @@ -2,8 +2,6 @@ package enginuity.logger.definition; public interface EcuSwitch extends EcuData { - EcuDataConvertor getSelectedConvertor(); - boolean isFileLogController(); } diff --git a/src/enginuity/logger/manager/QueryManagerImpl.java b/src/enginuity/logger/manager/QueryManagerImpl.java index 5c163f78..3efc5b10 100644 --- a/src/enginuity/logger/manager/QueryManagerImpl.java +++ b/src/enginuity/logger/manager/QueryManagerImpl.java @@ -96,7 +96,7 @@ public final class QueryManagerImpl implements QueryManager { } private String buildStatsMessage(long start, int count) { - double duration = ((double) (System.currentTimeMillis() - start)) / 1000D; + double duration = ((double) (System.currentTimeMillis() - start)) / 1000.0; return "Logging [Total queries sent: " + count + ", Queries per second: " + format.format(((double) count) / duration) + ", Avg. Query Time: " + format.format(duration / ((double) count)) + "s]"; } diff --git a/src/enginuity/logger/ui/handler/DashboardUpdateHandler.java b/src/enginuity/logger/ui/handler/DashboardUpdateHandler.java index 8971dfa0..df66bd46 100644 --- a/src/enginuity/logger/ui/handler/DashboardUpdateHandler.java +++ b/src/enginuity/logger/ui/handler/DashboardUpdateHandler.java @@ -1,5 +1,6 @@ package enginuity.logger.ui.handler; +import enginuity.logger.definition.ConvertorUpdateListener; import enginuity.logger.definition.EcuData; import enginuity.logger.definition.EcuDataConvertor; @@ -10,7 +11,7 @@ import static java.util.Collections.synchronizedMap; import java.util.HashMap; import java.util.Map; -public final class DashboardUpdateHandler implements DataUpdateHandler { +public final class DashboardUpdateHandler implements DataUpdateHandler, ConvertorUpdateListener { private final JPanel dashboardPanel; private final Map gauges = synchronizedMap(new HashMap()); @@ -44,6 +45,9 @@ public final class DashboardUpdateHandler implements DataUpdateHandler { public void cleanUp() { } + public void notifyConvertorUpdate(EcuData updatedEcuData) { + } + private void repaintDashboardPanel() { dashboardPanel.doLayout(); dashboardPanel.repaint(); diff --git a/src/enginuity/logger/ui/handler/FileUpdateHandler.java b/src/enginuity/logger/ui/handler/FileUpdateHandler.java index 720a5f16..968529c3 100644 --- a/src/enginuity/logger/ui/handler/FileUpdateHandler.java +++ b/src/enginuity/logger/ui/handler/FileUpdateHandler.java @@ -1,6 +1,7 @@ package enginuity.logger.ui.handler; import enginuity.Settings; +import enginuity.logger.definition.ConvertorUpdateListener; import enginuity.logger.definition.EcuData; import enginuity.logger.definition.EcuDataConvertor; import enginuity.logger.definition.EcuSwitch; @@ -14,7 +15,7 @@ import java.util.LinkedList; import java.util.List; import java.util.Map; -public final class FileUpdateHandler implements DataUpdateHandler { +public final class FileUpdateHandler implements DataUpdateHandler, ConvertorUpdateListener { private final FileLogger fileLogger; private final List ecuDatas = synchronizedList(new LinkedList()); private Line currentLine = new Line(ecuDatas); @@ -53,6 +54,9 @@ public final class FileUpdateHandler implements DataUpdateHandler { fileLogger.stop(); } + public void notifyConvertorUpdate(EcuData updatedEcuData) { + } + private void checkStartStopFileLogging(EcuData ecuData, int value) { if (ecuData instanceof EcuSwitch) { EcuSwitch ecuSwitch = (EcuSwitch) ecuData; @@ -103,7 +107,7 @@ public final class FileUpdateHandler implements DataUpdateHandler { public String values() { StringBuilder buffer = new StringBuilder(); - buffer.append(lastTimestamp / 1000.0); + buffer.append(lastTimestamp); for (EcuData ecuData : ecuDataValues.keySet()) { String value = ecuDataValues.get(ecuData); buffer.append(DELIMITER).append(value); @@ -113,9 +117,9 @@ public final class FileUpdateHandler implements DataUpdateHandler { public String headers() { StringBuilder buffer = new StringBuilder(); - buffer.append("Timestamp"); + buffer.append("Time"); for (EcuData ecuData : ecuDataValues.keySet()) { - buffer.append(DELIMITER).append(ecuData.getName()); + buffer.append(DELIMITER).append(ecuData.getName()).append(" (").append(ecuData.getSelectedConvertor().getUnits()).append(')'); } return buffer.toString(); } diff --git a/src/enginuity/logger/ui/handler/GraphUpdateHandler.java b/src/enginuity/logger/ui/handler/GraphUpdateHandler.java index e379ba59..69ac384b 100644 --- a/src/enginuity/logger/ui/handler/GraphUpdateHandler.java +++ b/src/enginuity/logger/ui/handler/GraphUpdateHandler.java @@ -1,5 +1,6 @@ package enginuity.logger.ui.handler; +import enginuity.logger.definition.ConvertorUpdateListener; import enginuity.logger.definition.EcuData; import static enginuity.logger.ui.SpringUtilities.makeCompactGrid; import org.jfree.chart.ChartFactory; @@ -15,7 +16,7 @@ import static java.util.Collections.synchronizedMap; import java.util.HashMap; import java.util.Map; -public final class GraphUpdateHandler implements DataUpdateHandler { +public final class GraphUpdateHandler implements DataUpdateHandler, ConvertorUpdateListener { private final JPanel graphPanel; private final Map chartMap = synchronizedMap(new HashMap()); private final Map seriesMap = synchronizedMap(new HashMap()); @@ -31,8 +32,8 @@ public final class GraphUpdateHandler implements DataUpdateHandler { //TODO: Make chart max item count configurable via settings series.setMaximumItemCount(100); final XYDataset xyDataset = new XYSeriesCollection(series); - final JFreeChart chart = ChartFactory.createXYLineChart(ecuData.getName(), "Time (sec)", ecuData.getName() - + " (" + ecuData.getSelectedConvertor().getUnits() + ")", xyDataset, VERTICAL, false, true, false); + final JFreeChart chart = ChartFactory.createXYLineChart(ecuData.getName(), "Time (sec)", buildRangeAxisTitle(ecuData), xyDataset, + VERTICAL, false, true, false); ChartPanel chartPanel = new ChartPanel(chart, false, true, true, true, true); graphPanel.add(chartPanel); seriesMap.put(ecuData, series); @@ -58,6 +59,16 @@ public final class GraphUpdateHandler implements DataUpdateHandler { public void cleanUp() { } + public void notifyConvertorUpdate(EcuData updatedEcuData) { + seriesMap.get(updatedEcuData).clear(); + JFreeChart chart = chartMap.get(updatedEcuData).getChart(); + chart.getXYPlot().getRangeAxis().setLabel(buildRangeAxisTitle(updatedEcuData)); + } + + private String buildRangeAxisTitle(EcuData ecuData) { + return ecuData.getName() + " (" + ecuData.getSelectedConvertor().getUnits() + ")"; + } + private void repaintGraphPanel(int parentRepaintLevel) { if (loggerCount < parentRepaintLevel) { graphPanel.doLayout(); @@ -70,4 +81,5 @@ public final class GraphUpdateHandler implements DataUpdateHandler { graphPanel.getParent().repaint(); } } + } diff --git a/src/enginuity/logger/ui/handler/LiveDataUpdateHandler.java b/src/enginuity/logger/ui/handler/LiveDataUpdateHandler.java index 5073f5b9..aee670e5 100644 --- a/src/enginuity/logger/ui/handler/LiveDataUpdateHandler.java +++ b/src/enginuity/logger/ui/handler/LiveDataUpdateHandler.java @@ -1,9 +1,10 @@ package enginuity.logger.ui.handler; +import enginuity.logger.definition.ConvertorUpdateListener; import enginuity.logger.definition.EcuData; import enginuity.logger.ui.LoggerDataTableModel; -public final class LiveDataUpdateHandler implements DataUpdateHandler { +public final class LiveDataUpdateHandler implements DataUpdateHandler, ConvertorUpdateListener { private final LoggerDataTableModel dataTableModel; public LiveDataUpdateHandler(LoggerDataTableModel dataTableModel) { @@ -28,4 +29,7 @@ public final class LiveDataUpdateHandler implements DataUpdateHandler { public void cleanUp() { } + public void notifyConvertorUpdate(EcuData updatedEcuData) { + dataTableModel.fireTableDataChanged(); + } }