From d36c7804d044a375ff973b7d944af6be6e42f70b Mon Sep 17 00:00:00 2001 From: lolodomo Date: Sat, 5 Jun 2021 19:33:30 +0200 Subject: [PATCH] [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 --- .../AbstractHomeConnectThingHandler.java | 19 +++++++++++++++ .../handler/HomeConnectDryerHandler.java | 4 ++++ .../handler/HomeConnectOvenHandler.java | 15 ++---------- .../HomeConnectWasherDryerHandler.java | 24 +++++++------------ .../handler/HomeConnectWasherHandler.java | 24 +++++++------------ 5 files changed, 41 insertions(+), 45 deletions(-) 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 f042a56d0..e6e370a27 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 cab3ad3e3..06835e5be 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 ec69c146e..d7e4ce602 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 9d1d97d2a..bdb1a9e5e 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 964d9bcad..beda8976f 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