aboutsummaryrefslogtreecommitdiffstats
path: root/framework/src/onos/core/api/src/main/java/org/onosproject/net/driver/Driver.java
blob: 50611b14a2e3565a881eb0e5ed7da777764de727 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
/*
 * Copyright 2015 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 org.onosproject.net.Annotations;

import java.util.Map;
import java.util.Set;

/**
 * Representation of a specific family of device drivers. Behaviour configuration
 * data is stored using {@link org.onosproject.net.Annotations}.
 */
public interface Driver extends Annotations {

    /**
     * Returns the driver name. This is expected to be a reverse-DNS,
     * Java package-like name.
     *
     * @return driver name
     */
    String name();

    /**
     * Returns the parent driver from which this driver inherits behaviours
     * and properties.
     *
     * @return parent driver; null if driver has no parent
     */
    Driver parent();

    /**
     * Returns the device manufacturer name.
     *
     * @return manufacturer name
     */
    String manufacturer();

    /**
     * Returns the device hardware version.
     *
     * @return hardware version
     */
    String hwVersion();

    /**
     * Returns the device software version.
     *
     * @return software version
     */
    String swVersion();

    /**
     * Returns the set of behaviours supported by this driver.
     * It reflects behaviours of only this driver and not its parent.
     *
     * @return set of device driver behaviours
     */
    Set<Class<? extends Behaviour>> behaviours();

    /**
     * Returns the implementation class for the specified behaviour.
     * It reflects behaviours of only this driver and not its parent.
     *
     * @param behaviour behaviour interface
     * @return implementation class
     */
    Class<? extends Behaviour> implementation(Class<? extends Behaviour> behaviour);

    /**
     * Indicates whether or not the driver, or any of its parents, support
     * the specified class of behaviour. It
     *
     * @param behaviourClass behaviour class
     * @return true if behaviour is supported
     */
    boolean hasBehaviour(Class<? extends Behaviour> behaviourClass);

    /**
     * Creates an instance of behaviour primed with the specified driver data.
     * If the current driver does not support the specified behaviour and the
     * driver has parent, the request is delegated to the parent driver.
     *
     * @param data           driver data context
     * @param behaviourClass driver behaviour class
     * @param <T>            type of behaviour
     * @return behaviour instance
     */
    <T extends Behaviour> T createBehaviour(DriverData data, Class<T> behaviourClass);

    /**
     * Creates an instance of behaviour primed with the specified driver data.
     * If the current driver does not support the specified behaviour and the
     * driver has parent, the request is delegated to the parent driver.
     *
     * @param handler        driver handler context
     * @param behaviourClass driver behaviour class
     * @param <T>            type of behaviour
     * @return behaviour instance
     */
    <T extends Behaviour> T createBehaviour(DriverHandler handler, Class<T> behaviourClass);

    /**
     * Returns the set of annotations as map of key/value properties.
     *
     * @return map of properties
     */
    Map<String, String> properties();

    /**
     * Merges the specified driver behaviours and properties into this one,
     * giving preference to the other driver when dealing with conflicts.
     *
     * @param other other driver
     * @return merged driver
     */
    Driver merge(Driver other);

}