diff --git a/bundles/org.openhab.core.model.yaml/src/main/java/org/openhab/core/model/yaml/internal/items/YamlItemProvider.java b/bundles/org.openhab.core.model.yaml/src/main/java/org/openhab/core/model/yaml/internal/items/YamlItemProvider.java index cde8cbea8..a4a8c5c2b 100644 --- a/bundles/org.openhab.core.model.yaml/src/main/java/org/openhab/core/model/yaml/internal/items/YamlItemProvider.java +++ b/bundles/org.openhab.core.model.yaml/src/main/java/org/openhab/core/model/yaml/internal/items/YamlItemProvider.java @@ -161,11 +161,8 @@ public class YamlItemProvider extends AbstractProvider implements ItemProv @Override public void removedModel(String modelName, Collection elements) { - List removed = elements.stream().map(elt -> mapItem(elt)).filter(Objects::nonNull).toList(); - Collection modelItems = itemsMap.getOrDefault(modelName, List.of()); - removed.forEach(item -> { - String name = item.getName(); + elements.stream().map(elt -> elt.name).forEach(name -> { modelItems.stream().filter(i -> i.getName().equals(name)).findFirst().ifPresentOrElse(oldItem -> { modelItems.remove(oldItem); logger.debug("model {} removed item {}", modelName, name); diff --git a/bundles/org.openhab.core.model.yaml/src/main/java/org/openhab/core/model/yaml/internal/semantics/YamlSemanticTagProvider.java b/bundles/org.openhab.core.model.yaml/src/main/java/org/openhab/core/model/yaml/internal/semantics/YamlSemanticTagProvider.java index 696c71268..b623cc327 100644 --- a/bundles/org.openhab.core.model.yaml/src/main/java/org/openhab/core/model/yaml/internal/semantics/YamlSemanticTagProvider.java +++ b/bundles/org.openhab.core.model.yaml/src/main/java/org/openhab/core/model/yaml/internal/semantics/YamlSemanticTagProvider.java @@ -94,14 +94,12 @@ public class YamlSemanticTagProvider extends AbstractProvider @Override public void removedModel(String modelName, Collection elements) { - List removed = elements.stream().map(this::mapSemanticTag) - .sorted(Comparator.comparing(SemanticTag::getUID).reversed()).toList(); - removed.forEach(t -> { - tags.stream().filter(tag -> tag.getUID().equals(t.getUID())).findFirst().ifPresentOrElse(oldTag -> { + elements.stream().map(elt -> elt.uid).sorted(Comparator.reverseOrder()).forEach(uid -> { + tags.stream().filter(tag -> tag.getUID().equals(uid)).findFirst().ifPresentOrElse(oldTag -> { tags.remove(oldTag); - logger.debug("model {} removed tag {}", modelName, t.getUID()); + logger.debug("model {} removed tag {}", modelName, uid); notifyListenersAboutRemovedElement(oldTag); - }, () -> logger.debug("model {} tag {} not found", modelName, t.getUID())); + }, () -> logger.debug("model {} tag {} not found", modelName, uid)); }); } diff --git a/bundles/org.openhab.core.model.yaml/src/main/java/org/openhab/core/model/yaml/internal/things/YamlThingProvider.java b/bundles/org.openhab.core.model.yaml/src/main/java/org/openhab/core/model/yaml/internal/things/YamlThingProvider.java index 824d2983e..e11653db2 100644 --- a/bundles/org.openhab.core.model.yaml/src/main/java/org/openhab/core/model/yaml/internal/things/YamlThingProvider.java +++ b/bundles/org.openhab.core.model.yaml/src/main/java/org/openhab/core/model/yaml/internal/things/YamlThingProvider.java @@ -222,16 +222,15 @@ public class YamlThingProvider extends AbstractProvider @Override public void removedModel(String modelName, Collection elements) { boolean isolated = isIsolatedModel(modelName); - List removed = elements.stream().map(t -> mapThing(t, isolated)).filter(Objects::nonNull).toList(); Collection modelThings = thingsMap.getOrDefault(modelName, List.of()); - removed.forEach(t -> { - modelThings.stream().filter(th -> th.getUID().equals(t.getUID())).findFirst().ifPresentOrElse(oldThing -> { + elements.stream().map(this::buildThingUID).filter(Objects::nonNull).forEach(uid -> { + modelThings.stream().filter(th -> th.getUID().equals(uid)).findFirst().ifPresentOrElse(oldThing -> { modelThings.remove(oldThing); - logger.debug("model {} removed thing {}", modelName, t.getUID()); + logger.debug("model {} removed thing {}", modelName, uid); if (!isolated) { notifyListenersAboutRemovedElement(oldThing); } - }, () -> logger.debug("model {} thing {} not found", modelName, t.getUID())); + }, () -> logger.debug("model {} thing {} not found", modelName, uid)); }); if (modelThings.isEmpty()) { thingsMap.remove(modelName); @@ -353,6 +352,14 @@ public class YamlThingProvider extends AbstractProvider return bundle == null ? null : bundle.getSymbolicName(); } + private @Nullable ThingUID buildThingUID(YamlThingDTO thingDto) { + try { + return new ThingUID(thingDto.uid); + } catch (IllegalArgumentException e) { + return null; + } + } + private @Nullable Thing mapThing(YamlThingDTO thingDto, boolean isolatedModel) { try { ThingUID thingUID = new ThingUID(thingDto.uid);