From 230d6beb00cd61339014c8e1f029d3a868b48f12 Mon Sep 17 00:00:00 2001 From: lcaouen Date: Tue, 30 Apr 2024 08:50:44 +0200 Subject: [PATCH 1/2] https://github.com/ControlSystemStudio/phoebus/issues/2945 --- .../display/builder/runtime/app/DisplayInfo.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/app/display/runtime/src/main/java/org/csstudio/display/builder/runtime/app/DisplayInfo.java b/app/display/runtime/src/main/java/org/csstudio/display/builder/runtime/app/DisplayInfo.java index 01d1ec89f5..588eab1ea1 100644 --- a/app/display/runtime/src/main/java/org/csstudio/display/builder/runtime/app/DisplayInfo.java +++ b/app/display/runtime/src/main/java/org/csstudio/display/builder/runtime/app/DisplayInfo.java @@ -246,10 +246,18 @@ else if (path.contains(":")) .append('=') .append(encode(macros.getValue(name))); } + String strBuffer = buf.toString(); + + // macro can be defined after component creation + // replace again macros by the correct value + for (String name : macros.getNames()) + { + strBuffer = strBuffer.replaceAll("%24%28" + name + "%29", macros.getValue(name)); + } try { - return new URI(buf.toString()); + return new URI(strBuffer); } catch (URISyntaxException ex) { From 8070a4038ad5b063edcfdd610594ce106bb93339 Mon Sep 17 00:00:00 2001 From: lcaouen Date: Fri, 3 May 2024 12:42:05 +0200 Subject: [PATCH 2/2] #2945 using MacroHandler.replace instead of "for" --- .../builder/runtime/app/DisplayInfo.java | 20 +++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/app/display/runtime/src/main/java/org/csstudio/display/builder/runtime/app/DisplayInfo.java b/app/display/runtime/src/main/java/org/csstudio/display/builder/runtime/app/DisplayInfo.java index 588eab1ea1..f33e31cc32 100644 --- a/app/display/runtime/src/main/java/org/csstudio/display/builder/runtime/app/DisplayInfo.java +++ b/app/display/runtime/src/main/java/org/csstudio/display/builder/runtime/app/DisplayInfo.java @@ -17,6 +17,7 @@ import java.util.logging.Level; import org.csstudio.display.builder.model.DisplayModel; +import org.csstudio.display.builder.model.macros.MacroHandler; import org.phoebus.framework.macros.Macros; import org.phoebus.framework.util.ResourceParser; @@ -242,19 +243,22 @@ else if (path.contains(":")) } else buf.append('&'); + + String macroValue = macros.getValue(name); + // macro can be defined after component creation + // replace again macros by the correct value + try { + macroValue = MacroHandler.replace(macros, macroValue); + } catch (Exception ex) { + logger.log(Level.SEVERE, "Internal error in MacroHandler.replace '" + macroValue + "'", ex); + } + buf.append(name) .append('=') - .append(encode(macros.getValue(name))); + .append(encode(macroValue)); } String strBuffer = buf.toString(); - // macro can be defined after component creation - // replace again macros by the correct value - for (String name : macros.getNames()) - { - strBuffer = strBuffer.replaceAll("%24%28" + name + "%29", macros.getValue(name)); - } - try { return new URI(strBuffer);