From e5ceb8c7e72cc337ce503bf942d4e721ebe4ec9a Mon Sep 17 00:00:00 2001 From: Andrew Fiddian-Green Date: Tue, 31 Oct 2023 12:44:34 +0000 Subject: [PATCH] [suggested addon finder] fix check for null properties Signed-off-by: Andrew Fiddian-Green --- .../finders/MDNSAddonSuggestionFinder.java | 16 ++++++-------- .../finders/UpnpAddonSuggestionFinder.java | 22 +++++++++---------- 2 files changed, 18 insertions(+), 20 deletions(-) diff --git a/bundles/org.openhab.core.config.discovery.addon/src/main/java/org/openhab/core/config/discovery/addon/finders/MDNSAddonSuggestionFinder.java b/bundles/org.openhab.core.config.discovery.addon/src/main/java/org/openhab/core/config/discovery/addon/finders/MDNSAddonSuggestionFinder.java index bf4dfa8d387..0fc50e91013 100644 --- a/bundles/org.openhab.core.config.discovery.addon/src/main/java/org/openhab/core/config/discovery/addon/finders/MDNSAddonSuggestionFinder.java +++ b/bundles/org.openhab.core.config.discovery.addon/src/main/java/org/openhab/core/config/discovery/addon/finders/MDNSAddonSuggestionFinder.java @@ -82,18 +82,16 @@ public Set getSuggestedAddons() { addonCandidates.forEach(candidate -> { candidate.getDiscoveryMethods().stream().filter(method -> SERVICE_TYPE.equals(method.getServiceType())) .forEach(method -> { - Map matchProperties = method.getMatchProperties().stream().collect( + Map map = method.getMatchProperties().stream().collect( Collectors.toMap(property -> property.getName(), property -> property.getPattern())); + services.values().stream().forEach(service -> { if (method.getMdnsServiceType().equals(service.getType()) - && propertyMatches(matchProperties, NAME, service.getName())) { - List serviceProperties = Collections.list(service.getPropertyNames()); - if (serviceProperties.containsAll(matchProperties.keySet()) - && serviceProperties.stream().allMatch(name -> propertyMatches(matchProperties, - name, service.getPropertyString(name)))) { - result.add(candidate); - logger.debug("Addon '{}' will be suggested (via mDNS)", candidate.getUID()); - } + && propertyMatches(map, NAME, service.getName()) + && map.keySet().stream().filter(name -> !NAME.equals(name)).allMatch( + name -> propertyMatches(map, name, service.getPropertyString(name)))) { + result.add(candidate); + logger.debug("Addon '{}' will be suggested (via mDNS)", candidate.getUID()); } }); }); diff --git a/bundles/org.openhab.core.config.discovery.addon/src/main/java/org/openhab/core/config/discovery/addon/finders/UpnpAddonSuggestionFinder.java b/bundles/org.openhab.core.config.discovery.addon/src/main/java/org/openhab/core/config/discovery/addon/finders/UpnpAddonSuggestionFinder.java index 805ddbd9930..d3f652a5aad 100644 --- a/bundles/org.openhab.core.config.discovery.addon/src/main/java/org/openhab/core/config/discovery/addon/finders/UpnpAddonSuggestionFinder.java +++ b/bundles/org.openhab.core.config.discovery.addon/src/main/java/org/openhab/core/config/discovery/addon/finders/UpnpAddonSuggestionFinder.java @@ -137,10 +137,10 @@ public Set getSuggestedAddons() { addonCandidates.forEach(candidate -> { candidate.getDiscoveryMethods().stream().filter(method -> SERVICE_TYPE.equals(method.getServiceType())) .forEach(method -> { - Map matchProperties = method.getMatchProperties().stream().collect( + Map map = method.getMatchProperties().stream().collect( Collectors.toMap(property -> property.getName(), property -> property.getPattern())); - Set propNames = new HashSet<>(matchProperties.keySet()); + Set propNames = new HashSet<>(map.keySet()); propNames.removeAll(SUPPORTED_PROPERTIES); if (!propNames.isEmpty()) { logger.warn("Addon '{}' addon.xml file contains unsupported 'match-property' [{}]", @@ -184,15 +184,15 @@ public Set getSuggestedAddons() { } } - if (propertyMatches(matchProperties, DEVICE_TYPE, deviceType) - && propertyMatches(matchProperties, MANUFACTURER, manufacturer) - && propertyMatches(matchProperties, MANUFACTURER_URL, manufacturerURL) - && propertyMatches(matchProperties, MODEL_NAME, modelName) - && propertyMatches(matchProperties, MODEL_NUMBER, modelNumber) - && propertyMatches(matchProperties, MODEL_DESCRIPTION, modelDescription) - && propertyMatches(matchProperties, MODEL_URL, modelURL) - && propertyMatches(matchProperties, SERIAL_NUMBER, serialNumber) - && propertyMatches(matchProperties, FRIENDLY_NAME, friendlyName)) { + if (propertyMatches(map, DEVICE_TYPE, deviceType) + && propertyMatches(map, MANUFACTURER, manufacturer) + && propertyMatches(map, MANUFACTURER_URL, manufacturerURL) + && propertyMatches(map, MODEL_NAME, modelName) + && propertyMatches(map, MODEL_NUMBER, modelNumber) + && propertyMatches(map, MODEL_DESCRIPTION, modelDescription) + && propertyMatches(map, MODEL_URL, modelURL) + && propertyMatches(map, SERIAL_NUMBER, serialNumber) + && propertyMatches(map, FRIENDLY_NAME, friendlyName)) { result.add(candidate); logger.debug("Addon '{}' will be suggested (via UPnP)", candidate.getUID()); }