[hue] Refactor method to reduce nesting and code duplication(#15971)

Signed-off-by: Jacob Laursen <jacob-github@vindvejr.dk>
This commit is contained in:
Jacob Laursen 2023-11-29 12:20:57 +01:00 committed by GitHub
parent e33cccc29c
commit b80273a88a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -635,44 +635,51 @@ public class Clip2ThingHandler extends BaseThingHandler {
* @param resource a Resource object containing the new state. * @param resource a Resource object containing the new state.
*/ */
public void onResource(Resource resource) { public void onResource(Resource resource) {
if (!disposing) { if (disposing) {
boolean resourceConsumed = false; return;
String incomingResourceId = resource.getId(); }
if (resourceId.equals(incomingResourceId)) { boolean resourceConsumed = false;
if (resource.hasFullState()) { if (resourceId.equals(resource.getId())) {
thisResource = resource; if (resource.hasFullState()) {
if (!updatePropertiesDone) { thisResource = resource;
updateProperties(resource); if (!updatePropertiesDone) {
resourceConsumed = 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 (resourceConsumed) { if (!updateDependenciesDone) {
logger.debug("{} -> onResource() consumed resource {}", resourceId, resource); 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());
} }
/** /**