From 3b68ef2d8884a5e34f26f01fefdb732346d1ef2e Mon Sep 17 00:00:00 2001 From: Paulo Dias Date: Tue, 14 Jan 2025 17:07:12 +0000 Subject: [PATCH] console/plugins/planning/MissionTreePanel: Adding property to avoid asking for plan override for certain plan names. --- .../plugins/planning/MissionTreePanel.java | 25 ++++++++++++++----- .../planning/MissionTreePlanDbAdapter.java | 20 +++++++++++---- 2 files changed, 34 insertions(+), 11 deletions(-) diff --git a/src/java/pt/lsts/neptus/console/plugins/planning/MissionTreePanel.java b/src/java/pt/lsts/neptus/console/plugins/planning/MissionTreePanel.java index f2e584d110..d76375553c 100644 --- a/src/java/pt/lsts/neptus/console/plugins/planning/MissionTreePanel.java +++ b/src/java/pt/lsts/neptus/console/plugins/planning/MissionTreePanel.java @@ -43,6 +43,7 @@ import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; +import java.util.List; import java.util.Vector; import javax.swing.ImageIcon; @@ -104,7 +105,6 @@ import pt.lsts.neptus.types.mission.plan.PlanType; import pt.lsts.neptus.util.ByteUtil; - /** * Panel that holds mission objects namely plans and acoustic transponders. * @@ -127,6 +127,9 @@ public class MissionTreePanel extends ConsolePanel private boolean debugOn = false; @NeptusProperty(name = "Acceptable Elapsed Time", description = "Maximum acceptable interval between transponder ranges, in seconds.") private int maxAcceptableElapsedTime = 600; + @NeptusProperty(name = "Plan Names to Automatically Accept Updates", description = "Comma separated values. This upon reception of a plan " + + "with the same name as the ones listed here, it will be automatically accepted the changes and replace it.") + private String planNamesToAutoAcceptUpdates = "teleoperation-mode, service_loiter"; private MissionTreeMouse mouseAdapter; private boolean running = false; @@ -134,6 +137,8 @@ public class MissionTreePanel extends ConsolePanel protected MissionBrowser browser = new MissionBrowser(); protected PlanDBControl pdbControl; + protected final List planNamesToAutoAcceptUpdatesList = new ArrayList<>(); + /** * This adapter is called by a class monitoring PlanDB messages. It is only called if a PlanDB message with field * type set to success is received. @@ -318,11 +323,13 @@ public void on(PlanSpecification msg) { } // Non matching plans - int option = JOptionPane.showConfirmDialog(getConsole(), - I18n.text("Replace plan '" + plan.getId() + "' with version disseminated by " - + msg.getSourceName()+"?")); - if (option != JOptionPane.YES_OPTION) { - return; + if (!planNamesToAutoAcceptUpdatesList.contains(plan.getId())) { + int option = JOptionPane.showConfirmDialog(getConsole(), + I18n.text("Replace plan '" + plan.getId() + "' with version disseminated by " + + msg.getSourceName()+"?")); + if (option != JOptionPane.YES_OPTION) { + return; + } } } @@ -385,6 +392,12 @@ public void propertiesChanged() { planDBListener.setDebugOn(debugOn); browser.setMaxAcceptableElapsedTime(maxAcceptableElapsedTime); browser.setHideTransponder(!useTransponderFeatures); + + planNamesToAutoAcceptUpdatesList.clear(); + String[] pList = planNamesToAutoAcceptUpdates.split(","); + for (String p : pList) { + planNamesToAutoAcceptUpdatesList.add(p.trim()); + } } class MissionTreeMouse extends MouseAdapter { diff --git a/src/java/pt/lsts/neptus/console/plugins/planning/MissionTreePlanDbAdapter.java b/src/java/pt/lsts/neptus/console/plugins/planning/MissionTreePlanDbAdapter.java index bdd29c3681..7bffa0de1b 100644 --- a/src/java/pt/lsts/neptus/console/plugins/planning/MissionTreePlanDbAdapter.java +++ b/src/java/pt/lsts/neptus/console/plugins/planning/MissionTreePlanDbAdapter.java @@ -34,6 +34,8 @@ import java.io.ByteArrayOutputStream; import java.io.IOException; +import java.util.ArrayList; +import java.util.List; import java.util.TreeMap; import javax.swing.JOptionPane; @@ -61,12 +63,18 @@ public class MissionTreePlanDbAdapter extends PlanDBAdapter { private ConsoleLayout console; private MissionTreePanel missionTree; private boolean debugOn = true; + private final List planNamesToAutoAcceptUpdatesList = new ArrayList<>(); public MissionTreePlanDbAdapter(ConsoleLayout console, MissionTreePanel missionTree) { this.console = console; this.missionTree = missionTree; } - + + public void updatePlanNamesToAutoAcceptUpdatesList(List planNamesToAutoAcceptUpdatesList) { + this.planNamesToAutoAcceptUpdatesList.clear(); + this.planNamesToAutoAcceptUpdatesList.addAll(planNamesToAutoAcceptUpdatesList); + } + // Called only if Type == SUCCESS in received PlanDB message @Override public void dbCleared() { @@ -114,10 +122,12 @@ public void dbPlanReceived(PlanType spec) { PlanSpecification local = (PlanSpecification) console.getMission().getIndividualPlansList() .get(spec.getId()).asIMCPlan(); if (!ByteUtil.equal(local.payloadMD5(), remote.payloadMD5())) { - int option = JOptionPane.showConfirmDialog(console, - I18n.text("Replace plan '" + spec.getId() + "' with received version?")); - if (option != JOptionPane.YES_OPTION) - return; + if (!planNamesToAutoAcceptUpdatesList.contains(spec.getId())) { + int option = JOptionPane.showConfirmDialog(console, + I18n.text("Replace plan '" + spec.getId() + "' with received version?")); + if (option != JOptionPane.YES_OPTION) + return; + } } }