From b80273a88aa59788cb4245551efd48a265be5aad Mon Sep 17 00:00:00 2001 From: Jacob Laursen Date: Wed, 29 Nov 2023 12:20:57 +0100 Subject: [PATCH] [hue] Refactor method to reduce nesting and code duplication(#15971) Signed-off-by: Jacob Laursen --- .../internal/handler/Clip2ThingHandler.java | 75 ++++++++++--------- 1 file changed, 41 insertions(+), 34 deletions(-) diff --git a/bundles/org.openhab.binding.hue/src/main/java/org/openhab/binding/hue/internal/handler/Clip2ThingHandler.java b/bundles/org.openhab.binding.hue/src/main/java/org/openhab/binding/hue/internal/handler/Clip2ThingHandler.java index aef0ff5bf..292416ec9 100644 --- a/bundles/org.openhab.binding.hue/src/main/java/org/openhab/binding/hue/internal/handler/Clip2ThingHandler.java +++ b/bundles/org.openhab.binding.hue/src/main/java/org/openhab/binding/hue/internal/handler/Clip2ThingHandler.java @@ -635,44 +635,51 @@ public class Clip2ThingHandler extends BaseThingHandler { * @param resource a Resource object containing the new state. */ public void onResource(Resource resource) { - if (!disposing) { - boolean resourceConsumed = false; - String incomingResourceId = resource.getId(); - if (resourceId.equals(incomingResourceId)) { - if (resource.hasFullState()) { - thisResource = resource; - if (!updatePropertiesDone) { - updateProperties(resource); - resourceConsumed = updatePropertiesDone; - } - } - if (!updateDependenciesDone) { - resourceConsumed = true; - cancelTask(updateDependenciesTask, false); - updateDependenciesTask = scheduler.submit(() -> updateDependencies()); - } - } else if (SUPPORTED_SCENE_TYPES.contains(resource.getType())) { - Resource cachedScene = sceneContributorsCache.get(incomingResourceId); - if (Objects.nonNull(cachedScene)) { - Setters.setResource(resource, cachedScene); - resourceConsumed = updateChannels(resource); - sceneContributorsCache.put(incomingResourceId, resource); - } - } else { - Resource cachedService = serviceContributorsCache.get(incomingResourceId); - if (Objects.nonNull(cachedService)) { - Setters.setResource(resource, cachedService); - resourceConsumed = updateChannels(resource); - serviceContributorsCache.put(incomingResourceId, resource); - if (ResourceType.LIGHT == resource.getType() && !updateLightPropertiesDone) { - updateLightProperties(resource); - } + if (disposing) { + return; + } + boolean resourceConsumed = false; + if (resourceId.equals(resource.getId())) { + if (resource.hasFullState()) { + thisResource = resource; + if (!updatePropertiesDone) { + updateProperties(resource); + resourceConsumed = updatePropertiesDone; } } - if (resourceConsumed) { - logger.debug("{} -> onResource() consumed resource {}", resourceId, resource); + if (!updateDependenciesDone) { + resourceConsumed = true; + cancelTask(updateDependenciesTask, false); + updateDependenciesTask = scheduler.submit(() -> updateDependencies()); + } + } else { + Resource cachedResource = getResourceFromCache(resource); + if (cachedResource != null) { + Setters.setResource(resource, cachedResource); + resourceConsumed = updateChannels(resource); + putResourceToCache(resource); + if (ResourceType.LIGHT == resource.getType() && !updateLightPropertiesDone) { + updateLightProperties(resource); + } } } + if (resourceConsumed) { + logger.debug("{} -> onResource() consumed resource {}", resourceId, resource); + } + } + + private void putResourceToCache(Resource resource) { + if (SUPPORTED_SCENE_TYPES.contains(resource.getType())) { + sceneContributorsCache.put(resource.getId(), resource); + } else { + serviceContributorsCache.put(resource.getId(), resource); + } + } + + private @Nullable Resource getResourceFromCache(Resource resource) { + return SUPPORTED_SCENE_TYPES.contains(resource.getType()) // + ? sceneContributorsCache.get(resource.getId()) + : serviceContributorsCache.get(resource.getId()); } /**