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:
kascade 2006-09-13 10:22:31 +00:00
parent eedf4fd76b
commit 1ebf3b307f
11 changed files with 110 additions and 29 deletions

View File

@ -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);
}

View File

@ -0,0 +1,7 @@
package enginuity.logger.definition;
public interface ConvertorUpdateListener {
void notifyConvertorUpdate(EcuData updatedEcuData);
}

View File

@ -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,18 +55,26 @@ public final class EcuDerivedParameterImpl implements EcuParameter {
}
public void selectConvertor(EcuDataConvertor convertor) {
if (convertor != getSelectedConvertor()) {
for (int i = 0; i < convertors.length; i++) {
EcuDerivedParameterConvertor parameterConvertor = convertors[i];
if (convertor == parameterConvertor) {
selectedConvertorIndex = i;
}
}
notifyUpdateListeners();
}
}
public EcuDataType getDataType() {
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);
}
}
}

View File

@ -2,6 +2,6 @@ package enginuity.logger.definition;
public interface EcuParameter extends EcuData {
EcuDataConvertor getSelectedConvertor();
void addConvertorUpdateListener(ConvertorUpdateListener listener);
}

View File

@ -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) {
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);
}
}
}

View File

@ -2,8 +2,6 @@ package enginuity.logger.definition;
public interface EcuSwitch extends EcuData {
EcuDataConvertor getSelectedConvertor();
boolean isFileLogController();
}

View File

@ -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]";
}

View File

@ -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();

View File

@ -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();
}

View File

@ -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();
}
}
}

View File

@ -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();
}
}