mirror of
https://github.com/openhab/openhab-addons.git
synced 2025-01-10 15:11:59 +01:00
[mqtt.homeassistant] Stable jsondb discovery result (#13401)
* [mqtt.homeassistant] Stable jsondb serialization for discovery results Similar to openhab/openhab-core#2436, we want to have consistent ordering of data in JSONDB. This is fixing the jsondb order for mqtt.homeassistant discovery results, specifically, the "topics" property. * [mqtt.homeassistant] order using full topic string, not by subcomponent Signed-off-by: Sami Salonen <ssalonen@gmail.com>
This commit is contained in:
parent
6ebf20f183
commit
2fd2e5175f
@ -16,9 +16,11 @@ import java.nio.charset.StandardCharsets;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.Set;
|
||||
import java.util.TreeMap;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
@ -166,8 +168,21 @@ public class HomeAssistantDiscovery extends AbstractMQTTDiscovery {
|
||||
thingIDPerTopic.put(topic, thingUID);
|
||||
|
||||
// We need to keep track of already found component topics for a specific thing
|
||||
Set<HaID> components = componentsPerThingID.computeIfAbsent(thingID, key -> ConcurrentHashMap.newKeySet());
|
||||
components.add(haID);
|
||||
final List<HaID> components;
|
||||
{
|
||||
Set<HaID> componentsUnordered = componentsPerThingID.computeIfAbsent(thingID,
|
||||
key -> ConcurrentHashMap.newKeySet());
|
||||
|
||||
// Invariant. For compiler, computeIfAbsent above returns always
|
||||
// non-null
|
||||
Objects.requireNonNull(componentsUnordered);
|
||||
componentsUnordered.add(haID);
|
||||
|
||||
components = componentsUnordered.stream().collect(Collectors.toList());
|
||||
// We sort the components for consistent jsondb serialization order of 'topics' thing property
|
||||
// Sorting key is HaID::toString, i.e. using the full topic string
|
||||
components.sort(Comparator.comparing(HaID::toString));
|
||||
}
|
||||
|
||||
final String componentNames = components.stream().map(id -> id.component)
|
||||
.map(c -> HA_COMP_TO_NAME.getOrDefault(c, c)).collect(Collectors.joining(", "));
|
||||
|
Loading…
Reference in New Issue
Block a user