diff --git a/profile.dtd b/profile.dtd index 7d3a3e01..e5d623c3 100644 --- a/profile.dtd +++ b/profile.dtd @@ -13,7 +13,7 @@ - + @@ -21,7 +21,7 @@ - + @@ -29,6 +29,6 @@ - + - + diff --git a/src/com/romraider/Settings.java b/src/com/romraider/Settings.java index 5ba91a9a..3cfb41c1 100644 --- a/src/com/romraider/Settings.java +++ b/src/com/romraider/Settings.java @@ -81,6 +81,7 @@ public class Settings implements Serializable { private int loggerSelectedTabIndex = 0; private ConnectionProperties loggerConnectionProperties; private Map loggerEcuDefinitionMap; + private Map loggerPluginPorts; public Settings() { @@ -420,4 +421,12 @@ public class Settings implements Serializable { public int getLoggerSelectedTabIndex() { return loggerSelectedTabIndex; } + + public Map getLoggerPluginPorts() { + return loggerPluginPorts; + } + + public void setLoggerPluginPorts(Map loggerPluginPorts) { + this.loggerPluginPorts = loggerPluginPorts; + } } \ No newline at end of file diff --git a/src/com/romraider/logger/aem/plugin/AemDataSource.java b/src/com/romraider/logger/aem/plugin/AemDataSource.java index eebfe786..ddb046f3 100644 --- a/src/com/romraider/logger/aem/plugin/AemDataSource.java +++ b/src/com/romraider/logger/aem/plugin/AemDataSource.java @@ -25,8 +25,8 @@ import com.romraider.logger.ecu.EcuLogger; import com.romraider.logger.ecu.external.ExternalDataItem; import com.romraider.logger.ecu.external.ExternalDataSource; import static com.romraider.util.ThreadUtil.runAsDaemon; -import javax.swing.Action; import static java.util.Arrays.asList; +import javax.swing.Action; import java.util.List; public final class AemDataSource implements ExternalDataSource { @@ -34,6 +34,10 @@ public final class AemDataSource implements ExternalDataSource { private AemDataItem dataItem = new AemDataItem(); private AemRunner runner; + public String getId() { + return getClass().getName(); + } + public String getName() { return "AEM UEGO"; } diff --git a/src/com/romraider/logger/ecu/EcuLogger.java b/src/com/romraider/logger/ecu/EcuLogger.java index 345eab4e..3ac413a2 100644 --- a/src/com/romraider/logger/ecu/EcuLogger.java +++ b/src/com/romraider/logger/ecu/EcuLogger.java @@ -91,39 +91,6 @@ import com.romraider.util.SettingsManagerImpl; import com.romraider.util.ThreadUtil; import static com.romraider.util.ThreadUtil.runAsDaemon; import static com.romraider.util.ThreadUtil.sleep; -import org.apache.log4j.Logger; -import javax.swing.AbstractAction; -import static javax.swing.BorderFactory.createLoweredBevelBorder; -import javax.swing.ImageIcon; -import javax.swing.JButton; -import javax.swing.JComponent; -import static javax.swing.JComponent.WHEN_IN_FOCUSED_WINDOW; -import javax.swing.JFrame; -import javax.swing.JLabel; -import static javax.swing.JLabel.RIGHT; -import javax.swing.JMenuBar; -import static javax.swing.JOptionPane.DEFAULT_OPTION; -import static javax.swing.JOptionPane.INFORMATION_MESSAGE; -import static javax.swing.JOptionPane.WARNING_MESSAGE; -import static javax.swing.JOptionPane.showMessageDialog; -import static javax.swing.JOptionPane.showOptionDialog; -import javax.swing.JPanel; -import javax.swing.JScrollPane; -import static javax.swing.JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED; -import static javax.swing.JScrollPane.HORIZONTAL_SCROLLBAR_NEVER; -import static javax.swing.JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED; -import javax.swing.JSeparator; -import static javax.swing.JSeparator.VERTICAL; -import javax.swing.JSplitPane; -import static javax.swing.JSplitPane.HORIZONTAL_SPLIT; -import javax.swing.JTabbedPane; -import static javax.swing.JTabbedPane.BOTTOM; -import javax.swing.JTable; -import javax.swing.JToggleButton; -import static javax.swing.KeyStroke.getKeyStroke; -import static javax.swing.SwingUtilities.invokeLater; -import javax.swing.table.TableColumn; -import java.awt.BorderLayout; import static java.awt.BorderLayout.CENTER; import static java.awt.BorderLayout.EAST; import static java.awt.BorderLayout.NORTH; @@ -131,6 +98,41 @@ import static java.awt.BorderLayout.SOUTH; import static java.awt.BorderLayout.WEST; import static java.awt.Color.BLACK; import static java.awt.Color.RED; +import static java.lang.System.currentTimeMillis; +import static java.util.Collections.sort; +import static javax.swing.BorderFactory.createLoweredBevelBorder; +import static javax.swing.JComponent.WHEN_IN_FOCUSED_WINDOW; +import static javax.swing.JLabel.RIGHT; +import static javax.swing.JOptionPane.DEFAULT_OPTION; +import static javax.swing.JOptionPane.INFORMATION_MESSAGE; +import static javax.swing.JOptionPane.WARNING_MESSAGE; +import static javax.swing.JOptionPane.showMessageDialog; +import static javax.swing.JOptionPane.showOptionDialog; +import static javax.swing.JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED; +import static javax.swing.JScrollPane.HORIZONTAL_SCROLLBAR_NEVER; +import static javax.swing.JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED; +import static javax.swing.JSeparator.VERTICAL; +import static javax.swing.JSplitPane.HORIZONTAL_SPLIT; +import static javax.swing.JTabbedPane.BOTTOM; +import static javax.swing.KeyStroke.getKeyStroke; +import static javax.swing.SwingUtilities.invokeLater; +import org.apache.log4j.Logger; +import javax.swing.AbstractAction; +import javax.swing.ImageIcon; +import javax.swing.JButton; +import javax.swing.JComponent; +import javax.swing.JFrame; +import javax.swing.JLabel; +import javax.swing.JMenuBar; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.JSeparator; +import javax.swing.JSplitPane; +import javax.swing.JTabbedPane; +import javax.swing.JTable; +import javax.swing.JToggleButton; +import javax.swing.table.TableColumn; +import java.awt.BorderLayout; import java.awt.Component; import java.awt.Dimension; import java.awt.FlowLayout; @@ -143,9 +145,7 @@ import java.awt.event.ActionListener; import java.awt.event.WindowEvent; import java.beans.PropertyChangeEvent; import java.io.File; -import static java.lang.System.currentTimeMillis; import java.util.ArrayList; -import static java.util.Collections.sort; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -422,7 +422,7 @@ public final class EcuLogger extends AbstractFrame implements MessageListener { private void loadLoggerPlugins() { try { ExternalDataSourceLoader dataSourceLoader = new ExternalDataSourceLoaderImpl(); - dataSourceLoader.loadExternalDataSources(); + dataSourceLoader.loadExternalDataSources(settings.getLoggerPluginPorts()); externalDataSources = dataSourceLoader.getExternalDataSources(); } catch (Exception e) { reportError(e); @@ -622,6 +622,16 @@ public final class EcuLogger extends AbstractFrame implements MessageListener { return new UserProfileImpl(paramProfileItems, switchProfileItems, externalProfileItems); } + private Map getPluginPorts(List externalDataSources) { + Map plugins = new HashMap(); + for (ExternalDataSource dataSource : externalDataSources) { + String id = dataSource.getId(); + String port = dataSource.getPort(); + if (port != null && port.trim().length() > 0) plugins.put(id, port.trim()); + } + return plugins; + } + private Map getProfileItems(List dataTabRows, List graphTabRows, List dashTabRows) { Map profileItems = new HashMap(); for (ParameterRow dataTabRow : dataTabRows) { @@ -1048,6 +1058,7 @@ public final class EcuLogger extends AbstractFrame implements MessageListener { settings.setLoggerWindowSize(getSize()); settings.setLoggerWindowLocation(getLocation()); settings.setLoggerSelectedTabIndex(tabbedPane.getSelectedIndex()); + settings.setLoggerPluginPorts(getPluginPorts(externalDataSources)); new SettingsManagerImpl().save(settings); } diff --git a/src/com/romraider/logger/ecu/external/ExternalDataSource.java b/src/com/romraider/logger/ecu/external/ExternalDataSource.java index ed72a441..43478533 100644 --- a/src/com/romraider/logger/ecu/external/ExternalDataSource.java +++ b/src/com/romraider/logger/ecu/external/ExternalDataSource.java @@ -24,6 +24,8 @@ import javax.swing.Action; import java.util.List; public interface ExternalDataSource { + String getId(); + String getName(); String getVersion(); diff --git a/src/com/romraider/logger/ecu/external/ExternalDataSourceLoader.java b/src/com/romraider/logger/ecu/external/ExternalDataSourceLoader.java index 6369b40e..f786e339 100644 --- a/src/com/romraider/logger/ecu/external/ExternalDataSourceLoader.java +++ b/src/com/romraider/logger/ecu/external/ExternalDataSourceLoader.java @@ -20,10 +20,11 @@ package com.romraider.logger.ecu.external; import java.util.List; +import java.util.Map; public interface ExternalDataSourceLoader { - void loadExternalDataSources(); + void loadExternalDataSources(Map loggerPluginPorts); List getExternalDataSources(); } diff --git a/src/com/romraider/logger/ecu/external/ExternalDataSourceLoaderImpl.java b/src/com/romraider/logger/ecu/external/ExternalDataSourceLoaderImpl.java index 692c4a71..8674cb81 100644 --- a/src/com/romraider/logger/ecu/external/ExternalDataSourceLoaderImpl.java +++ b/src/com/romraider/logger/ecu/external/ExternalDataSourceLoaderImpl.java @@ -27,13 +27,14 @@ import java.io.File; import java.io.FileInputStream; import java.util.ArrayList; import java.util.List; +import java.util.Map; import java.util.Properties; public final class ExternalDataSourceLoaderImpl implements ExternalDataSourceLoader { private static final Logger LOGGER = Logger.getLogger(ExternalDataSourceLoaderImpl.class); private List externalDataSources = new ArrayList(); - public void loadExternalDataSources() { + public void loadExternalDataSources(Map loggerPluginPorts) { try { File pluginsDir = new File("./plugins"); if (pluginsDir.exists() && pluginsDir.isDirectory()) { @@ -49,7 +50,7 @@ public final class ExternalDataSourceLoaderImpl implements ExternalDataSourceLoa try { Class dataSourceClass = getClass().getClassLoader().loadClass(datasourceClassName); if (dataSourceClass != null && ExternalDataSource.class.isAssignableFrom(dataSourceClass)) { - ExternalDataSource dataSource = (ExternalDataSource) dataSourceClass.newInstance(); + ExternalDataSource dataSource = dataSource(dataSourceClass, loggerPluginPorts); ExternalDataSource managedDataSource = new GenericDataSourceManager(dataSource); externalDataSources.add(managedDataSource); LOGGER.info("Plugin loaded: " + dataSource.getName() + " v" + dataSource.getVersion()); @@ -69,6 +70,15 @@ public final class ExternalDataSourceLoaderImpl implements ExternalDataSourceLoa } } + private ExternalDataSource dataSource(Class dataSourceClass, Map loggerPluginPorts) throws Exception { + ExternalDataSource dataSource = (ExternalDataSource) dataSourceClass.newInstance(); + if (loggerPluginPorts != null) { + String port = loggerPluginPorts.get(dataSource.getId()); + if (port != null && port.trim().length() > 0) dataSource.setPort(port); + } + return dataSource; + } + public List getExternalDataSources() { return externalDataSources; } diff --git a/src/com/romraider/logger/ecu/external/GenericDataSourceManager.java b/src/com/romraider/logger/ecu/external/GenericDataSourceManager.java index b304abe9..0f72fe2a 100644 --- a/src/com/romraider/logger/ecu/external/GenericDataSourceManager.java +++ b/src/com/romraider/logger/ecu/external/GenericDataSourceManager.java @@ -41,6 +41,10 @@ public final class GenericDataSourceManager implements ExternalDataSource { this.dataSource = dataSource; } + public String getId() { + return dataSource.getId(); + } + public String getName() { return dataSource.getName(); } diff --git a/src/com/romraider/logger/innovate/generic/serial/plugin/InnovateDataSource.java b/src/com/romraider/logger/innovate/generic/serial/plugin/InnovateDataSource.java index 02a9db99..92621f8e 100644 --- a/src/com/romraider/logger/innovate/generic/serial/plugin/InnovateDataSource.java +++ b/src/com/romraider/logger/innovate/generic/serial/plugin/InnovateDataSource.java @@ -33,6 +33,10 @@ public final class InnovateDataSource implements ExternalDataSource { private InnovateRunner runner; private String port; + public String getId() { + return getClass().getName(); + } + public String getName() { return "Innovate Wideband AFR"; } diff --git a/src/com/romraider/logger/innovate/lm2/mts/plugin/Lm2MtsDataSource.java b/src/com/romraider/logger/innovate/lm2/mts/plugin/Lm2MtsDataSource.java index 38c5022b..cf537c42 100644 --- a/src/com/romraider/logger/innovate/lm2/mts/plugin/Lm2MtsDataSource.java +++ b/src/com/romraider/logger/innovate/lm2/mts/plugin/Lm2MtsDataSource.java @@ -25,11 +25,11 @@ import com.romraider.logger.ecu.external.ExternalDataSource; import com.romraider.logger.innovate.generic.mts.io.MTSRunner; import com.romraider.logger.innovate.generic.mts.io.MTSRunnerImpl; import static com.romraider.util.ThreadUtil.runAsDaemon; +import static java.lang.Integer.parseInt; +import static java.util.Arrays.asList; import org.apache.log4j.Logger; import static org.apache.log4j.Logger.getLogger; import javax.swing.Action; -import static java.lang.Integer.parseInt; -import static java.util.Arrays.asList; import java.util.List; public final class Lm2MtsDataSource implements ExternalDataSource { @@ -38,6 +38,10 @@ public final class Lm2MtsDataSource implements ExternalDataSource { private MTSRunner runner; private int mtsPort = 0; + public String getId() { + return getClass().getName(); + } + public String getName() { return "Innovate LM-2 [mts]"; } diff --git a/src/com/romraider/logger/plx/plugin/PlxDataSource.java b/src/com/romraider/logger/plx/plugin/PlxDataSource.java index 49ffe550..c809c22d 100644 --- a/src/com/romraider/logger/plx/plugin/PlxDataSource.java +++ b/src/com/romraider/logger/plx/plugin/PlxDataSource.java @@ -44,6 +44,10 @@ public final class PlxDataSource implements ExternalDataSource { // dataItems.put(EXHAUST_GAS_TEMPERATURE, new PlxDataItemImpl("EGT", "C", EXHAUST_GAS_TEMPERATURE, EXHAUST_GAS_TEMPERATURE_CELSIUS)); } + public String getId() { + return getClass().getName(); + } + public String getName() { return "PLX SM-AFR"; } diff --git a/src/com/romraider/logger/zt2/plugin/ZT2DataSource.java b/src/com/romraider/logger/zt2/plugin/ZT2DataSource.java index 6b430dd8..7f799688 100644 --- a/src/com/romraider/logger/zt2/plugin/ZT2DataSource.java +++ b/src/com/romraider/logger/zt2/plugin/ZT2DataSource.java @@ -31,9 +31,9 @@ import static com.romraider.logger.zt2.io.ZT2SensorType.MAP; import static com.romraider.logger.zt2.io.ZT2SensorType.RPM; import static com.romraider.logger.zt2.io.ZT2SensorType.TPS; import static com.romraider.util.ThreadUtil.runAsDaemon; +import static java.util.Collections.unmodifiableList; import javax.swing.Action; import java.util.ArrayList; -import static java.util.Collections.unmodifiableList; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -51,6 +51,10 @@ public final class ZT2DataSource implements ExternalDataSource { dataItems.put(EGT, new ZT2DataItemImpl("EGT", "Celsius", EGT)); } + public String getId() { + return getClass().getName(); + } + public String getName() { return "Zeitronix ZT-2"; } diff --git a/src/com/romraider/xml/DOMSettingsBuilder.java b/src/com/romraider/xml/DOMSettingsBuilder.java index 4d78f052..69855854 100644 --- a/src/com/romraider/xml/DOMSettingsBuilder.java +++ b/src/com/romraider/xml/DOMSettingsBuilder.java @@ -27,6 +27,7 @@ import javax.imageio.metadata.IIOMetadataNode; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; +import java.util.Map; import java.util.Vector; public final class DOMSettingsBuilder { @@ -276,6 +277,19 @@ public final class DOMSettingsBuilder { filelogging.setAttribute("absolutetimestamp", String.valueOf(settings.isFileLoggingAbsoluteTimestamp())); loggerSettings.appendChild(filelogging); + // plugin ports + Map pluginPorts = settings.getLoggerPluginPorts(); + if (!pluginPorts.isEmpty()) { + IIOMetadataNode plugins = new IIOMetadataNode("plugins"); + for (Map.Entry entry : pluginPorts.entrySet()) { + IIOMetadataNode plugin = new IIOMetadataNode("plugin"); + plugin.setAttribute("id", entry.getKey()); + plugin.setAttribute("port", entry.getValue()); + plugins.appendChild(plugin); + } + loggerSettings.appendChild(plugins); + } + return loggerSettings; } } \ No newline at end of file diff --git a/src/com/romraider/xml/DOMSettingsUnmarshaller.java b/src/com/romraider/xml/DOMSettingsUnmarshaller.java index 66306c34..79fbe316 100644 --- a/src/com/romraider/xml/DOMSettingsUnmarshaller.java +++ b/src/com/romraider/xml/DOMSettingsUnmarshaller.java @@ -21,15 +21,17 @@ package com.romraider.xml; import com.romraider.Settings; import static com.romraider.xml.DOMHelper.unmarshallAttribute; +import static java.awt.Font.BOLD; import org.w3c.dom.Node; import static org.w3c.dom.Node.ELEMENT_NODE; import org.w3c.dom.NodeList; import java.awt.Color; import java.awt.Dimension; import java.awt.Font; -import static java.awt.Font.BOLD; import java.awt.Point; import java.io.File; +import java.util.HashMap; +import java.util.Map; public final class DOMSettingsUnmarshaller { @@ -204,12 +206,11 @@ public final class DOMSettingsUnmarshaller { } - private Settings unmarshallLogger(Node windowNode, Settings settings) { - Node n; - NodeList nodes = windowNode.getChildNodes(); + private Settings unmarshallLogger(Node loggerNode, Settings settings) { + NodeList nodes = loggerNode.getChildNodes(); for (int i = 0; i < nodes.getLength(); i++) { - n = nodes.item(i); + Node n = nodes.item(i); if (n.getNodeType() == ELEMENT_NODE && n.getNodeName().equalsIgnoreCase("serial")) { settings.setLoggerPortDefault(unmarshallAttribute(n, "port", "")); @@ -240,6 +241,20 @@ public final class DOMSettingsUnmarshaller { settings.setFileLoggingControllerSwitchActive(unmarshallAttribute(n, "active", true)); settings.setFileLoggingAbsoluteTimestamp(unmarshallAttribute(n, "absolutetimestamp", false)); + } else if (n.getNodeType() == ELEMENT_NODE && n.getNodeName().equalsIgnoreCase("plugins")) { + Map pluginPorts = new HashMap(); + NodeList pluginNodes = n.getChildNodes(); + for (int j = 0; j < pluginNodes.getLength(); j++) { + Node pluginNode = pluginNodes.item(j); + if (pluginNode.getNodeType() == ELEMENT_NODE && pluginNode.getNodeName().equalsIgnoreCase("plugin")) { + String id = unmarshallAttribute(pluginNode, "id", null); + if (id == null || id.trim().length() == 0) continue; + String port = unmarshallAttribute(pluginNode, "port", null); + if (port == null || port.trim().length() == 0) continue; + pluginPorts.put(id.trim(), port.trim()); + } + } + settings.setLoggerPluginPorts(pluginPorts); } } return settings; diff --git a/version.properties b/version.properties index b78c686e..744a04c2 100644 --- a/version.properties +++ b/version.properties @@ -6,9 +6,9 @@ warning.generated-file=DO NOT EDIT. This file is automatically generated. # basic version name and number properties # name.package should be a single word, since it's used for things like the jar file name.package=RomRaider -description.package=RomRaider ROM Editing Suite +description.package=RomRaider ROM Editing and Logging Suite name.organization=RomRaider.com -name.maintainer=Jared Gould +name.maintainer=Paul Brunckhorst email.maintainer= supporturl=http://www.romraider.com @@ -22,7 +22,7 @@ version.minor=5 version.patch=3 version.buildnumber=${buildnumber} version.extra=Beta -version.extra1=RC3 +version.extra1=RC4 # the starting class for the application class.start=com.romraider.ECUExec