Thomas Vachuska
Committed by Gerrit Code Review

Defining notion of a projectable entity.

Opened up DefaultDriverHandler to accept arbitrary DriverData.

Added clarifying documentation to DriverData.

Change-Id: Ic96251703bf0461caef4f3950658e2073d889653
......@@ -25,7 +25,7 @@ import static com.google.common.base.MoreObjects.toStringHelper;
*/
public class DefaultDriverHandler implements DriverHandler {
private final DefaultDriverData data;
private final DriverData data;
// Reference to service directory to provide run-time context.
protected static ServiceDirectory serviceDirectory = new DefaultServiceDirectory();
......@@ -35,7 +35,7 @@ public class DefaultDriverHandler implements DriverHandler {
*
* @param data driver data to attach
*/
public DefaultDriverHandler(DefaultDriverData data) {
public DefaultDriverHandler(DriverData data) {
this.data = data;
}
......
......@@ -21,6 +21,10 @@ import org.onosproject.net.MutableAnnotations;
/**
* Container for data about a device. Data is stored using
* {@link org.onosproject.net.MutableAnnotations}.
*
* Note that only derivatives of {@link HandlerBehaviour} can expect mutability
* from the backing driver data instance; other behaviours must rely on
* immutable {@link org.onosproject.net.Annotations} only.
*/
public interface DriverData extends MutableAnnotations {
......
/*
* Copyright 2014-2016 Open Networking Laboratory
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.onosproject.net.driver;
import com.google.common.annotations.Beta;
/**
* Abstraction of an entity capable of being projected as another entity.
*/
@Beta
public interface Projectable {
/**
* Returns the specified projection of this entity if such projection
* is supported.
*
* @param projectionClass requested projection class
* @param <B> type of behaviour
* @return projection instance or null if requested projection is not supported
*/
<B extends Behaviour> B as(Class<B> projectionClass);
/**
* Returns true if this entity is capable of being projected as the
* specified class.
*
* @param projectionClass projection class
* @param <B> type of behaviour
* @return true if the requested projection is supported
*/
<B extends Behaviour> boolean is(Class<B> projectionClass);
}