From 07ee8e6ffce95df9e563b8bfed7e335c7cd435a0 Mon Sep 17 00:00:00 2001 From: Christoph Weitkamp Date: Fri, 3 Dec 2021 14:32:05 +0100 Subject: [PATCH] Added nullness anotations to ChannelEventTriggerHandler (#2586) Signed-off-by: Christoph Weitkamp --- .../handler/TriggerHandlerCallback.java | 7 ++- .../automation/internal/RuleEngineImpl.java | 7 +-- .../internal/TriggerHandlerCallbackImpl.java | 15 ++++--- .../handler/ChannelEventTriggerHandler.java | 44 +++++++------------ .../handler/TimeOfDayTriggerHandler.java | 8 +++- .../core/scheduler/SchedulerRunnable.java | 5 ++- 6 files changed, 42 insertions(+), 44 deletions(-) diff --git a/bundles/org.openhab.core.automation/src/main/java/org/openhab/core/automation/handler/TriggerHandlerCallback.java b/bundles/org.openhab.core.automation/src/main/java/org/openhab/core/automation/handler/TriggerHandlerCallback.java index 0c71651d5c..a4fecc88c2 100644 --- a/bundles/org.openhab.core.automation/src/main/java/org/openhab/core/automation/handler/TriggerHandlerCallback.java +++ b/bundles/org.openhab.core.automation/src/main/java/org/openhab/core/automation/handler/TriggerHandlerCallback.java @@ -15,6 +15,8 @@ package org.openhab.core.automation.handler; import java.util.Map; import java.util.concurrent.ScheduledExecutorService; +import org.eclipse.jdt.annotation.NonNullByDefault; +import org.eclipse.jdt.annotation.Nullable; import org.openhab.core.automation.ModuleHandlerCallback; import org.openhab.core.automation.Rule; import org.openhab.core.automation.Trigger; @@ -30,6 +32,7 @@ import org.openhab.core.automation.type.Output; * @author Kai Kreuzer - made it a sub-interface of ModuleHandlerCallback * @author Fabian Wolter - Add method for retrieving the handler's scheduler */ +@NonNullByDefault public interface TriggerHandlerCallback extends ModuleHandlerCallback { /** @@ -46,10 +49,10 @@ public interface TriggerHandlerCallback extends ModuleHandlerCallback { *
  • value - represents output value of the {@link Trigger}'s {@link Output} * */ - public void triggered(Trigger trigger, Map context); + public void triggered(Trigger trigger, @Nullable Map context); /** * @return the scheduler of this rule */ - public ScheduledExecutorService getScheduler(); + public @Nullable ScheduledExecutorService getScheduler(); } diff --git a/bundles/org.openhab.core.automation/src/main/java/org/openhab/core/automation/internal/RuleEngineImpl.java b/bundles/org.openhab.core.automation/src/main/java/org/openhab/core/automation/internal/RuleEngineImpl.java index e550aa1f97..26c73168f4 100644 --- a/bundles/org.openhab.core.automation/src/main/java/org/openhab/core/automation/internal/RuleEngineImpl.java +++ b/bundles/org.openhab.core.automation/src/main/java/org/openhab/core/automation/internal/RuleEngineImpl.java @@ -143,7 +143,7 @@ public class RuleEngineImpl implements RuleManager, RegistryChangeListener moduleHandlerFactories; + private final Map moduleHandlerFactories = new HashMap<>(20); /** * {@link Set} holding all available {@link ModuleHandlerFactory}s. @@ -176,7 +176,7 @@ public class RuleEngineImpl implements RuleManager, RegistryChangeListener> contextMap; + private final Map> contextMap = new HashMap<>(); /** * This field holds reference to {@link ModuleTypeRegistry}. The {@link RuleEngineImpl} needs it to auto-map @@ -254,9 +254,6 @@ public class RuleEngineImpl implements RuleManager, RegistryChangeListener(); - this.moduleHandlerFactories = new HashMap<>(20); - this.disabledRulesStorage = storageService. getStorage(DISABLED_RULE_STORAGE, this.getClass().getClassLoader()); diff --git a/bundles/org.openhab.core.automation/src/main/java/org/openhab/core/automation/internal/TriggerHandlerCallbackImpl.java b/bundles/org.openhab.core.automation/src/main/java/org/openhab/core/automation/internal/TriggerHandlerCallbackImpl.java index 33f62c5431..9cc2e5b6b9 100644 --- a/bundles/org.openhab.core.automation/src/main/java/org/openhab/core/automation/internal/TriggerHandlerCallbackImpl.java +++ b/bundles/org.openhab.core.automation/src/main/java/org/openhab/core/automation/internal/TriggerHandlerCallbackImpl.java @@ -19,6 +19,9 @@ import java.util.concurrent.Executors; import java.util.concurrent.Future; import java.util.concurrent.ScheduledExecutorService; +import org.eclipse.jdt.annotation.NonNull; +import org.eclipse.jdt.annotation.NonNullByDefault; +import org.eclipse.jdt.annotation.Nullable; import org.openhab.core.automation.RuleStatus; import org.openhab.core.automation.RuleStatusInfo; import org.openhab.core.automation.Trigger; @@ -51,12 +54,12 @@ public class TriggerHandlerCallbackImpl implements TriggerHandlerCallback { } @Override - public void triggered(Trigger trigger, Map outputs) { + public void triggered(Trigger trigger, @Nullable Map<@NonNull String, ?> context) { synchronized (this) { if (executor == null) { return; } - future = executor.submit(new TriggerData(trigger, outputs)); + future = executor.submit(new TriggerData(trigger, context)); } re.logger.debug("The trigger '{}' of rule '{}' is triggered.", trigger.getId(), ruleUID); } @@ -66,21 +69,21 @@ public class TriggerHandlerCallbackImpl implements TriggerHandlerCallback { return future == null || !future.isDone(); } + @NonNullByDefault class TriggerData implements Runnable { private final Trigger trigger; + private @Nullable final Map outputs; public Trigger getTrigger() { return trigger; } - public Map getOutputs() { + public @Nullable Map getOutputs() { return outputs; } - private final Map outputs; - - public TriggerData(Trigger t, Map outputs) { + public TriggerData(Trigger t, @Nullable Map outputs) { this.trigger = t; this.outputs = outputs; } diff --git a/bundles/org.openhab.core.automation/src/main/java/org/openhab/core/automation/internal/module/handler/ChannelEventTriggerHandler.java b/bundles/org.openhab.core.automation/src/main/java/org/openhab/core/automation/internal/module/handler/ChannelEventTriggerHandler.java index e680272ac6..4bef37c665 100644 --- a/bundles/org.openhab.core.automation/src/main/java/org/openhab/core/automation/internal/module/handler/ChannelEventTriggerHandler.java +++ b/bundles/org.openhab.core.automation/src/main/java/org/openhab/core/automation/internal/module/handler/ChannelEventTriggerHandler.java @@ -13,12 +13,13 @@ package org.openhab.core.automation.internal.module.handler; import java.util.Dictionary; -import java.util.HashMap; -import java.util.HashSet; import java.util.Hashtable; import java.util.Map; import java.util.Set; +import org.eclipse.jdt.annotation.NonNullByDefault; +import org.eclipse.jdt.annotation.Nullable; +import org.openhab.core.automation.ModuleHandlerCallback; import org.openhab.core.automation.Trigger; import org.openhab.core.automation.handler.BaseTriggerModuleHandler; import org.openhab.core.automation.handler.TriggerHandlerCallback; @@ -37,6 +38,7 @@ import org.slf4j.LoggerFactory; * * @author Stefan Triller - Initial contribution */ +@NonNullByDefault public class ChannelEventTriggerHandler extends BaseTriggerModuleHandler implements EventSubscriber, EventFilter { public static final String MODULE_TYPE_ID = "core.ChannelEventTrigger"; @@ -47,21 +49,19 @@ public class ChannelEventTriggerHandler extends BaseTriggerModuleHandler impleme private final Logger logger = LoggerFactory.getLogger(ChannelEventTriggerHandler.class); - private final String eventOnChannel; + private @Nullable final String eventOnChannel; private final ChannelUID channelUID; - private final Set types = new HashSet<>(); + private final Set types; private final BundleContext bundleContext; - - @SuppressWarnings("rawtypes") - private ServiceRegistration eventSubscriberRegistration; + private final ServiceRegistration eventSubscriberRegistration; public ChannelEventTriggerHandler(Trigger module, BundleContext bundleContext) { super(module); this.eventOnChannel = (String) module.getConfiguration().get(CFG_CHANNEL_EVENT); this.channelUID = new ChannelUID((String) module.getConfiguration().get(CFG_CHANNEL)); + this.types = Set.of("ChannelTriggeredEvent"); this.bundleContext = bundleContext; - this.types.add("ChannelTriggeredEvent"); Dictionary properties = new Hashtable<>(); properties.put("event.topics", TOPIC); @@ -71,37 +71,31 @@ public class ChannelEventTriggerHandler extends BaseTriggerModuleHandler impleme @Override public void receive(Event event) { - if (callback != null) { + ModuleHandlerCallback localCallback = callback; + if (localCallback != null) { logger.trace("Received Event: Source: {} Topic: {} Type: {} Payload: {}", event.getSource(), event.getTopic(), event.getType(), event.getPayload()); - - Map values = new HashMap<>(); - values.put("event", event); - - ((TriggerHandlerCallback) callback).triggered(this.module, values); + ((TriggerHandlerCallback) localCallback).triggered(module, Map.of("event", event)); } } @Override public boolean apply(Event event) { logger.trace("->FILTER: {}:{}", event.getTopic(), TOPIC); - boolean eventMatches = false; if (event instanceof ChannelTriggeredEvent) { ChannelTriggeredEvent cte = (ChannelTriggeredEvent) event; - if (cte.getChannel().equals(channelUID)) { + if (channelUID.equals(cte.getChannel())) { logger.trace("->FILTER: {}:{}", cte.getEvent(), eventOnChannel); - eventMatches = true; - if (eventOnChannel != null && !eventOnChannel.isEmpty() && !eventOnChannel.equals(cte.getEvent())) { - eventMatches = false; - } + eventMatches = eventOnChannel == null || eventOnChannel.isBlank() + || eventOnChannel.equals(cte.getEvent()); } } return eventMatches; } @Override - public EventFilter getEventFilter() { + public @Nullable EventFilter getEventFilter() { return this; } @@ -110,15 +104,9 @@ public class ChannelEventTriggerHandler extends BaseTriggerModuleHandler impleme return types; } - /** - * do the cleanup: unregistering eventSubscriber... - */ @Override public void dispose() { super.dispose(); - if (eventSubscriberRegistration != null) { - eventSubscriberRegistration.unregister(); - eventSubscriberRegistration = null; - } + eventSubscriberRegistration.unregister(); } } diff --git a/bundles/org.openhab.core.automation/src/main/java/org/openhab/core/automation/internal/module/handler/TimeOfDayTriggerHandler.java b/bundles/org.openhab.core.automation/src/main/java/org/openhab/core/automation/internal/module/handler/TimeOfDayTriggerHandler.java index 07bc7bd652..a50051e2a6 100644 --- a/bundles/org.openhab.core.automation/src/main/java/org/openhab/core/automation/internal/module/handler/TimeOfDayTriggerHandler.java +++ b/bundles/org.openhab.core.automation/src/main/java/org/openhab/core/automation/internal/module/handler/TimeOfDayTriggerHandler.java @@ -44,7 +44,7 @@ public class TimeOfDayTriggerHandler extends BaseTriggerModuleHandler private final CronScheduler scheduler; private final String expression; - private ScheduledCompletableFuture schedule; + private ScheduledCompletableFuture schedule; public TimeOfDayTriggerHandler(Trigger module, CronScheduler scheduler) { super(module); @@ -79,7 +79,11 @@ public class TimeOfDayTriggerHandler extends BaseTriggerModuleHandler @Override public void run() { - ((TriggerHandlerCallback) callback).triggered(module, null); + if (callback != null) { + ((TriggerHandlerCallback) callback).triggered(module, null); + } else { + logger.debug("Tried to trigger, but callback isn't available!"); + } } @Override diff --git a/bundles/org.openhab.core/src/main/java/org/openhab/core/scheduler/SchedulerRunnable.java b/bundles/org.openhab.core/src/main/java/org/openhab/core/scheduler/SchedulerRunnable.java index f6d9b50220..55bbc55f10 100644 --- a/bundles/org.openhab.core/src/main/java/org/openhab/core/scheduler/SchedulerRunnable.java +++ b/bundles/org.openhab.core/src/main/java/org/openhab/core/scheduler/SchedulerRunnable.java @@ -12,6 +12,8 @@ */ package org.openhab.core.scheduler; +import org.eclipse.jdt.annotation.NonNullByDefault; + /** * Runnable that can throw checked exceptions. * @@ -19,11 +21,12 @@ package org.openhab.core.scheduler; * @author Simon Kaufmann - adapted to CompletableFutures * @author Hilbrand Bouwkamp - moved to it's own class and renamed */ +@NonNullByDefault public interface SchedulerRunnable { /** * Scheduled job to run. - * + * * @throws Exception exception thrown */ void run() throws Exception;