[DSL rule] Add tags to DSL file syntax (#5442)

* [DSL rule] Add tags to DSL file syntax

Closes #5436

Signed-off-by: Laurent Garnier <lg.hc@free.fr>
This commit is contained in:
lolodomo
2026-03-25 21:22:06 +01:00
committed by GitHub
parent 52ca83fadb
commit 0edae941f1
3 changed files with 13 additions and 3 deletions
@@ -18,6 +18,7 @@ import java.util.Iterator;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Map.Entry; import java.util.Map.Entry;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@@ -279,7 +280,11 @@ public class DSLRuleProvider
List<Action> actions = List.of(ActionBuilder.create().withId("script").withTypeUID("script.ScriptAction") List<Action> actions = List.of(ActionBuilder.create().withId("script").withTypeUID("script.ScriptAction")
.withConfiguration(cfg).build()); .withConfiguration(cfg).build());
return RuleBuilder.create(uid).withName(name).withTriggers(triggers).withActions(actions).build(); List<String> ruleTags = rule.getTags();
Set<String> tags = ruleTags == null ? Set.of() : Set.copyOf(ruleTags);
return RuleBuilder.create(uid).withTags(tags).withName(name).withTriggers(triggers).withActions(actions)
.build();
} }
private String removeIndentation(String script) { private String removeIndentation(String script) {
@@ -12,7 +12,7 @@ VariableDeclaration:
; ;
Rule: Rule:
'rule' name=(STRING|ID) 'rule' name=(STRING|ID) ('[' tags+=(ID|STRING) (',' tags+=(ID|STRING))* ']')?
'when' eventtrigger+=EventTrigger ('or' eventtrigger+=EventTrigger)* 'when' eventtrigger+=EventTrigger ('or' eventtrigger+=EventTrigger)*
'then' script=XExpressionInClosure 'then' script=XExpressionInClosure
'end' 'end'
@@ -14,6 +14,7 @@ package org.openhab.core.model.rule.runtime;
import static org.hamcrest.CoreMatchers.*; import static org.hamcrest.CoreMatchers.*;
import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.hasSize;
import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertNotNull;
import java.io.ByteArrayInputStream; import java.io.ByteArrayInputStream;
@@ -93,7 +94,7 @@ public class DSLRuleProviderTest extends JavaOSGiTest {
Collection<Rule> rules = dslRuleProvider.getAll(); Collection<Rule> rules = dslRuleProvider.getAll();
assertThat(rules.size(), is(0)); assertThat(rules.size(), is(0));
String model = "rule RuleNumberOne\n" + // String model = "rule RuleNumberOne [ Test, \"my test\" ]\n" + //
"when\n" + // "when\n" + //
" System started\n" + // " System started\n" + //
"then\n" + // "then\n" + //
@@ -117,6 +118,9 @@ public class DSLRuleProviderTest extends JavaOSGiTest {
assertThat(firstRule.getUID(), is("dslruletest-1")); assertThat(firstRule.getUID(), is("dslruletest-1"));
assertThat(firstRule.getName(), is("RuleNumberOne")); assertThat(firstRule.getName(), is("RuleNumberOne"));
assertThat(firstRule.getTags(), hasSize(2));
assertThat(firstRule.getTags(), hasItem("Test"));
assertThat(firstRule.getTags(), hasItem("my test"));
assertThat(firstRule.getTriggers().getFirst().getTypeUID(), is(SystemTriggerHandler.STARTLEVEL_MODULE_TYPE_ID)); assertThat(firstRule.getTriggers().getFirst().getTypeUID(), is(SystemTriggerHandler.STARTLEVEL_MODULE_TYPE_ID));
assertThat(firstRule.getActions().getFirst().getTypeUID(), is(ScriptActionHandler.TYPE_ID)); assertThat(firstRule.getActions().getFirst().getTypeUID(), is(ScriptActionHandler.TYPE_ID));
assertThat(firstRule.getActions().getFirst().getConfiguration() assertThat(firstRule.getActions().getFirst().getConfiguration()
@@ -126,6 +130,7 @@ public class DSLRuleProviderTest extends JavaOSGiTest {
assertThat(secondRule.getUID(), is("dslruletest-2")); assertThat(secondRule.getUID(), is("dslruletest-2"));
assertThat(secondRule.getName(), is("Rule Number Two")); assertThat(secondRule.getName(), is("Rule Number Two"));
assertThat(secondRule.getTags(), hasSize(0));
assertThat(secondRule.getTriggers().getFirst().getTypeUID(), is(ItemStateTriggerHandler.CHANGE_MODULE_TYPE_ID)); assertThat(secondRule.getTriggers().getFirst().getTypeUID(), is(ItemStateTriggerHandler.CHANGE_MODULE_TYPE_ID));
assertThat(secondRule.getTriggers().getFirst().getConfiguration().get(ItemStateTriggerHandler.CFG_ITEMNAME), assertThat(secondRule.getTriggers().getFirst().getConfiguration().get(ItemStateTriggerHandler.CFG_ITEMNAME),
is("X")); is("X"));