From 3c3e9adbb1bad928d66932677189c5b9dd5aca62 Mon Sep 17 00:00:00 2001 From: robnielsen Date: Wed, 11 Nov 2020 13:29:55 -0600 Subject: [PATCH] [insteon] sort the channels by channel id so they show up sorted in the ui (#8966) Signed-off-by: Rob Nielsen --- .../handler/InsteonDeviceHandler.java | 38 +++++++++++-------- 1 file changed, 22 insertions(+), 16 deletions(-) diff --git a/bundles/org.openhab.binding.insteon/src/main/java/org/openhab/binding/insteon/internal/handler/InsteonDeviceHandler.java b/bundles/org.openhab.binding.insteon/src/main/java/org/openhab/binding/insteon/internal/handler/InsteonDeviceHandler.java index d1505fb0a..736f86ec0 100644 --- a/bundles/org.openhab.binding.insteon/src/main/java/org/openhab/binding/insteon/internal/handler/InsteonDeviceHandler.java +++ b/bundles/org.openhab.binding.insteon/src/main/java/org/openhab/binding/insteon/internal/handler/InsteonDeviceHandler.java @@ -226,8 +226,7 @@ public class InsteonDeviceHandler extends BaseThingHandler { return; } - StringBuilder channelList = new StringBuilder(); - List channels = new ArrayList<>(); + Map channelMap = new HashMap<>(); String thingId = getThing().getUID().getAsString(); for (String channelId : ALL_CHANNEL_IDS) { String feature = channelId.toLowerCase(); @@ -272,7 +271,7 @@ public class InsteonDeviceHandler extends BaseThingHandler { for (Channel channel : thing.getChannels()) { String id = channel.getUID().getId(); if (id.startsWith(InsteonBindingConstants.BROADCAST_ON_OFF)) { - addChannel(channel, id, channels, channelList); + channelMap.put(id, channel); broadcastChannels.add(id); } } @@ -295,7 +294,7 @@ public class InsteonDeviceHandler extends BaseThingHandler { .createChannelBuilder(channelUID, channelTypeUID).withLabel(id) .build(); - addChannel(channel, id, channels, channelList); + channelMap.put(id, channel); broadcastChannels.add(id); } } else { @@ -323,7 +322,7 @@ public class InsteonDeviceHandler extends BaseThingHandler { channel = callback.createChannelBuilder(channelUID, channelTypeUID).build(); } - addChannel(channel, channelId, channels, channelList); + channelMap.put(channelId, channel); } } else { logger.debug("{} is a feature group for {}. It will not be added as a channel.", feature, @@ -332,8 +331,24 @@ public class InsteonDeviceHandler extends BaseThingHandler { } } - if (!channels.isEmpty() || device.isModem()) { - if (!channels.isEmpty()) { + if (!channelMap.isEmpty() || device.isModem()) { + List channels = new ArrayList<>(); + StringBuilder channelList = new StringBuilder(); + if (!channelMap.isEmpty()) { + List channelIds = new ArrayList<>(channelMap.keySet()); + Collections.sort(channelIds); + channelIds.forEach(channelId -> { + Channel channel = channelMap.get(channelId); + if (channel != null) { + channels.add(channel); + + if (channelList.length() > 0) { + channelList.append(", "); + } + channelList.append(channelId); + } + }); + updateThing(editThing().withChannels(channels).build()); } @@ -367,15 +382,6 @@ public class InsteonDeviceHandler extends BaseThingHandler { }); } - private void addChannel(Channel channel, String channelId, List channels, StringBuilder channelList) { - channels.add(channel); - - if (channelList.length() > 0) { - channelList.append(", "); - } - channelList.append(channelId); - } - @Override public void dispose() { InsteonDeviceConfiguration config = this.config;