From 6c42dfa980edfec2c5c0525f3f3358e23cd56f6e Mon Sep 17 00:00:00 2001 From: rusefi Date: Tue, 14 Jul 2020 17:14:30 -0400 Subject: [PATCH] RE TS plugin to have continues tune auto-upload feature #1605 --- .../java/com/opensr5/ini/IniFileModel.java | 11 ++++--- .../rusefi/ts_plugin/PluginBodySandbox.java | 31 +++++++++++++++++-- .../src/com/rusefi/ts_plugin/PluginEntry.java | 2 +- .../src/com/rusefi/ts_plugin/TuneUploder.java | 4 +++ .../src/com/rusefi/ts_plugin/UploadView.java | 16 ++++++++++ 5 files changed, 56 insertions(+), 8 deletions(-) diff --git a/java_console/inifile/src/main/java/com/opensr5/ini/IniFileModel.java b/java_console/inifile/src/main/java/com/opensr5/ini/IniFileModel.java index 908d685cfd..19f1771d62 100644 --- a/java_console/inifile/src/main/java/com/opensr5/ini/IniFileModel.java +++ b/java_console/inifile/src/main/java/com/opensr5/ini/IniFileModel.java @@ -38,24 +38,25 @@ public class IniFileModel { private boolean isInSettingContextHelp = false; private boolean isInsidePageDefinition; - public void findAndReadIniFile(String iniFilePath) { + public IniFileModel findAndReadIniFile(String iniFilePath) { String fileName = findMetaInfoFile(iniFilePath); - readIniFile(fileName); + return readIniFile(fileName); } - public void readIniFile(String fileName) { + public IniFileModel readIniFile(String fileName) { File input = null; if (fileName != null) input = new File(fileName); if (fileName == null || !input.exists()) { - System.out.println("No such file: " + RUSEFI_INI_PREFIX + "*" + RUSEFI_INI_SUFFIX); - return; + System.out.println("No such file: " + fileName); + return null; } System.out.println("Reading " + fileName); RawIniFile content = IniFileReader.read(input); readIniFile(content); + return this; } public IniFileModel readIniFile(RawIniFile content) { diff --git a/java_tools/ts_plugin/src/com/rusefi/ts_plugin/PluginBodySandbox.java b/java_tools/ts_plugin/src/com/rusefi/ts_plugin/PluginBodySandbox.java index 086951bc45..2e39775a99 100644 --- a/java_tools/ts_plugin/src/com/rusefi/ts_plugin/PluginBodySandbox.java +++ b/java_tools/ts_plugin/src/com/rusefi/ts_plugin/PluginBodySandbox.java @@ -1,8 +1,16 @@ package com.rusefi.ts_plugin; import com.efiAnalytics.plugin.ecu.ControllerAccess; +import com.efiAnalytics.plugin.ecu.servers.ControllerParameterServer; +import com.opensr5.ini.IniFileModel; +import com.rusefi.TsTuneReader; import com.rusefi.ui.util.FrameHelper; +import java.io.File; +import java.util.ArrayList; +import java.util.Objects; + +import static org.mockito.Matchers.any; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; @@ -10,10 +18,29 @@ import static org.mockito.Mockito.when; * @see PluginLauncherSandbox */ public class PluginBodySandbox { + + private static final String PROJECT_NAME = "dev"; + public static void main(String[] args) { + String iniFile = TsTuneReader.getProjectsDir() + + File.separator + PROJECT_NAME + + File.separator + "projectCfg" + + File.separator + "mainController.ini"; + IniFileModel model = new IniFileModel().readIniFile(iniFile); + Objects.requireNonNull(model, "model"); + java.util.List fieldNamesList = new ArrayList<>(model.allIniFields.keySet()); + String[] parameterNames = fieldNamesList.toArray(new String[0]); + + + ControllerParameterServer controllerParameterServer = mock(ControllerParameterServer.class); + when(controllerParameterServer.getParameterNames(any())).thenReturn(parameterNames); + + ControllerAccess controllerAccess = mock(ControllerAccess.class); + when(controllerAccess.getEcuConfigurationNames()).thenReturn(new String[]{PROJECT_NAME}); + when(controllerAccess.getControllerParameterServer()).thenReturn(controllerParameterServer); + + new FrameHelper().showFrame(new PluginEntry(() -> { - ControllerAccess controllerAccess = mock(ControllerAccess.class); - when(controllerAccess.getEcuConfigurationNames()).thenReturn(new String[]{"dev"}); return controllerAccess; }).getContent()); } diff --git a/java_tools/ts_plugin/src/com/rusefi/ts_plugin/PluginEntry.java b/java_tools/ts_plugin/src/com/rusefi/ts_plugin/PluginEntry.java index f98e3ae2a7..98568515b5 100644 --- a/java_tools/ts_plugin/src/com/rusefi/ts_plugin/PluginEntry.java +++ b/java_tools/ts_plugin/src/com/rusefi/ts_plugin/PluginEntry.java @@ -91,7 +91,7 @@ public class PluginEntry implements TsPluginBody { return; } - Msq tune = TuneUploder.writeCurrentTune(ControllerAccess.getInstance(), configurationName); + Msq tune = TuneUploder.writeCurrentTune(controllerAccessSupplier.get(), configurationName); Online.uploadTune(tune, tokenPanel, content, new FutureCallback() { @Override public void completed(JSONArray array) { diff --git a/java_tools/ts_plugin/src/com/rusefi/ts_plugin/TuneUploder.java b/java_tools/ts_plugin/src/com/rusefi/ts_plugin/TuneUploder.java index c3187cb3b1..e50f94c5fd 100644 --- a/java_tools/ts_plugin/src/com/rusefi/ts_plugin/TuneUploder.java +++ b/java_tools/ts_plugin/src/com/rusefi/ts_plugin/TuneUploder.java @@ -15,13 +15,16 @@ import javax.xml.bind.JAXBException; import java.io.IOException; import java.util.Collections; import java.util.Map; +import java.util.Objects; import java.util.TreeMap; import com.rusefi.config.generated.Fields; public class TuneUploder { static Msq writeCurrentTune(ControllerAccess controllerAccess, String configurationName) { + Objects.requireNonNull(controllerAccess, "controllerAccess"); Msq msq = Msq.create(Fields.TOTAL_CONFIG_SIZE, Fields.TS_SIGNATURE); ControllerParameterServer controllerParameterServer = controllerAccess.getControllerParameterServer(); + Objects.requireNonNull(controllerParameterServer, "controllerParameterServer"); Map fileSystemValues = getFileSystemValues(configurationName); @@ -59,6 +62,7 @@ public class TuneUploder { private static void handleParameter(String configurationName, Msq msq, ControllerParameterServer controllerParameterServer, Map byName, String parameterName) throws ControllerException { ControllerParameter cp = controllerParameterServer.getControllerParameter(configurationName, parameterName); + Objects.requireNonNull(cp, "ControllerParameter"); String type = cp.getParamClass(); String value; if (ControllerParameter.PARAM_CLASS_BITS.equals(type)) { diff --git a/java_tools/ts_plugin/src/com/rusefi/ts_plugin/UploadView.java b/java_tools/ts_plugin/src/com/rusefi/ts_plugin/UploadView.java index 5145511af5..6a2cef07f5 100644 --- a/java_tools/ts_plugin/src/com/rusefi/ts_plugin/UploadView.java +++ b/java_tools/ts_plugin/src/com/rusefi/ts_plugin/UploadView.java @@ -1,26 +1,42 @@ package com.rusefi.ts_plugin; +import com.rusefi.ui.storage.PersistentConfiguration; import org.json.simple.JSONArray; import org.putgemin.VerticalFlowLayout; import javax.swing.*; import java.awt.*; +import java.awt.event.ActionEvent; public class UploadView { private final JComponent content = new JPanel(new VerticalFlowLayout()); + private static final String AUTO_UPLOAD = "AUTO_UPLOAD"; + private final JLabel uploadState = new JLabel(); private final JLabel projectWarning = new JLabel(UploaderStatus.NO_PROJECT); private final JLabel tuneInfo = new JLabel(); + private final JCheckBox autoUpload = new JCheckBox("Continuous auto-upload"); public UploadView() { content.add(projectWarning); content.add(tuneInfo); content.add(uploadState); + autoUpload.setSelected(isAutoUpload()); + autoUpload.addActionListener(new AbstractAction() { + @Override + public void actionPerformed(ActionEvent e) { + PersistentConfiguration.getConfig().getRoot().setProperty(AUTO_UPLOAD, autoUpload.isSelected()); + } + }); uploadState.setVisible(false); } + private static boolean isAutoUpload() { + return PersistentConfiguration.getConfig().getRoot().getBoolProperty(AUTO_UPLOAD, false); + } + public void setResult(JSONArray array) { uploadState.setText(array.get(0).toString()); uploadState.setVisible(true);