From: lolodomo Date: Sat, 5 Jun 2021 17:33:30 +0000 (+0200) Subject: [homeconnect] Add missing channel update handler configuration (#10785) X-Git-Url: https://git.basschouten.com/?a=commitdiff_plain;h=d36c7804d044a375ff973b7d944af6be6e42f70b;p=openhab-addons.git [homeconnect] Add missing channel update handler configuration (#10785) * [homeconnect] Add missing channel update handler configuration Related to dryer, washer and washer/dryer appliances Signed-off-by: Laurent Garnier * 2 new methods to factorize duplicated code Signed-off-by: Laurent Garnier * Apply spotless Signed-off-by: Laurent Garnier --- diff --git a/bundles/org.openhab.binding.homeconnect/src/main/java/org/openhab/binding/homeconnect/internal/handler/AbstractHomeConnectThingHandler.java b/bundles/org.openhab.binding.homeconnect/src/main/java/org/openhab/binding/homeconnect/internal/handler/AbstractHomeConnectThingHandler.java index f042a56d02..e6e370a273 100644 --- a/bundles/org.openhab.binding.homeconnect/src/main/java/org/openhab/binding/homeconnect/internal/handler/AbstractHomeConnectThingHandler.java +++ b/bundles/org.openhab.binding.homeconnect/src/main/java/org/openhab/binding/homeconnect/internal/handler/AbstractHomeConnectThingHandler.java @@ -1073,6 +1073,25 @@ public abstract class AbstractHomeConnectThingHandler extends BaseThingHandler i })); } + protected ChannelUpdateHandler getAndUpdateSelectedProgramStateUpdateHandler() { + return (channelUID, cache) -> { + Optional channel = getThingChannel(CHANNEL_SELECTED_PROGRAM_STATE); + if (channel.isPresent()) { + defaultSelectedProgramStateUpdateHandler().handle(channel.get().getUID(), cache); + } + }; + } + + protected ChannelUpdateHandler getAndUpdateProgramOptionsStateDescriptionsAndSelectedProgramStateUpdateHandler() { + return (channelUID, cache) -> { + Optional channel = getThingChannel(CHANNEL_SELECTED_PROGRAM_STATE); + if (channel.isPresent()) { + updateProgramOptionsStateDescriptionsAndSelectedProgramStateUpdateHandler() + .handle(channel.get().getUID(), cache); + } + }; + } + protected ChannelUpdateHandler defaultActiveProgramStateUpdateHandler() { return (channelUID, cache) -> updateState(channelUID, cache.putIfAbsentAndGet(channelUID, () -> { Optional apiClient = getApiClient(); diff --git a/bundles/org.openhab.binding.homeconnect/src/main/java/org/openhab/binding/homeconnect/internal/handler/HomeConnectDryerHandler.java b/bundles/org.openhab.binding.homeconnect/src/main/java/org/openhab/binding/homeconnect/internal/handler/HomeConnectDryerHandler.java index cab3ad3e31..06835e5be6 100644 --- a/bundles/org.openhab.binding.homeconnect/src/main/java/org/openhab/binding/homeconnect/internal/handler/HomeConnectDryerHandler.java +++ b/bundles/org.openhab.binding.homeconnect/src/main/java/org/openhab/binding/homeconnect/internal/handler/HomeConnectDryerHandler.java @@ -60,6 +60,10 @@ public class HomeConnectDryerHandler extends AbstractHomeConnectThingHandler { handlers.put(CHANNEL_ACTIVE_PROGRAM_STATE, defaultActiveProgramStateUpdateHandler()); handlers.put(CHANNEL_SELECTED_PROGRAM_STATE, updateProgramOptionsStateDescriptionsAndSelectedProgramStateUpdateHandler()); + + // register dryer specific handlers + handlers.put(CHANNEL_DRYER_DRYING_TARGET, + getAndUpdateProgramOptionsStateDescriptionsAndSelectedProgramStateUpdateHandler()); } @Override diff --git a/bundles/org.openhab.binding.homeconnect/src/main/java/org/openhab/binding/homeconnect/internal/handler/HomeConnectOvenHandler.java b/bundles/org.openhab.binding.homeconnect/src/main/java/org/openhab/binding/homeconnect/internal/handler/HomeConnectOvenHandler.java index ec69c146e3..d7e4ce602a 100644 --- a/bundles/org.openhab.binding.homeconnect/src/main/java/org/openhab/binding/homeconnect/internal/handler/HomeConnectOvenHandler.java +++ b/bundles/org.openhab.binding.homeconnect/src/main/java/org/openhab/binding/homeconnect/internal/handler/HomeConnectOvenHandler.java @@ -36,7 +36,6 @@ import org.openhab.binding.homeconnect.internal.client.model.Data; import org.openhab.binding.homeconnect.internal.type.HomeConnectDynamicStateDescriptionProvider; import org.openhab.core.library.types.OnOffType; import org.openhab.core.library.types.QuantityType; -import org.openhab.core.thing.Channel; import org.openhab.core.thing.ChannelUID; import org.openhab.core.thing.Thing; import org.openhab.core.types.Command; @@ -89,18 +88,8 @@ public class HomeConnectOvenHandler extends AbstractHomeConnectThingHandler { } return UnDefType.UNDEF; }))); - handlers.put(CHANNEL_SETPOINT_TEMPERATURE, (channelUID, cache) -> { - Optional channel = getThingChannel(CHANNEL_SELECTED_PROGRAM_STATE); - if (channel.isPresent()) { - defaultSelectedProgramStateUpdateHandler().handle(channel.get().getUID(), cache); - } - }); - handlers.put(CHANNEL_DURATION, (channelUID, cache) -> { - Optional channel = getThingChannel(CHANNEL_SELECTED_PROGRAM_STATE); - if (channel.isPresent()) { - defaultSelectedProgramStateUpdateHandler().handle(channel.get().getUID(), cache); - } - }); + handlers.put(CHANNEL_SETPOINT_TEMPERATURE, getAndUpdateSelectedProgramStateUpdateHandler()); + handlers.put(CHANNEL_DURATION, getAndUpdateSelectedProgramStateUpdateHandler()); } @Override diff --git a/bundles/org.openhab.binding.homeconnect/src/main/java/org/openhab/binding/homeconnect/internal/handler/HomeConnectWasherDryerHandler.java b/bundles/org.openhab.binding.homeconnect/src/main/java/org/openhab/binding/homeconnect/internal/handler/HomeConnectWasherDryerHandler.java index 9d1d97d2ac..bdb1a9e5ec 100644 --- a/bundles/org.openhab.binding.homeconnect/src/main/java/org/openhab/binding/homeconnect/internal/handler/HomeConnectWasherDryerHandler.java +++ b/bundles/org.openhab.binding.homeconnect/src/main/java/org/openhab/binding/homeconnect/internal/handler/HomeConnectWasherDryerHandler.java @@ -17,7 +17,6 @@ import static org.openhab.binding.homeconnect.internal.HomeConnectBindingConstan import java.util.Arrays; import java.util.List; import java.util.Map; -import java.util.Optional; import org.eclipse.jdt.annotation.NonNullByDefault; import org.openhab.binding.homeconnect.internal.client.HomeConnectApiClient; @@ -26,7 +25,6 @@ import org.openhab.binding.homeconnect.internal.client.exception.AuthorizationEx import org.openhab.binding.homeconnect.internal.client.exception.CommunicationException; import org.openhab.binding.homeconnect.internal.type.HomeConnectDynamicStateDescriptionProvider; import org.openhab.core.library.types.StringType; -import org.openhab.core.thing.Channel; import org.openhab.core.thing.ChannelUID; import org.openhab.core.thing.Thing; import org.openhab.core.types.Command; @@ -65,20 +63,13 @@ public class HomeConnectWasherDryerHandler extends AbstractHomeConnectThingHandl updateProgramOptionsStateDescriptionsAndSelectedProgramStateUpdateHandler()); // register washer specific handlers - handlers.put(CHANNEL_WASHER_SPIN_SPEED, (channelUID, cache) -> { - Optional channel = getThingChannel(CHANNEL_SELECTED_PROGRAM_STATE); - if (channel.isPresent()) { - updateProgramOptionsStateDescriptionsAndSelectedProgramStateUpdateHandler() - .handle(channel.get().getUID(), cache); - } - }); - handlers.put(CHANNEL_WASHER_TEMPERATURE, (channelUID, cache) -> { - Optional channel = getThingChannel(CHANNEL_SELECTED_PROGRAM_STATE); - if (channel.isPresent()) { - updateProgramOptionsStateDescriptionsAndSelectedProgramStateUpdateHandler() - .handle(channel.get().getUID(), cache); - } - }); + handlers.put(CHANNEL_WASHER_SPIN_SPEED, + getAndUpdateProgramOptionsStateDescriptionsAndSelectedProgramStateUpdateHandler()); + handlers.put(CHANNEL_WASHER_TEMPERATURE, + getAndUpdateProgramOptionsStateDescriptionsAndSelectedProgramStateUpdateHandler()); + // register dryer specific handlers + handlers.put(CHANNEL_DRYER_DRYING_TARGET, + getAndUpdateProgramOptionsStateDescriptionsAndSelectedProgramStateUpdateHandler()); } @Override @@ -103,6 +94,7 @@ public class HomeConnectWasherDryerHandler extends AbstractHomeConnectThingHandl handlers.put(EVENT_WASHER_SPIN_SPEED, event -> getThingChannel(CHANNEL_WASHER_SPIN_SPEED).ifPresent(channel -> updateState(channel.getUID(), event.getValue() == null ? UnDefType.UNDEF : new StringType(event.getValue())))); + // register dryer specific event handlers handlers.put(EVENT_DRYER_DRYING_TARGET, event -> getThingChannel(CHANNEL_DRYER_DRYING_TARGET).ifPresent(channel -> updateState(channel.getUID(), event.getValue() == null ? UnDefType.UNDEF : new StringType(event.getValue())))); diff --git a/bundles/org.openhab.binding.homeconnect/src/main/java/org/openhab/binding/homeconnect/internal/handler/HomeConnectWasherHandler.java b/bundles/org.openhab.binding.homeconnect/src/main/java/org/openhab/binding/homeconnect/internal/handler/HomeConnectWasherHandler.java index 964d9bcad7..beda8976f8 100644 --- a/bundles/org.openhab.binding.homeconnect/src/main/java/org/openhab/binding/homeconnect/internal/handler/HomeConnectWasherHandler.java +++ b/bundles/org.openhab.binding.homeconnect/src/main/java/org/openhab/binding/homeconnect/internal/handler/HomeConnectWasherHandler.java @@ -17,7 +17,6 @@ import static org.openhab.binding.homeconnect.internal.HomeConnectBindingConstan import java.util.Arrays; import java.util.List; import java.util.Map; -import java.util.Optional; import org.eclipse.jdt.annotation.NonNullByDefault; import org.openhab.binding.homeconnect.internal.client.HomeConnectApiClient; @@ -26,7 +25,6 @@ import org.openhab.binding.homeconnect.internal.client.exception.AuthorizationEx import org.openhab.binding.homeconnect.internal.client.exception.CommunicationException; import org.openhab.binding.homeconnect.internal.type.HomeConnectDynamicStateDescriptionProvider; import org.openhab.core.library.types.StringType; -import org.openhab.core.thing.Channel; import org.openhab.core.thing.ChannelUID; import org.openhab.core.thing.Thing; import org.openhab.core.types.Command; @@ -65,20 +63,14 @@ public class HomeConnectWasherHandler extends AbstractHomeConnectThingHandler { updateProgramOptionsStateDescriptionsAndSelectedProgramStateUpdateHandler()); // register washer specific handlers - handlers.put(CHANNEL_WASHER_SPIN_SPEED, (channelUID, cache) -> { - Optional channel = getThingChannel(CHANNEL_SELECTED_PROGRAM_STATE); - if (channel.isPresent()) { - updateProgramOptionsStateDescriptionsAndSelectedProgramStateUpdateHandler() - .handle(channel.get().getUID(), cache); - } - }); - handlers.put(CHANNEL_WASHER_TEMPERATURE, (channelUID, cache) -> { - Optional channel = getThingChannel(CHANNEL_SELECTED_PROGRAM_STATE); - if (channel.isPresent()) { - updateProgramOptionsStateDescriptionsAndSelectedProgramStateUpdateHandler() - .handle(channel.get().getUID(), cache); - } - }); + handlers.put(CHANNEL_WASHER_SPIN_SPEED, + getAndUpdateProgramOptionsStateDescriptionsAndSelectedProgramStateUpdateHandler()); + handlers.put(CHANNEL_WASHER_TEMPERATURE, + getAndUpdateProgramOptionsStateDescriptionsAndSelectedProgramStateUpdateHandler()); + handlers.put(CHANNEL_WASHER_IDOS1, + getAndUpdateProgramOptionsStateDescriptionsAndSelectedProgramStateUpdateHandler()); + handlers.put(CHANNEL_WASHER_IDOS2, + getAndUpdateProgramOptionsStateDescriptionsAndSelectedProgramStateUpdateHandler()); } @Override