Skip to content

Commit 6282298

Browse files
authored
[YAML provider] Fix check of syntax for item names (#5065)
Closes #4903 Makes check consistent with what was done for DSL in #4928 Signed-off-by: Laurent Garnier <lg.hc@free.fr>
1 parent 26015ff commit 6282298

2 files changed

Lines changed: 28 additions & 24 deletions

File tree

bundles/org.openhab.core.model.yaml/src/main/java/org/openhab/core/model/yaml/internal/items/YamlItemDTO.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import org.eclipse.jdt.annotation.Nullable;
2424
import org.openhab.core.common.AbstractUID;
2525
import org.openhab.core.items.GroupItem;
26+
import org.openhab.core.items.ItemUtil;
2627
import org.openhab.core.model.yaml.YamlElement;
2728
import org.openhab.core.model.yaml.YamlElementName;
2829
import org.openhab.core.model.yaml.internal.util.YamlElementUtils;
@@ -88,9 +89,10 @@ public boolean isValid(@Nullable List<@NonNull String> errors, @Nullable List<@N
8889
return false;
8990
}
9091
boolean ok = true;
91-
if (!ID_PATTERN.matcher(name).matches()) {
92-
addToList(errors, "invalid item: name \"%s\" not matching the expected syntax %s".formatted(name,
93-
ID_PATTERN.pattern()));
92+
if (!ItemUtil.isValidItemName(name)) {
93+
addToList(errors,
94+
"invalid item \"%s\": \"name\" must begin with a letter or underscore followed by alphanumeric characters and underscores, and must not contain any other symbols."
95+
.formatted(name));
9496
ok = false;
9597
}
9698
List<String> subErrors = new ArrayList<>();

bundles/org.openhab.core.model.yaml/src/test/java/org/openhab/core/model/yaml/internal/items/YamlItemDTOTest.java

Lines changed: 23 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,8 @@ public void testIsValid() throws IOException {
5454
item.name = "$name";
5555
assertFalse(item.isValid(null, null));
5656
item.name = "my-name";
57+
assertFalse(item.isValid(null, null));
58+
item.name = "my_name";
5759
assertTrue(item.isValid(null, null));
5860

5961
item.type = "Group";
@@ -123,10 +125,10 @@ public void testEquals() throws IOException {
123125
YamlItemDTO item1 = new YamlItemDTO();
124126
YamlItemDTO item2 = new YamlItemDTO();
125127

126-
item1.name = "item-name";
127-
item2.name = "item-name-2";
128+
item1.name = "item_name";
129+
item2.name = "item_name_2";
128130
assertFalse(item1.equals(item2));
129-
item2.name = "item-name";
131+
item2.name = "item_name";
130132
assertTrue(item1.equals(item2));
131133
assertEquals(item1.hashCode(), item2.hashCode());
132134

@@ -206,8 +208,8 @@ public void testEqualsWithLabel() throws IOException {
206208
YamlItemDTO item1 = new YamlItemDTO();
207209
YamlItemDTO item2 = new YamlItemDTO();
208210

209-
item1.name = "item-name";
210-
item2.name = "item-name";
211+
item1.name = "item_name";
212+
item2.name = "item_name";
211213
item1.type = "String";
212214
item2.type = "String";
213215

@@ -235,8 +237,8 @@ public void testEqualsWithIcon() throws IOException {
235237
YamlItemDTO item1 = new YamlItemDTO();
236238
YamlItemDTO item2 = new YamlItemDTO();
237239

238-
item1.name = "item-name";
239-
item2.name = "item-name";
240+
item1.name = "item_name";
241+
item2.name = "item_name";
240242
item1.type = "Number";
241243
item2.type = "Number";
242244

@@ -264,8 +266,8 @@ public void testEqualsWithFormat() throws IOException {
264266
YamlItemDTO item1 = new YamlItemDTO();
265267
YamlItemDTO item2 = new YamlItemDTO();
266268

267-
item1.name = "item-name";
268-
item2.name = "item-name";
269+
item1.name = "item_name";
270+
item2.name = "item_name";
269271
item1.type = "Number";
270272
item2.type = "Number";
271273

@@ -293,8 +295,8 @@ public void testEqualsWithUnit() throws IOException {
293295
YamlItemDTO item1 = new YamlItemDTO();
294296
YamlItemDTO item2 = new YamlItemDTO();
295297

296-
item1.name = "item-name";
297-
item2.name = "item-name";
298+
item1.name = "item_name";
299+
item2.name = "item_name";
298300
item1.type = "Number";
299301
item2.type = "Number";
300302

@@ -322,8 +324,8 @@ public void testEqualsWithAutoupdate() throws IOException {
322324
YamlItemDTO item1 = new YamlItemDTO();
323325
YamlItemDTO item2 = new YamlItemDTO();
324326

325-
item1.name = "item-name";
326-
item2.name = "item-name";
327+
item1.name = "item_name";
328+
item2.name = "item_name";
327329
item1.type = "Number";
328330
item2.type = "Number";
329331

@@ -364,8 +366,8 @@ public void testEqualsWithGroups() throws IOException {
364366
YamlItemDTO item1 = new YamlItemDTO();
365367
YamlItemDTO item2 = new YamlItemDTO();
366368

367-
item1.name = "item-name";
368-
item2.name = "item-name";
369+
item1.name = "item_name";
370+
item2.name = "item_name";
369371
item1.type = "Number";
370372
item2.type = "Number";
371373

@@ -406,8 +408,8 @@ public void testEqualsWithTags() throws IOException {
406408
YamlItemDTO item1 = new YamlItemDTO();
407409
YamlItemDTO item2 = new YamlItemDTO();
408410

409-
item1.name = "item-name";
410-
item2.name = "item-name";
411+
item1.name = "item_name";
412+
item2.name = "item_name";
411413
item1.type = "Number";
412414
item2.type = "Number";
413415

@@ -449,8 +451,8 @@ public void testEqualsWithChannels() throws IOException {
449451
YamlItemDTO item1 = new YamlItemDTO();
450452
YamlItemDTO item2 = new YamlItemDTO();
451453

452-
item1.name = "item-name";
453-
item2.name = "item-name";
454+
item1.name = "item_name";
455+
item2.name = "item_name";
454456
item1.type = "Number";
455457
item2.type = "Number";
456458

@@ -499,8 +501,8 @@ public void testEqualsWithMetadata() throws IOException {
499501
YamlItemDTO item1 = new YamlItemDTO();
500502
YamlItemDTO item2 = new YamlItemDTO();
501503

502-
item1.name = "item-name";
503-
item2.name = "item-name";
504+
item1.name = "item_name";
505+
item2.name = "item_name";
504506
item1.type = "Number";
505507
item2.type = "Number";
506508

0 commit comments

Comments
 (0)