From 4bec2f3923dc184c621c38e9dba8c63b836b886c Mon Sep 17 00:00:00 2001 From: Yuta HIGUCHI Date: Fri, 27 Oct 2017 18:14:29 -0700 Subject: [PATCH] Add Optional version of projecting Behaviour Change-Id: I3d3411763be1a75a2bdb04fb59c70d9779f1b02a --- .../device/OpticalDeviceServiceView.java | 8 +------- .../onosproject/net/driver/Projectable.java | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/apps/optical-model/src/main/java/org/onosproject/net/optical/device/OpticalDeviceServiceView.java b/apps/optical-model/src/main/java/org/onosproject/net/optical/device/OpticalDeviceServiceView.java index 286ccbc6f6..af142640c2 100644 --- a/apps/optical-model/src/main/java/org/onosproject/net/optical/device/OpticalDeviceServiceView.java +++ b/apps/optical-model/src/main/java/org/onosproject/net/optical/device/OpticalDeviceServiceView.java @@ -73,13 +73,7 @@ public class OpticalDeviceServiceView = CacheBuilder.newBuilder() .weakKeys() // == for Key comparison .maximumSize(100) - .build(CacheLoader.from(elm -> { - if (elm.is(OpticalDevice.class)) { - return Optional.of(elm.as(OpticalDevice.class)); - } else { - return Optional.empty(); - } - })); + .build(CacheLoader.from(elm -> elm.project(OpticalDevice.class))); // Not intended to be instantiated directly protected OpticalDeviceServiceView(DeviceService base) { diff --git a/core/api/src/main/java/org/onosproject/net/driver/Projectable.java b/core/api/src/main/java/org/onosproject/net/driver/Projectable.java index 90877a0789..3f7139edec 100644 --- a/core/api/src/main/java/org/onosproject/net/driver/Projectable.java +++ b/core/api/src/main/java/org/onosproject/net/driver/Projectable.java @@ -16,6 +16,8 @@ package org.onosproject.net.driver; +import java.util.Optional; + import com.google.common.annotations.Beta; /** @@ -46,4 +48,20 @@ public interface Projectable { */ boolean is(Class projectionClass); + /** + * Returns the specified projection of this entity if such projection + * is supported. + * + * @param projectionClass requested projection class + * @param type of behaviour + * @return projection instance + */ + default Optional project(Class projectionClass) { + if (is(projectionClass)) { + return Optional.of(as(projectionClass)); + } else { + return Optional.empty(); + } + } + }