diff --git a/base/uk.ac.stfc.isis.ibex.configserver/src/uk/ac/stfc/isis/ibex/configserver/configuration/Macro.java b/base/uk.ac.stfc.isis.ibex.configserver/src/uk/ac/stfc/isis/ibex/configserver/configuration/Macro.java index f23f15cd5e..9a6a734b23 100644 --- a/base/uk.ac.stfc.isis.ibex.configserver/src/uk/ac/stfc/isis/ibex/configserver/configuration/Macro.java +++ b/base/uk.ac.stfc.isis.ibex.configserver/src/uk/ac/stfc/isis/ibex/configserver/configuration/Macro.java @@ -37,7 +37,7 @@ public class Macro extends ModelObject { * The currently set value of the macro. If this is null the default is used. * Ideally an Optional should be here but GSON doesn't understand optionals :( */ - private String value; + private String value = ""; /** * The description of the macro. */ diff --git a/base/uk.ac.stfc.isis.ibex.ui.configserver.tests/src/uk/ac/stfc/isis/ibex/ui/configserver/editing/macros/tests/MacroViewModelTest.java b/base/uk.ac.stfc.isis.ibex.ui.configserver.tests/src/uk/ac/stfc/isis/ibex/ui/configserver/editing/macros/tests/MacroViewModelTest.java index 48932a8c4d..0c5825ceeb 100644 --- a/base/uk.ac.stfc.isis.ibex.ui.configserver.tests/src/uk/ac/stfc/isis/ibex/ui/configserver/editing/macros/tests/MacroViewModelTest.java +++ b/base/uk.ac.stfc.isis.ibex.ui.configserver.tests/src/uk/ac/stfc/isis/ibex/ui/configserver/editing/macros/tests/MacroViewModelTest.java @@ -101,7 +101,7 @@ public void test_GIVEN_macro_with_value_of_empty_string_WHEN_view_model_created_ @Test public void test_GIVEN_macro_with_value_WHEN_view_model_created_THEN_use_default_is_false() { - Macro m = new Macro("name", "A_VALUE", "description", "pattern", null, HasDefault.YES, true); + Macro m = new Macro("name", "A_VALUE", "description", "pattern", null, HasDefault.YES, false); MacroViewModel macroViewModel = new MacroViewModel(m); boolean useDefault = macroViewModel.getUseDefault(); @@ -112,7 +112,7 @@ public void test_GIVEN_macro_with_value_WHEN_view_model_created_THEN_use_default @Test public void test_GIVEN_macro_with_value_WHEN_view_model_created_THEN_display_value_is_value() { String expectedMacroValue = "A_VALUE"; - Macro m = new Macro("name", expectedMacroValue, "description", "pattern", null, HasDefault.YES, true); + Macro m = new Macro("name", expectedMacroValue, "description", "pattern", null, HasDefault.YES, false); MacroViewModel macroViewModel = new MacroViewModel(m); String macroValue = macroViewModel.getDisplayValue(); @@ -146,7 +146,7 @@ public void test_GIVEN_macro_with_value_of_null_WHEN_use_default_set_false_THEN_ Macro m = new Macro("name", null, "description", "pattern", null, HasDefault.YES, true); MacroViewModel macroViewModel = new MacroViewModel(m); - macroViewModel.setUseDefault(false); + macroViewModel.setUseDefault(true); assertEquals("", m.getValue()); } diff --git a/base/uk.ac.stfc.isis.ibex.ui.configserver/src/uk/ac/stfc/isis/ibex/ui/configserver/editing/macros/MacroPanel.java b/base/uk.ac.stfc.isis.ibex.ui.configserver/src/uk/ac/stfc/isis/ibex/ui/configserver/editing/macros/MacroPanel.java index e7126d2094..2b43bf2bfc 100644 --- a/base/uk.ac.stfc.isis.ibex.ui.configserver/src/uk/ac/stfc/isis/ibex/ui/configserver/editing/macros/MacroPanel.java +++ b/base/uk.ac.stfc.isis.ibex.ui.configserver/src/uk/ac/stfc/isis/ibex/ui/configserver/editing/macros/MacroPanel.java @@ -140,6 +140,7 @@ private Collection makeDisplayMacroList(Collection setMacros, Coll displayMacros.add(displayMacro); displayMacro.addPropertyChangeListener("value", addSetMacroListener(displayMacro, setMacros)); + displayMacro.addPropertyChangeListener("useDefault", onUseDefaultChangeListener(displayMacro, setMacros)); } return displayMacros; @@ -164,4 +165,29 @@ public void propertyChange(PropertyChangeEvent newValue) { } }; } -} \ No newline at end of file + + // If the Use Default flag is set or reset add or remove the selected macro from the set of existing Macros. + private PropertyChangeListener onUseDefaultChangeListener(final Macro displayMacro, + final Collection setMacros) { + return new PropertyChangeListener() { + @Override + public void propertyChange(PropertyChangeEvent newValue) { + boolean useDefault = displayMacro.getUseDefault(); + if (useDefault) { + setMacros.removeIf(m -> m.getName().equals(displayMacro.getName())); + return; + } + + String macroValue = displayMacro.getValue() != null ? displayMacro.getValue() : ""; + Optional existingMacro = setMacros.stream() + .filter(m -> m.getName().equals(displayMacro.getName())).findFirst(); + if (existingMacro.isPresent()) { + existingMacro.get().setValue(macroValue); + existingMacro.get().setUseDefault(false); + } else { + setMacros.add(new Macro(displayMacro)); + } + } + }; + } +} diff --git a/base/uk.ac.stfc.isis.ibex.ui.configserver/src/uk/ac/stfc/isis/ibex/ui/configserver/editing/macros/MacroViewModel.java b/base/uk.ac.stfc.isis.ibex.ui.configserver/src/uk/ac/stfc/isis/ibex/ui/configserver/editing/macros/MacroViewModel.java index 4aa685001b..68b3a97eca 100644 --- a/base/uk.ac.stfc.isis.ibex.ui.configserver/src/uk/ac/stfc/isis/ibex/ui/configserver/editing/macros/MacroViewModel.java +++ b/base/uk.ac.stfc.isis.ibex.ui.configserver/src/uk/ac/stfc/isis/ibex/ui/configserver/editing/macros/MacroViewModel.java @@ -19,7 +19,7 @@ public class MacroViewModel extends ModelObject { public MacroViewModel(Macro macro) { this.macro = macro; macro.addPropertyChangeListener("value", passThrough()); - setUseDefault((macro.getValue() == null) || (macro.getValue().equals(""))); + macro.addPropertyChangeListener("useDefault", passThrough()); } /** @@ -100,7 +100,7 @@ public String getDisplayDefault() { */ public String getDisplayValue() { String macroDisplayVal = "(default)"; - if (macro.getValue() != "") { + if (!macro.getUseDefault()) { macroDisplayVal = macro.getValue(); } return macroDisplayVal;