mirror of https://github.com/rusefi/RomRaider.git
convertor update listeners added
git-svn-id: http://svn.3splooges.com/romraider-arch/trunk@287 d2e2e1cd-ba16-0410-be16-b7c4453c7c2d
This commit is contained in:
parent
eedf4fd76b
commit
1ebf3b307f
|
@ -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<EcuSwitch> 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);
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,7 @@
|
|||
package enginuity.logger.definition;
|
||||
|
||||
public interface ConvertorUpdateListener {
|
||||
|
||||
void notifyConvertorUpdate(EcuData updatedEcuData);
|
||||
|
||||
}
|
|
@ -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<ConvertorUpdateListener> listeners = new HashSet<ConvertorUpdateListener>();
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,6 +2,6 @@ package enginuity.logger.definition;
|
|||
|
||||
public interface EcuParameter extends EcuData {
|
||||
|
||||
EcuDataConvertor getSelectedConvertor();
|
||||
void addConvertorUpdateListener(ConvertorUpdateListener listener);
|
||||
|
||||
}
|
||||
|
|
|
@ -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<ConvertorUpdateListener> listeners = new HashSet<ConvertorUpdateListener>();
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -2,8 +2,6 @@ package enginuity.logger.definition;
|
|||
|
||||
public interface EcuSwitch extends EcuData {
|
||||
|
||||
EcuDataConvertor getSelectedConvertor();
|
||||
|
||||
boolean isFileLogController();
|
||||
|
||||
}
|
||||
|
|
|
@ -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]";
|
||||
}
|
||||
|
|
|
@ -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<EcuData, JLabel> gauges = synchronizedMap(new HashMap<EcuData, JLabel>());
|
||||
|
||||
|
@ -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();
|
||||
|
|
|
@ -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<EcuData> ecuDatas = synchronizedList(new LinkedList<EcuData>());
|
||||
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();
|
||||
}
|
||||
|
|
|
@ -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<EcuData, ChartPanel> chartMap = synchronizedMap(new HashMap<EcuData, ChartPanel>());
|
||||
private final Map<EcuData, XYSeries> seriesMap = synchronizedMap(new HashMap<EcuData, XYSeries>());
|
||||
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue