From 9e26beb051c6cb4c3c6de9966e228d39f1f56823 Mon Sep 17 00:00:00 2001 From: rschoene <rene.schoene@tu-dresden.de> Date: Fri, 10 May 2019 17:45:15 +0200 Subject: [PATCH] Using EventPublisher in EraserHandler. --- .../openlicht/handler/EraserHandler.java | 26 ++++++++++++++----- .../internal/ConfigurationHolder.java | 4 +++ .../internal/OpenLichtHandlerFactory.java | 18 +++++++++++++ 3 files changed, 42 insertions(+), 6 deletions(-) diff --git a/src/main/java/org/openhab/binding/openlicht/handler/EraserHandler.java b/src/main/java/org/openhab/binding/openlicht/handler/EraserHandler.java index 4cd5ffb..b9478a6 100644 --- a/src/main/java/org/openhab/binding/openlicht/handler/EraserHandler.java +++ b/src/main/java/org/openhab/binding/openlicht/handler/EraserHandler.java @@ -7,12 +7,14 @@ import java.util.Set; import org.eclipse.jdt.annotation.NonNull; import org.eclipse.jdt.annotation.Nullable; +import org.eclipse.smarthome.core.events.EventPublisher; import org.eclipse.smarthome.core.items.GenericItem; import org.eclipse.smarthome.core.items.GroupItem; import org.eclipse.smarthome.core.items.Item; import org.eclipse.smarthome.core.items.ItemNotFoundException; import org.eclipse.smarthome.core.items.ItemRegistry; import org.eclipse.smarthome.core.items.StateChangeListener; +import org.eclipse.smarthome.core.items.events.ItemEventFactory; import org.eclipse.smarthome.core.library.types.DateTimeType; import org.eclipse.smarthome.core.library.types.DecimalType; import org.eclipse.smarthome.core.library.types.HSBType; @@ -22,6 +24,7 @@ import org.eclipse.smarthome.core.thing.ChannelUID; import org.eclipse.smarthome.core.thing.Thing; import org.eclipse.smarthome.core.types.Command; import org.eclipse.smarthome.core.types.State; +import org.eclipse.smarthome.core.types.TypeParser; import org.openhab.binding.openlicht.BindingConstants; import org.openhab.binding.openlicht.internal.ConfigurationHolder; import org.openhab.binding.openlicht.internal.DelegateEraserRegistryChangeListener; @@ -41,10 +44,12 @@ public class EraserHandler extends AbstractMqttHandler implements StateChangeLis private HandlerPhase lastStatusUpdatePhase; private boolean lastStatusUpdateSuccess; private String lastStatusUpdateDescription; + private @Nullable EventPublisher eventPublisher; public EraserHandler(Thing thing, ConfigurationHolder configurationHolder) { super(thing, configurationHolder); this.itemRegistry = configurationHolder.getItemRegistry(); + this.eventPublisher = configurationHolder.getEventPublisher(); ItemRegistry registry = this.itemRegistry; if (registry != null) { delegateListener = new WeakReference<DelegateEraserRegistryChangeListener>( @@ -159,14 +164,23 @@ public class EraserHandler extends AbstractMqttHandler implements StateChangeLis } // assume this is a GenericItem GenericItem genericItem = (GenericItem) item; - State newState = parseState(genericItem, new String(payload)); - if (newState != null) { - logger.debug("Setting state {} of type {} for {}", newState, newState.getClass().getSimpleName(), - genericItem.getName()); - genericItem.setState(newState); + // State newState = parseState(genericItem, new String(payload)); + Command command = TypeParser.parseCommand(genericItem.getAcceptedCommandTypes(), new String(payload)); + EventPublisher localEventPublisher = this.eventPublisher; + if (command != null && localEventPublisher != null) { + localEventPublisher.post(ItemEventFactory.createCommandEvent(itemName, command)); } else { - logger.warn("Could not set state for {} using '{}'", genericItem, new String(payload)); + logger.debug("Could not create command for event-publisher {}, item {} and payload {}", + localEventPublisher, itemName, new String(payload)); } + // if (newState != null) { + // logger.debug("Setting state {} of type {} for {}", newState, newState.getClass().getSimpleName(), + // genericItem.getName()); + // genericItem.setState(newState); + // } else { + // logger.warn("Could not set state for {} using '{}'", genericItem, new String(payload)); + // } + } else { logger.debug("No item registry to process message"); } diff --git a/src/main/java/org/openhab/binding/openlicht/internal/ConfigurationHolder.java b/src/main/java/org/openhab/binding/openlicht/internal/ConfigurationHolder.java index d5d31dd..0ae8f02 100644 --- a/src/main/java/org/openhab/binding/openlicht/internal/ConfigurationHolder.java +++ b/src/main/java/org/openhab/binding/openlicht/internal/ConfigurationHolder.java @@ -3,6 +3,7 @@ package org.openhab.binding.openlicht.internal; import java.util.concurrent.ScheduledExecutorService; import org.eclipse.jdt.annotation.Nullable; +import org.eclipse.smarthome.core.events.EventPublisher; import org.eclipse.smarthome.core.items.ItemRegistry; import org.eclipse.smarthome.core.thing.ThingRegistry; import org.eclipse.smarthome.io.transport.mqtt.MqttService; @@ -22,6 +23,9 @@ public interface ConfigurationHolder { @Nullable ItemRegistry getItemRegistry(); + @Nullable + EventPublisher getEventPublisher(); + Version getVersion(); } diff --git a/src/main/java/org/openhab/binding/openlicht/internal/OpenLichtHandlerFactory.java b/src/main/java/org/openhab/binding/openlicht/internal/OpenLichtHandlerFactory.java index d58fb25..ced6638 100644 --- a/src/main/java/org/openhab/binding/openlicht/internal/OpenLichtHandlerFactory.java +++ b/src/main/java/org/openhab/binding/openlicht/internal/OpenLichtHandlerFactory.java @@ -23,6 +23,7 @@ import java.util.stream.Stream; import org.eclipse.jdt.annotation.NonNullByDefault; import org.eclipse.jdt.annotation.Nullable; +import org.eclipse.smarthome.core.events.EventPublisher; import org.eclipse.smarthome.core.items.ItemRegistry; import org.eclipse.smarthome.core.thing.Thing; import org.eclipse.smarthome.core.thing.ThingRegistry; @@ -64,6 +65,7 @@ public class OpenLichtHandlerFactory extends BaseThingHandlerFactory implements private @Nullable ThingRegistry thingRegistry; private @Nullable ItemRegistry itemRegistry; private @Nullable ScheduledExecutorService executor; + private @Nullable EventPublisher eventPublisher; @Override public boolean supportsThingType(ThingTypeUID thingTypeUID) { @@ -127,6 +129,11 @@ public class OpenLichtHandlerFactory extends BaseThingHandlerFactory implements return itemRegistry; } + @Override + public @Nullable EventPublisher getEventPublisher() { + return eventPublisher; + } + @Override public Version getVersion() { return FrameworkUtil.getBundle(getClass()).getVersion(); @@ -164,4 +171,15 @@ public class OpenLichtHandlerFactory extends BaseThingHandlerFactory implements logger.info("Deleting item registry {}", itemRegistry); this.itemRegistry = null; } + + @Reference(cardinality = ReferenceCardinality.MANDATORY, policy = ReferencePolicy.STATIC) + public void setEvemtPublisher(EventPublisher eventPublisher) { + logger.info("Setting event publisher to {}", eventPublisher); + this.eventPublisher = eventPublisher; + } + + public void unsetEventPublisher(EventPublisher eventPublisher) { + logger.info("Deleting event publisher {}", eventPublisher); + this.eventPublisher = null; + } } -- GitLab