diff --git a/bundles/org.openhab.core.automation/src/main/java/org/openhab/core/automation/Rule.java b/bundles/org.openhab.core.automation/src/main/java/org/openhab/core/automation/Rule.java index adcdb1cd5bc..50f840fd2bb 100644 --- a/bundles/org.openhab.core.automation/src/main/java/org/openhab/core/automation/Rule.java +++ b/bundles/org.openhab.core.automation/src/main/java/org/openhab/core/automation/Rule.java @@ -218,6 +218,8 @@ public static TemplateState typeOf(@Nullable String templateState) { case "pending": return PENDING; case "template-missing": + case "template missing": + case "template_missing": return TEMPLATE_MISSING; default: return NO_TEMPLATE; diff --git a/bundles/org.openhab.core.automation/src/main/java/org/openhab/core/automation/Visibility.java b/bundles/org.openhab.core.automation/src/main/java/org/openhab/core/automation/Visibility.java index 770c62a028b..3dabdefba78 100644 --- a/bundles/org.openhab.core.automation/src/main/java/org/openhab/core/automation/Visibility.java +++ b/bundles/org.openhab.core.automation/src/main/java/org/openhab/core/automation/Visibility.java @@ -12,7 +12,10 @@ */ package org.openhab.core.automation; +import java.util.Locale; + import org.eclipse.jdt.annotation.NonNullByDefault; +import org.eclipse.jdt.annotation.Nullable; import org.openhab.core.automation.template.Template; import org.openhab.core.automation.type.ModuleType; @@ -36,6 +39,25 @@ public enum Visibility { /** * The UI has to show an object with such visibility only to experts. */ - EXPERT + EXPERT; + /** + * Tries to parse the specified string value into a {@link Visibility} instance. If the parsing fails, {@code null} + * is returned. + * + * @param value the {@link String} to parse. + * @return The resulting {@link Visibility} or {@code null}. + */ + public static @Nullable Visibility typeOf(@Nullable String value) { + if (value == null || value.isBlank()) { + return null; + } + String s = value.trim().toUpperCase(Locale.ROOT); + for (Visibility element : values()) { + if (s.equals(element.name())) { + return element; + } + } + return null; + } } diff --git a/bundles/org.openhab.core.automation/src/main/java/org/openhab/core/automation/internal/parser/gson/RuleGSONParser.java b/bundles/org.openhab.core.automation/src/main/java/org/openhab/core/automation/internal/parser/gson/RuleGSONParser.java index 82430c30397..bd3f5c57d72 100644 --- a/bundles/org.openhab.core.automation/src/main/java/org/openhab/core/automation/internal/parser/gson/RuleGSONParser.java +++ b/bundles/org.openhab.core.automation/src/main/java/org/openhab/core/automation/internal/parser/gson/RuleGSONParser.java @@ -14,7 +14,7 @@ import java.io.IOException; import java.io.InputStreamReader; -import java.util.HashSet; +import java.util.LinkedHashSet; import java.util.List; import java.util.Set; @@ -44,7 +44,7 @@ public class RuleGSONParser extends AbstractGSONParser { public Set parse(InputStreamReader reader) throws ParsingException { JsonReader jr = new JsonReader(reader); try { - Set rules = new HashSet<>(); + Set rules = new LinkedHashSet<>(); if (jr.hasNext()) { JsonToken token = jr.peek(); if (JsonToken.BEGIN_ARRAY.equals(token)) { diff --git a/bundles/org.openhab.core.automation/src/main/java/org/openhab/core/automation/internal/parser/gson/TemplateGSONParser.java b/bundles/org.openhab.core.automation/src/main/java/org/openhab/core/automation/internal/parser/gson/TemplateGSONParser.java index e69026d7b7f..c9b0bd1ee5d 100644 --- a/bundles/org.openhab.core.automation/src/main/java/org/openhab/core/automation/internal/parser/gson/TemplateGSONParser.java +++ b/bundles/org.openhab.core.automation/src/main/java/org/openhab/core/automation/internal/parser/gson/TemplateGSONParser.java @@ -14,7 +14,7 @@ import java.io.IOException; import java.io.InputStreamReader; -import java.util.HashSet; +import java.util.LinkedHashSet; import java.util.List; import java.util.Set; @@ -46,7 +46,7 @@ public Set