From 935a8a1e402e54b6c2d9834049896c2d49d76980 Mon Sep 17 00:00:00 2001 From: Paulo Dias Date: Mon, 7 Oct 2024 20:43:02 +0100 Subject: [PATCH 1/5] types/mission/plan/IPlanFileImporter: Adding new import plan from file interface. --- .../neptus/plugins/PluginsRepository.java | 2 + .../types/mission/plan/IPlanFileImporter.java | 70 +++++++++++++++++++ 2 files changed, 72 insertions(+) create mode 100644 src/java/pt/lsts/neptus/types/mission/plan/IPlanFileImporter.java diff --git a/src/java/pt/lsts/neptus/plugins/PluginsRepository.java b/src/java/pt/lsts/neptus/plugins/PluginsRepository.java index 5564d343be..7e80487851 100644 --- a/src/java/pt/lsts/neptus/plugins/PluginsRepository.java +++ b/src/java/pt/lsts/neptus/plugins/PluginsRepository.java @@ -47,6 +47,7 @@ import pt.lsts.neptus.renderer2d.tiles.MapPainterProvider; import pt.lsts.neptus.renderer2d.tiles.Tile; import pt.lsts.neptus.types.mission.plan.IPlanFileExporter; +import pt.lsts.neptus.types.mission.plan.IPlanFileImporter; import pt.lsts.neptus.util.ReflectionUtil; public class PluginsRepository { @@ -61,6 +62,7 @@ public class PluginsRepository { LogReplayLayer.class, LogReplayPanel.class, IPlanFileExporter.class, + IPlanFileImporter.class, IPlanElement.class ); diff --git a/src/java/pt/lsts/neptus/types/mission/plan/IPlanFileImporter.java b/src/java/pt/lsts/neptus/types/mission/plan/IPlanFileImporter.java new file mode 100644 index 0000000000..6433163b75 --- /dev/null +++ b/src/java/pt/lsts/neptus/types/mission/plan/IPlanFileImporter.java @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2004-2024 Universidade do Porto - Faculdade de Engenharia + * Laboratório de Sistemas e Tecnologia Subaquática (LSTS) + * All rights reserved. + * Rua Dr. Roberto Frias s/n, sala I203, 4200-465 Porto, Portugal + * + * This file is part of Neptus, Command and Control Framework. + * + * Commercial Licence Usage + * Licencees holding valid commercial Neptus licences may use this file + * in accordance with the commercial licence agreement provided with the + * Software or, alternatively, in accordance with the terms contained in a + * written agreement between you and Universidade do Porto. For licensing + * terms, conditions, and further information contact lsts@fe.up.pt. + * + * Modified European Union Public Licence - EUPL v.1.1 Usage + * Alternatively, this file may be used under the terms of the Modified EUPL, + * Version 1.1 only (the "Licence"), appearing in the file LICENSE.md + * included in the packaging of this file. You may not use this work + * except in compliance with the Licence. Unless required by applicable + * law or agreed to in writing, software distributed under the Licence is + * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF + * ANY KIND, either express or implied. See the Licence for the specific + * language governing permissions and limitations at + * https://github.com/LSTS/neptus/blob/develop/LICENSE.md + * and http://ec.europa.eu/idabc/eupl.html. + * + * For more information please see . + * + * Author: pdias + * 7/10/2024 + */ +package pt.lsts.neptus.types.mission.plan; + +import pt.lsts.neptus.types.mission.MissionType; + +import javax.swing.JComponent; +import javax.swing.JFileChooser; +import javax.swing.ProgressMonitor; +import java.io.File; +import java.util.List; + +/** + * @author pdias + * + */ +public interface IPlanFileImporter { + + public String getImporterName(); + + /** + * @param mission + * @param in + * @param monitor Don't assume that it exists. + * @throws Exception + */ + public List importFromFile(MissionType mission, File in, ProgressMonitor monitor) throws Exception; + + public String[] validExtensions(); + + /** + * @see {@link JFileChooser#setAccessory(JComponent)} + * + * @param fileChooser + * @return + */ + public default JComponent createFileChooserAccessory(JFileChooser fileChooser) { + return null; + } +} From 19a5ad2628b9459f30b27173278ec0dd8fe01fdd Mon Sep 17 00:00:00 2001 From: Paulo Dias Date: Mon, 7 Oct 2024 20:43:40 +0100 Subject: [PATCH 2/5] console/plugins/PlanExporter: Cleanup. --- .../neptus/console/plugins/PlanExporter.java | 98 +++++++++---------- 1 file changed, 48 insertions(+), 50 deletions(-) diff --git a/src/java/pt/lsts/neptus/console/plugins/PlanExporter.java b/src/java/pt/lsts/neptus/console/plugins/PlanExporter.java index 992c985a14..a03a20c6f8 100644 --- a/src/java/pt/lsts/neptus/console/plugins/PlanExporter.java +++ b/src/java/pt/lsts/neptus/console/plugins/PlanExporter.java @@ -59,7 +59,9 @@ */ @PluginDescription public class PlanExporter extends ConsolePanel { - private static final long serialVersionUID = 5471633324196554012L; + private static final String TOOLS_MENU = I18n.text("Tools"); + private static final String ExPORT_PLAN_MENU = I18n.text("Export Plan"); + private String lastExportFolder = ConfigFetch.getConfigFile(); @@ -80,58 +82,54 @@ public void initSubPanel() { for (Class exporter : PluginsRepository.listExtensions(IPlanFileExporter.class).values()) { try { final IPlanFileExporter exp = exporter.getDeclaredConstructor().newInstance(); - addMenuItem(I18n.text("Tools") + ">" + I18n.text("Export Plan") + ">" + exp.getExporterName(), null, - new ActionListener() { - - @Override - public void actionPerformed(ActionEvent e) { - if (getConsole().getPlan() == null) { - GuiUtils.infoMessage(getConsole(), exp.getExporterName(), I18n.text("Nothing to export")); - return; - } - PlanType plan = getConsole().getPlan(); - - JFileChooser chooser = GuiUtils.getFileChooser(lastExportFolder, - I18n.textf("%exporterName files", exp.getExporterName()), - exp.validExtensions()); - chooser.setSelectedFile(new File(plan.getDisplayName())); - chooser.setDialogTitle(I18n.text("Select destination file")); - JComponent accessory = exp.createFileChooserAccessory(chooser); - if (accessory != null) - chooser.setAccessory(accessory); - int op = chooser.showSaveDialog(getConsole()); - if (op != JFileChooser.APPROVE_OPTION) - return; - try { - File dst = chooser.getSelectedFile(); - String[] exts = exp.validExtensions(); - if (exts.length > 0 && FileUtil.getFileExtension(dst).isEmpty()) { - dst = new File(dst.getAbsolutePath() + "." + exts[0]); + addMenuItem(TOOLS_MENU + ">" + ExPORT_PLAN_MENU + ">" + exp.getExporterName(), + null, e -> { + if (getConsole().getPlan() == null) { + GuiUtils.infoMessage(getConsole(), exp.getExporterName(), I18n.text("Nothing to export")); + return; } - if (dst.exists()) { - int resp = JOptionPane.showConfirmDialog(getConsole(), - I18n.text("Do you want to overwrite the existing file?"), - I18n.text("Export plan"), JOptionPane.YES_NO_CANCEL_OPTION); - if (resp != JOptionPane.YES_OPTION) { - return; + PlanType plan = getConsole().getPlan(); + + JFileChooser chooser = GuiUtils.getFileChooser(lastExportFolder, + I18n.textf("%exporterName files", exp.getExporterName()), + exp.validExtensions()); + chooser.setSelectedFile(new File(plan.getDisplayName())); + chooser.setDialogTitle(I18n.text("Select destination file")); + JComponent accessory = exp.createFileChooserAccessory(chooser); + if (accessory != null) + chooser.setAccessory(accessory); + int op = chooser.showSaveDialog(getConsole()); + if (op != JFileChooser.APPROVE_OPTION) + return; + try { + File dst = chooser.getSelectedFile(); + String[] exts = exp.validExtensions(); + if (exts.length > 0 && FileUtil.getFileExtension(dst).isEmpty()) { + dst = new File(dst.getAbsolutePath() + "." + exts[0]); + } + if (dst.exists()) { + int resp = JOptionPane.showConfirmDialog(getConsole(), + I18n.text("Do you want to overwrite the existing file?"), + I18n.text("Export plan"), JOptionPane.YES_NO_CANCEL_OPTION); + if (resp != JOptionPane.YES_OPTION) { + return; + } } - } - ProgressMonitor pmonitor = new ProgressMonitor(getConsole(), exp.getExporterName(), - I18n.text("Exporting"), 0, 100); - exp.exportToFile(plan, dst, pmonitor); - lastExportFolder = dst.getAbsolutePath(); - GuiUtils.infoMessage( - getConsole(), - exp.getExporterName(), - pmonitor.isCanceled() ? I18n.text("Export cancelled") : I18n - .text("Export done")); - } - catch (Exception ex) { - GuiUtils.errorMessage(getConsole(), ex); - } - } - }); + ProgressMonitor pmonitor = new ProgressMonitor(getConsole(), exp.getExporterName(), + I18n.text("Exporting"), 0, 100); + exp.exportToFile(plan, dst, pmonitor); + lastExportFolder = dst.getAbsolutePath(); + GuiUtils.infoMessage( + getConsole(), + exp.getExporterName(), + pmonitor.isCanceled() ? I18n.text("Export cancelled") : I18n + .text("Export done")); + } + catch (Exception ex) { + GuiUtils.errorMessage(getConsole(), ex); + } + }); } catch (Exception e) { NeptusLog.pub().error(e); From 59b41e4fdc3c518d0db6595989b6dfed294e3cff Mon Sep 17 00:00:00 2001 From: Paulo Dias Date: Mon, 7 Oct 2024 20:44:38 +0100 Subject: [PATCH 3/5] console/plugins/PlanImporter: Adding new PlanImporter support plugin menu.. --- .../neptus/console/plugins/PlanImporter.java | 147 ++++++++++++++++++ 1 file changed, 147 insertions(+) create mode 100644 src/java/pt/lsts/neptus/console/plugins/PlanImporter.java diff --git a/src/java/pt/lsts/neptus/console/plugins/PlanImporter.java b/src/java/pt/lsts/neptus/console/plugins/PlanImporter.java new file mode 100644 index 0000000000..3640a9c2e0 --- /dev/null +++ b/src/java/pt/lsts/neptus/console/plugins/PlanImporter.java @@ -0,0 +1,147 @@ +/* + * Copyright (c) 2004-2024 Universidade do Porto - Faculdade de Engenharia + * Laboratório de Sistemas e Tecnologia Subaquática (LSTS) + * All rights reserved. + * Rua Dr. Roberto Frias s/n, sala I203, 4200-465 Porto, Portugal + * + * This file is part of Neptus, Command and Control Framework. + * + * Commercial Licence Usage + * Licencees holding valid commercial Neptus licences may use this file + * in accordance with the commercial licence agreement provided with the + * Software or, alternatively, in accordance with the terms contained in a + * written agreement between you and Universidade do Porto. For licensing + * terms, conditions, and further information contact lsts@fe.up.pt. + * + * Modified European Union Public Licence - EUPL v.1.1 Usage + * Alternatively, this file may be used under the terms of the Modified EUPL, + * Version 1.1 only (the "Licence"), appearing in the file LICENSE.md + * included in the packaging of this file. You may not use this work + * except in compliance with the Licence. Unless required by applicable + * law or agreed to in writing, software distributed under the Licence is + * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF + * ANY KIND, either express or implied. See the Licence for the specific + * language governing permissions and limitations at + * https://github.com/LSTS/neptus/blob/develop/LICENSE.md + * and http://ec.europa.eu/idabc/eupl.html. + * + * For more information please see . + * + * Author: pdias + * 7/10/2024 + */ +package pt.lsts.neptus.console.plugins; + +import pt.lsts.neptus.NeptusLog; +import pt.lsts.neptus.console.ConsoleLayout; +import pt.lsts.neptus.console.ConsolePanel; +import pt.lsts.neptus.console.notifications.Notification; +import pt.lsts.neptus.i18n.I18n; +import pt.lsts.neptus.plugins.PluginDescription; +import pt.lsts.neptus.plugins.PluginsRepository; +import pt.lsts.neptus.types.mission.MissionType; +import pt.lsts.neptus.types.mission.plan.IPlanFileExporter; +import pt.lsts.neptus.types.mission.plan.IPlanFileImporter; +import pt.lsts.neptus.types.mission.plan.PlanType; +import pt.lsts.neptus.util.FileUtil; +import pt.lsts.neptus.util.GuiUtils; +import pt.lsts.neptus.util.conf.ConfigFetch; + +import javax.swing.JComponent; +import javax.swing.JFileChooser; +import javax.swing.JOptionPane; +import javax.swing.ProgressMonitor; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.io.File; +import java.util.List; +import java.util.stream.Collectors; + +/** + * @author pdias + * + */ +@PluginDescription +public class PlanImporter extends ConsolePanel { + private static final String TOOLS_MENU = I18n.text("Tools"); + private static final String IMPORT_PLAN_MENU = I18n.text("Import Plan"); + + private String lastImportFolder = ConfigFetch.getConfigFile(); + + /** + * @param console + */ + public PlanImporter(ConsoleLayout console) { + super(console); + } + + @Override + public void cleanSubPanel() { + } + + @Override + public void initSubPanel() { + for (Class exporter : PluginsRepository.listExtensions(IPlanFileImporter.class).values()) { + try { + final IPlanFileImporter exp = exporter.getDeclaredConstructor().newInstance(); + addMenuItem(TOOLS_MENU + ">" + IMPORT_PLAN_MENU + ">" + exp.getImporterName(), + null, e -> { + JFileChooser chooser = GuiUtils.getFileChooser(lastImportFolder, + I18n.textf("%importerName files", exp.getImporterName()), + exp.validExtensions()); + chooser.setDialogTitle(I18n.text("Select file")); + JComponent accessory = exp.createFileChooserAccessory(chooser); + if (accessory != null) + chooser.setAccessory(accessory); + int op = chooser.showSaveDialog(getConsole()); + if (op != JFileChooser.APPROVE_OPTION) + return; + + try { + File selectedFile = chooser.getSelectedFile(); + if (selectedFile == null || !selectedFile.exists()) { + JOptionPane.showMessageDialog(getConsole(), + I18n.text("File does not exist!"), + I18n.text("Import plan"), JOptionPane.ERROR_MESSAGE); + return; + } + + ProgressMonitor pmonitor = new ProgressMonitor(getConsole(), exp.getImporterName(), + I18n.text("Importing"), 0, 100); + MissionType mission = getConsole().getMission(); + List planList = exp.importFromFile(mission, selectedFile, pmonitor); + + if (planList == null || planList.isEmpty()) { + JOptionPane.showMessageDialog(getConsole(), + I18n.text("No plan was imported!"), + I18n.text("Import plan"), JOptionPane.ERROR_MESSAGE); + return; + } + + for (PlanType plan : planList) { + getConsole().getMission().getIndividualPlansList().put(plan.getId(), plan); + getConsole().getMission().save(true); + } + getConsole().post(Notification.success(I18n.text("Plan Import"), + I18n.textf("Imported plan%s '%plan'", planList.size() > 1 ? "s" : "", + planList.stream().map(PlanType::getId).collect(Collectors.joining(", "))))); + getConsole().updateMissionListeners(); + + lastImportFolder = selectedFile.getAbsolutePath(); + GuiUtils.infoMessage( + getConsole(), + exp.getImporterName(), + pmonitor.isCanceled() ? I18n.text("Import cancelled") : I18n + .text("Import done")); + } + catch (Exception ex) { + GuiUtils.errorMessage(getConsole(), ex); + } + }); + } + catch (Exception e) { + NeptusLog.pub().error(e); + } + } + } +} From ba3484144e8ef5b391348ff0766f1dd75331c264 Mon Sep 17 00:00:00 2001 From: Paulo Dias Date: Mon, 7 Oct 2024 20:45:42 +0100 Subject: [PATCH 4/5] plugins/fresnel/PlanImporter: Adding first version of Fresnel plan importer. --- plugins-dev/fresnel/plugins.lst | 1 + .../neptus/plugins/fresnel/PlanImporter.java | 190 ++++++++++++++++++ 2 files changed, 191 insertions(+) create mode 100644 plugins-dev/fresnel/plugins.lst create mode 100644 plugins-dev/fresnel/src/java/pt/lsts/neptus/plugins/fresnel/PlanImporter.java diff --git a/plugins-dev/fresnel/plugins.lst b/plugins-dev/fresnel/plugins.lst new file mode 100644 index 0000000000..9a8a438e97 --- /dev/null +++ b/plugins-dev/fresnel/plugins.lst @@ -0,0 +1 @@ +pt.lsts.neptus.plugins.fresnel.PlanImporter diff --git a/plugins-dev/fresnel/src/java/pt/lsts/neptus/plugins/fresnel/PlanImporter.java b/plugins-dev/fresnel/src/java/pt/lsts/neptus/plugins/fresnel/PlanImporter.java new file mode 100644 index 0000000000..63cf99e210 --- /dev/null +++ b/plugins-dev/fresnel/src/java/pt/lsts/neptus/plugins/fresnel/PlanImporter.java @@ -0,0 +1,190 @@ +/* + * Copyright (c) 2004-2024 Universidade do Porto - Faculdade de Engenharia + * Laboratório de Sistemas e Tecnologia Subaquática (LSTS) + * All rights reserved. + * Rua Dr. Roberto Frias s/n, sala I203, 4200-465 Porto, Portugal + * + * This file is part of Neptus, Command and Control Framework. + * + * Commercial Licence Usage + * Licencees holding valid commercial Neptus licences may use this file + * in accordance with the commercial licence agreement provided with the + * Software or, alternatively, in accordance with the terms contained in a + * written agreement between you and Universidade do Porto. For licensing + * terms, conditions, and further information contact lsts@fe.up.pt. + * + * Modified European Union Public Licence - EUPL v.1.1 Usage + * Alternatively, this file may be used under the terms of the Modified EUPL, + * Version 1.1 only (the "Licence"), appearing in the file LICENSE.md + * included in the packaging of this file. You may not use this work + * except in compliance with the Licence. Unless required by applicable + * law or agreed to in writing, software distributed under the Licence is + * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF + * ANY KIND, either express or implied. See the Licence for the specific + * language governing permissions and limitations at + * https://github.com/LSTS/neptus/blob/develop/LICENSE.md + * and http://ec.europa.eu/idabc/eupl.html. + * + * For more information please see . + * + * Author: pdias + * 7/Ouc/2024 + */ +package pt.lsts.neptus.plugins.fresnel; + +import pt.lsts.neptus.mp.ManeuverLocation; +import pt.lsts.neptus.mp.SpeedType; +import pt.lsts.neptus.mp.maneuvers.Goto; +import pt.lsts.neptus.plugins.PluginDescription; +import pt.lsts.neptus.types.mission.GraphType; +import pt.lsts.neptus.types.mission.MissionType; +import pt.lsts.neptus.types.mission.plan.IPlanFileImporter; +import pt.lsts.neptus.types.mission.plan.PlanType; + +import javax.swing.ProgressMonitor; +import java.io.BufferedReader; +import java.io.File; +import java.io.FileReader; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +@PluginDescription +public class PlanImporter implements IPlanFileImporter { + @Override + public String getImporterName() { + return "Frenel Plan File"; + } + + @Override + public String[] validExtensions() { + return new String[] { "txt", "fresnel" }; + } + + @Override + public List importFromFile(MissionType mission, File in, ProgressMonitor monitor) throws Exception { + String timestamp = ""; + int auvNumber = 0; + double speed = 1.0; + + int prog = 0; + monitor.setProgress(prog); + monitor.setNote("Importing plan..."); + + // List of route segments, each containing waypoints (lat, lon, depth) + List> allRoutes = new ArrayList<>(); + + try (BufferedReader reader = new BufferedReader(new FileReader(in))) { + List routeDescription = new ArrayList<>(); + + PlanType plan = new PlanType(mission); + String line; + List currentRoute = null; // Stores the waypoints for each #length segment + while ((line = reader.readLine()) != null) { + line = line.trim(); + + // Extract TIMESTAMP, AUV_NUMBER, and SPEED + if (line.startsWith("#TIMESTAMP:")) { + timestamp = line.substring(line.indexOf(":") + 1).trim(); // Get everything after 'TIMESTAMP:' + setProgress(++prog , "Timestamp read " + timestamp, monitor); + } else if (line.startsWith("#AUV_NUMBER:")) { + auvNumber = Integer.parseInt(line.split(":")[1].trim()); + setProgress(++prog , "AUVs read " + auvNumber, monitor); + } else if (line.startsWith("#SPEED:")) { + speed = Double.parseDouble(line.split(":")[1].trim().split(" ")[0]); + } + + // Start of a new route (#length), initialize the list for new waypoints + if (line.startsWith("#length:") || line.startsWith("#length_2D:")) { + routeDescription.add(line.substring(line.indexOf(":") + 1).trim()); + currentRoute = new ArrayList<>(); // Initialize a new route + allRoutes.add(currentRoute); // Add the previous route to the list + + setProgress(prog = prog + (80 / auvNumber) , "AUVs route", monitor); + } + + // Extract and store (lat, lon, depth) waypoints + if (line.matches("^(\\s?-?\\d+(\\.\\d+)?\\s?,\\s?-?\\d+(\\.\\d+)?\\s?(,\\s?-?\\d+(\\.\\d+)?)?\\s?;).*$")) { + //if (line.matches("^((-?\\d+(\\.\\d+)?),\\s*(-?\\d+(\\.\\d+)?),\\s*(-?\\d+(\\.\\d+)?);\\s*).*$")) { + //if (line.matches("^\\d+\\.\\d+,\\s?-\\d+\\.\\d+,\\s?\\d+\\.\\d+;.*$")) { + String[] waypoints = line.split(";"); + for (String wp : waypoints) { + String[] coordinates = wp.split(",\\s*"); // Splitting by comma and optional spaces + if (currentRoute != null) { + currentRoute.add(coordinates); + } + } + } + } + } catch (Exception e) { + throw new Exception("Error importing plan: " + e.getMessage(), e); + } + + setProgress(prog = 90 , "Creating plans", monitor); + + try { + SimpleDateFormat inputFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSSSS [z]"); + Date date = inputFormat.parse(timestamp); + SimpleDateFormat outputFormat = new SimpleDateFormat("yyyyMMddHHmm"); + String formattedDate = outputFormat.format(date); + + // Generate plans + List planList = new ArrayList<>(); + + for (int i = 0; i < allRoutes.size(); i++) { + PlanType plan = new PlanType(mission); + + plan.setId("fresnel-" + formattedDate + "-" + i); + GraphType planGraph = plan.getGraph(); + + String firstManeuver = ""; + int wpIndex = 0; + for (String[] wp : allRoutes.get(i)) { + double latDeg = Double.parseDouble(wp[0]); + double lonDeg = Double.parseDouble(wp[1]); + double depth = wp.length > 2 ? Double.parseDouble(wp[2]) : 0.0; + + Goto gotoManeuver = new Goto(); + gotoManeuver.setId("G" + (++wpIndex)); + if (firstManeuver.isEmpty()) { + firstManeuver = gotoManeuver.getId(); + gotoManeuver.setInitialManeuver(true); + } + ManeuverLocation loc = new ManeuverLocation(); + loc.setLatitudeDegs(latDeg); + loc.setLongitudeDegs(lonDeg); + loc.setZUnits(ManeuverLocation.Z_UNITS.DEPTH); + loc.setZ(depth); + gotoManeuver.setManeuverLocation(loc); + SpeedType speedType = new SpeedType(speed, SpeedType.Units.MPS); + gotoManeuver.setSpeed(speedType); + + planGraph.addManeuver(gotoManeuver); + } + + plan.getGraph().setInitialManeuver(firstManeuver); + + for (int j = 0; j < plan.getGraph().getAllManeuvers().length; j++) { + if (j == 0) + continue; + plan.getGraph().addTransition("G" + j, "G" + (j + 1), "ManeuverIsDone"); + } + + planList.add(plan); + } + + setProgress(prog = 100 , "Import done", monitor); + + return planList; + } catch (Exception e) { + throw new Exception("Error importing plan: " + e.getMessage(), e); + } + } + + private void setProgress(int i, String msg, ProgressMonitor monitor) { + monitor.setProgress(i); + monitor.setNote(msg); + + } +} From c770ae4d0ff48cc5df4ed4b9e06fd7f7a52ce2c2 Mon Sep 17 00:00:00 2001 From: Paulo Dias Date: Mon, 7 Oct 2024 20:48:55 +0100 Subject: [PATCH 5/5] conf/consoles/lauv.ncon: Adding new PlanImporter. --- conf/consoles/lauv.ncon | 3 +++ 1 file changed, 3 insertions(+) diff --git a/conf/consoles/lauv.ncon b/conf/consoles/lauv.ncon index 18e07ba501..3b24f8d6c7 100644 --- a/conf/consoles/lauv.ncon +++ b/conf/consoles/lauv.ncon @@ -113,6 +113,9 @@ + + +