From de4d74ef35d1ee8bdb58a860c9bedae0f84b8f1b Mon Sep 17 00:00:00 2001 From: kascade Date: Wed, 18 Apr 2007 05:28:17 +0000 Subject: [PATCH] simplified data handling git-svn-id: http://svn.3splooges.com/romraider-arch/trunk@622 d2e2e1cd-ba16-0410-be16-b7c4453c7c2d --- src/enginuity/logger/ecu/EcuLogger.java | 57 ++++++------- .../controller/LoggerControllerImpl.java | 8 +- .../ecu/comms/manager/QueryManagerImpl.java | 51 ++++++++---- .../ui/handler/DataUpdateHandlerManager.java | 12 ++- .../handler/DataUpdateHandlerManagerImpl.java | 7 -- .../DataUpdateHandlerThreadWrapper.java | 81 ------------------- src/enginuity/util/ThreadUtil.java | 10 +++ 7 files changed, 83 insertions(+), 143 deletions(-) delete mode 100644 src/enginuity/logger/ecu/ui/handler/DataUpdateHandlerThreadWrapper.java diff --git a/src/enginuity/logger/ecu/EcuLogger.java b/src/enginuity/logger/ecu/EcuLogger.java index fffd19bf..61bf8af4 100644 --- a/src/enginuity/logger/ecu/EcuLogger.java +++ b/src/enginuity/logger/ecu/EcuLogger.java @@ -47,10 +47,8 @@ import enginuity.logger.ecu.ui.EcuDataComparator; import enginuity.logger.ecu.ui.MessageListener; import enginuity.logger.ecu.ui.SerialPortComboBox; import enginuity.logger.ecu.ui.StatusIndicator; -import enginuity.logger.ecu.ui.handler.DataUpdateHandler; import enginuity.logger.ecu.ui.handler.DataUpdateHandlerManager; import enginuity.logger.ecu.ui.handler.DataUpdateHandlerManagerImpl; -import enginuity.logger.ecu.ui.handler.DataUpdateHandlerThreadWrapper; import enginuity.logger.ecu.ui.handler.dash.DashboardUpdateHandler; import enginuity.logger.ecu.ui.handler.file.FileUpdateHandlerImpl; import enginuity.logger.ecu.ui.handler.graph.GraphUpdateHandler; @@ -141,7 +139,6 @@ public final class EcuLogger extends JFrame implements WindowListener, PropertyC private JLabel statsLabel; private JTabbedPane tabbedPane; private SerialPortComboBox portsComboBox; - private DataUpdateHandlerManager dataUpdateHandlerManager; private DataUpdateHandlerManager dataHandlerManager; private DataRegistrationBroker dataTabBroker; private ParameterListTableModel dataTabParamListTableModel; @@ -199,8 +196,15 @@ public final class EcuLogger extends JFrame implements WindowListener, PropertyC } } }; - dataUpdateHandlerManager = new DataUpdateHandlerManagerImpl(); - controller = new LoggerControllerImpl(settings, ecuInitCallback, this, dataUpdateHandlerManager); + fileUpdateHandler = new FileUpdateHandlerImpl(settings, this); + dataTableModel = new LiveDataTableModel(); + liveDataUpdateHandler = new LiveDataUpdateHandler(dataTableModel); + graphPanel = new JPanel(new BorderLayout(2, 2)); + graphUpdateHandler = new GraphUpdateHandler(graphPanel); + dashboardPanel = new JPanel(new FlowLayout(FlowLayout.CENTER, 3, 3)); + dashboardUpdateHandler = new DashboardUpdateHandler(dashboardPanel); + controller = new LoggerControllerImpl(settings, ecuInitCallback, this, liveDataUpdateHandler, + graphUpdateHandler, dashboardUpdateHandler, fileUpdateHandler, TableUpdateHandler.getInstance()); messageLabel = new JLabel(ENGINUITY_ECU_LOGGER_TITLE); ecuIdLabel = new JLabel(buildEcuIdLabelText()); statsLabel = buildStatsLabel(); @@ -221,13 +225,6 @@ public final class EcuLogger extends JFrame implements WindowListener, PropertyC dashboardTabParamListTableModel = new ParameterListTableModel(dashboardTabBroker, HEADING_PARAMETERS); dashboardTabSwitchListTableModel = new ParameterListTableModel(dashboardTabBroker, HEADING_SWITCHES); dashboardTabExternalListTableModel = new ParameterListTableModel(dashboardTabBroker, HEADING_EXTERNAL); - fileUpdateHandler = new FileUpdateHandlerImpl(settings, this); - dataTableModel = new LiveDataTableModel(); - liveDataUpdateHandler = new LiveDataUpdateHandler(dataTableModel); - graphPanel = new JPanel(new BorderLayout(2, 2)); - graphUpdateHandler = new GraphUpdateHandler(graphPanel); - dashboardPanel = new JPanel(new FlowLayout(FlowLayout.CENTER, 3, 3)); - dashboardUpdateHandler = new DashboardUpdateHandler(dashboardPanel); } private void initControllerListeners() { @@ -264,7 +261,8 @@ public final class EcuLogger extends JFrame implements WindowListener, PropertyC private void loadLoggerConfig() { try { EcuDataLoader dataLoader = new EcuDataLoaderImpl(); - dataLoader.loadFromXml(settings.getLoggerConfigFilePath(), settings.getLoggerProtocol(), settings.getFileLoggingControllerSwitchId(), ecuInit); + dataLoader.loadFromXml(settings.getLoggerConfigFilePath(), settings.getLoggerProtocol(), + settings.getFileLoggingControllerSwitchId(), ecuInit); List ecuParams = dataLoader.getEcuParameters(); addConvertorUpdateListeners(ecuParams); loadEcuParams(ecuParams); @@ -482,26 +480,15 @@ public final class EcuLogger extends JFrame implements WindowListener, PropertyC } private void initDataUpdateHandlers() { - DataUpdateHandler threadedFileUpdateHandler = startHandlerInThread(fileUpdateHandler); - dataHandlerManager.addHandler(startHandlerInThread(liveDataUpdateHandler)); - dataHandlerManager.addHandler(threadedFileUpdateHandler); - dataHandlerManager.addHandler(startHandlerInThread(TableUpdateHandler.getInstance())); - graphHandlerManager.addHandler(startHandlerInThread(graphUpdateHandler)); - graphHandlerManager.addHandler(threadedFileUpdateHandler); - dashboardHandlerManager.addHandler(startHandlerInThread(dashboardUpdateHandler)); - dashboardHandlerManager.addHandler(threadedFileUpdateHandler); - - dataUpdateHandlerManager.addHandler(dataHandlerManager); - dataUpdateHandlerManager.addHandler(graphHandlerManager); - dataUpdateHandlerManager.addHandler(dashboardHandlerManager); - } - - private DataUpdateHandler startHandlerInThread(DataUpdateHandler handler) { - DataUpdateHandlerThreadWrapper runnableHandler = new DataUpdateHandlerThreadWrapper(handler); - Thread thread = new Thread(runnableHandler); - thread.setDaemon(true); - thread.start(); - return runnableHandler; + dataHandlerManager.addHandler(liveDataUpdateHandler); + dataHandlerManager.addHandler(fileUpdateHandler); + dataHandlerManager.addHandler(TableUpdateHandler.getInstance()); + graphHandlerManager.addHandler(graphUpdateHandler); + graphHandlerManager.addHandler(fileUpdateHandler); + graphHandlerManager.addHandler(TableUpdateHandler.getInstance()); + dashboardHandlerManager.addHandler(dashboardUpdateHandler); + dashboardHandlerManager.addHandler(fileUpdateHandler); + dashboardHandlerManager.addHandler(TableUpdateHandler.getInstance()); } private JComponent buildTabbedPane() { @@ -786,7 +773,9 @@ public final class EcuLogger extends JFrame implements WindowListener, PropertyC } private void cleanUpUpdateHandlers() { - dataUpdateHandlerManager.cleanUp(); + dataHandlerManager.cleanUp(); + graphHandlerManager.cleanUp(); + dashboardHandlerManager.cleanUp(); } public Settings getSettings() { diff --git a/src/enginuity/logger/ecu/comms/controller/LoggerControllerImpl.java b/src/enginuity/logger/ecu/comms/controller/LoggerControllerImpl.java index aa756718..e0f2c0f3 100644 --- a/src/enginuity/logger/ecu/comms/controller/LoggerControllerImpl.java +++ b/src/enginuity/logger/ecu/comms/controller/LoggerControllerImpl.java @@ -29,16 +29,16 @@ import enginuity.logger.ecu.definition.EcuSwitch; import enginuity.logger.ecu.definition.LoggerData; import enginuity.logger.ecu.ui.MessageListener; import enginuity.logger.ecu.ui.StatusChangeListener; -import enginuity.logger.ecu.ui.handler.DataUpdateHandlerManager; +import enginuity.logger.ecu.ui.handler.DataUpdateHandler; import static enginuity.util.ParamChecker.checkNotNull; public final class LoggerControllerImpl implements LoggerController { private final QueryManager queryManager; public LoggerControllerImpl(Settings settings, EcuInitCallback ecuInitCallback, MessageListener messageListener, - DataUpdateHandlerManager dataUpdateHandlerManager) { - checkNotNull(settings, ecuInitCallback, messageListener, dataUpdateHandlerManager); - queryManager = new QueryManagerImpl(settings, ecuInitCallback, messageListener, dataUpdateHandlerManager); + DataUpdateHandler... dataUpdateHandlers) { + checkNotNull(settings, ecuInitCallback, messageListener, dataUpdateHandlers); + queryManager = new QueryManagerImpl(settings, ecuInitCallback, messageListener, dataUpdateHandlers); } public synchronized void addListener(StatusChangeListener listener) { diff --git a/src/enginuity/logger/ecu/comms/manager/QueryManagerImpl.java b/src/enginuity/logger/ecu/comms/manager/QueryManagerImpl.java index 73ef8284..a6090eda 100644 --- a/src/enginuity/logger/ecu/comms/manager/QueryManagerImpl.java +++ b/src/enginuity/logger/ecu/comms/manager/QueryManagerImpl.java @@ -41,9 +41,10 @@ import enginuity.logger.ecu.definition.ExternalData; import enginuity.logger.ecu.definition.LoggerData; import enginuity.logger.ecu.ui.MessageListener; import enginuity.logger.ecu.ui.StatusChangeListener; -import enginuity.logger.ecu.ui.handler.DataUpdateHandlerManager; +import enginuity.logger.ecu.ui.handler.DataUpdateHandler; import static enginuity.util.HexUtil.asHex; import static enginuity.util.ParamChecker.checkNotNull; +import static enginuity.util.ThreadUtil.runAsDaemon; import static enginuity.util.ThreadUtil.sleep; import javax.swing.SwingUtilities; @@ -65,19 +66,19 @@ public final class QueryManagerImpl implements QueryManager { private final Settings settings; private final EcuInitCallback ecuInitCallback; private final MessageListener messageListener; - private final DataUpdateHandlerManager dataUpdateHandlerManager; + private final DataUpdateHandler[] dataUpdateHandlers; private EcuQuery fileLoggerQuery; private Thread queryManagerThread; private boolean started; private boolean stop; public QueryManagerImpl(Settings settings, EcuInitCallback ecuInitCallback, MessageListener messageListener, - DataUpdateHandlerManager dataUpdateHandlerManager) { - checkNotNull(settings, ecuInitCallback, messageListener, dataUpdateHandlerManager); + DataUpdateHandler... dataUpdateHandlers) { + checkNotNull(settings, ecuInitCallback, messageListener, dataUpdateHandlers); this.settings = settings; this.ecuInitCallback = ecuInitCallback; this.messageListener = messageListener; - this.dataUpdateHandlerManager = dataUpdateHandlerManager; + this.dataUpdateHandlers = dataUpdateHandlers; } public synchronized void addListener(StatusChangeListener listener) { @@ -173,17 +174,9 @@ public final class QueryManagerImpl implements QueryManager { messageListener.reportMessage("Select parameters to be logged..."); sleep(1000L); } else { - List ecuQueries = filterEcuQueries(queryMap.values()); - if (fileLoggerQuery != null) { - ecuQueries.add(fileLoggerQuery); - } - txManager.sendQueries(ecuQueries); - List externalQueries = filterExternalQueries(queryMap.values()); - for (ExternalQuery externalQuery : externalQueries) { - //FIXME: This is a hack!! - externalQuery.setResponse(externalQuery.getLoggerData().getSelectedConvertor().convert(null)); - } - dataUpdateHandlerManager.handleDataUpdate(buildResponse(queryMap.values())); + sendEcuQueries(txManager); + sendExternalQueries(); + handleQueryResponse(); count++; messageListener.reportMessage("Querying ECU..."); messageListener.reportStats(buildStatsMessage(start, count)); @@ -196,6 +189,32 @@ public final class QueryManagerImpl implements QueryManager { } } + private void sendEcuQueries(TransmissionManager txManager) { + List ecuQueries = filterEcuQueries(queryMap.values()); + if (fileLoggerQuery != null) { + ecuQueries.add(fileLoggerQuery); + } + txManager.sendQueries(ecuQueries); + } + + private void sendExternalQueries() { + List externalQueries = filterExternalQueries(queryMap.values()); + for (ExternalQuery externalQuery : externalQueries) { + //FIXME: This is a hack!! + externalQuery.setResponse(externalQuery.getLoggerData().getSelectedConvertor().convert(null)); + } + } + + private void handleQueryResponse() { + for (final DataUpdateHandler dataUpdateHandler : dataUpdateHandlers) { + runAsDaemon(new Runnable() { + public void run() { + dataUpdateHandler.handleDataUpdate(buildResponse(queryMap.values())); + } + }); + } + } + private Response buildResponse(Collection queries) { Response response = new ResponseImpl(); for (Query query : queries) { diff --git a/src/enginuity/logger/ecu/ui/handler/DataUpdateHandlerManager.java b/src/enginuity/logger/ecu/ui/handler/DataUpdateHandlerManager.java index b732cba0..a8787e1f 100644 --- a/src/enginuity/logger/ecu/ui/handler/DataUpdateHandlerManager.java +++ b/src/enginuity/logger/ecu/ui/handler/DataUpdateHandlerManager.java @@ -21,8 +21,18 @@ package enginuity.logger.ecu.ui.handler; -public interface DataUpdateHandlerManager extends DataUpdateHandler { +import enginuity.logger.ecu.definition.LoggerData; + +public interface DataUpdateHandlerManager { void addHandler(DataUpdateHandler handler); + void registerData(LoggerData loggerData); + + void deregisterData(LoggerData loggerData); + + void cleanUp(); + + void reset(); + } diff --git a/src/enginuity/logger/ecu/ui/handler/DataUpdateHandlerManagerImpl.java b/src/enginuity/logger/ecu/ui/handler/DataUpdateHandlerManagerImpl.java index 4a74f527..fe4e8955 100644 --- a/src/enginuity/logger/ecu/ui/handler/DataUpdateHandlerManagerImpl.java +++ b/src/enginuity/logger/ecu/ui/handler/DataUpdateHandlerManagerImpl.java @@ -21,7 +21,6 @@ package enginuity.logger.ecu.ui.handler; -import enginuity.logger.ecu.comms.query.Response; import enginuity.logger.ecu.definition.LoggerData; import java.util.ArrayList; @@ -40,12 +39,6 @@ public final class DataUpdateHandlerManagerImpl implements DataUpdateHandlerMana } } - public synchronized void handleDataUpdate(Response response) { - for (DataUpdateHandler handler : handlers) { - handler.handleDataUpdate(response); - } - } - public synchronized void deregisterData(LoggerData loggerData) { for (DataUpdateHandler handler : handlers) { handler.deregisterData(loggerData); diff --git a/src/enginuity/logger/ecu/ui/handler/DataUpdateHandlerThreadWrapper.java b/src/enginuity/logger/ecu/ui/handler/DataUpdateHandlerThreadWrapper.java deleted file mode 100644 index 5576fc3c..00000000 --- a/src/enginuity/logger/ecu/ui/handler/DataUpdateHandlerThreadWrapper.java +++ /dev/null @@ -1,81 +0,0 @@ -/* - * - * Enginuity Open-Source Tuning, Logging and Reflashing - * Copyright (C) 2006 Enginuity.org - * - * 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 2 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. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - * - */ - -package enginuity.logger.ecu.ui.handler; - -import enginuity.logger.ecu.comms.query.Response; -import enginuity.logger.ecu.definition.LoggerData; -import static enginuity.util.ThreadUtil.sleep; - -import java.util.ArrayList; -import static java.util.Collections.synchronizedList; -import java.util.List; - -public final class DataUpdateHandlerThreadWrapper implements DataUpdateHandler, Runnable { - private final List updateList = synchronizedList(new ArrayList()); - private final List workingList = synchronizedList(new ArrayList()); - private final DataUpdateHandler wrappee; - private boolean stop = false; - - public DataUpdateHandlerThreadWrapper(DataUpdateHandler wrappee) { - this.wrappee = wrappee; - } - - public void registerData(LoggerData loggerData) { - wrappee.registerData(loggerData); - } - - public synchronized void handleDataUpdate(Response response) { - updateList.add(response); - } - - public void deregisterData(LoggerData loggerData) { - wrappee.deregisterData(loggerData); - } - - public void cleanUp() { - stop = true; - wrappee.cleanUp(); - } - - public void reset() { - wrappee.reset(); - } - - public void run() { - while (!stop) { - updateWorkingList(); - for (final Response response : workingList) { - wrappee.handleDataUpdate(response); - } - sleep(3); - } - } - - private synchronized void updateWorkingList() { - workingList.clear(); - for (Response response : updateList) { - workingList.add(response); - } - updateList.clear(); - } - -} diff --git a/src/enginuity/util/ThreadUtil.java b/src/enginuity/util/ThreadUtil.java index 75f17247..54c5f09c 100644 --- a/src/enginuity/util/ThreadUtil.java +++ b/src/enginuity/util/ThreadUtil.java @@ -36,4 +36,14 @@ public final class ThreadUtil { } } + public static void run(Runnable runnable) { + new Thread(runnable).start(); + } + + public static void runAsDaemon(Runnable runnable) { + Thread thread = new Thread(runnable); + thread.setDaemon(true); + thread.start(); + } + }