mirror of
https://github.com/opennetworkinglab/onos.git
synced 2025-10-18 02:41:49 +02:00
Working on model annotations; still in progress.
This commit is contained in:
parent
890bc35e69
commit
3ea11252fb
113
core/api/src/main/java/org/onlab/onos/net/Annotations.java
Normal file
113
core/api/src/main/java/org/onlab/onos/net/Annotations.java
Normal file
@ -0,0 +1,113 @@
|
|||||||
|
package org.onlab.onos.net;
|
||||||
|
|
||||||
|
import com.google.common.collect.ImmutableMap;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Objects;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represents a set of simple annotations that can be used to add arbitrary
|
||||||
|
* attributes to various parts of the data model.
|
||||||
|
*/
|
||||||
|
public final class Annotations {
|
||||||
|
|
||||||
|
private final Map<String, String> map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new set of annotations using the specified immutable map.
|
||||||
|
*
|
||||||
|
* @param map immutable map of key/value pairs
|
||||||
|
*/
|
||||||
|
private Annotations(ImmutableMap<String, String> map) {
|
||||||
|
this.map = map;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new annotations builder.
|
||||||
|
*
|
||||||
|
* @return new annotations builder
|
||||||
|
*/
|
||||||
|
public static Builder builder() {
|
||||||
|
return new Builder();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the set of keys for available annotations. Note that this set
|
||||||
|
* includes keys for any attributes tagged for removal.
|
||||||
|
*
|
||||||
|
* @return annotation keys
|
||||||
|
*/
|
||||||
|
public Set<String> keys() {
|
||||||
|
return map.keySet();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the value of the specified annotation.
|
||||||
|
*
|
||||||
|
* @param key annotation key
|
||||||
|
* @return annotation value
|
||||||
|
*/
|
||||||
|
public String value(String key) {
|
||||||
|
String value = map.get(key);
|
||||||
|
return Objects.equals(Builder.REMOVED, value) ? null : value;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Indicates whether the specified key has been tagged as removed. This is
|
||||||
|
* used to for merging sparse annotation sets.
|
||||||
|
*
|
||||||
|
* @param key annotation key
|
||||||
|
* @return true if the previous annotation has been tagged for removal
|
||||||
|
*/
|
||||||
|
public boolean isRemoved(String key) {
|
||||||
|
return Objects.equals(Builder.REMOVED, map.get(key));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Facility for gradually building model annotations.
|
||||||
|
*/
|
||||||
|
public static final class Builder {
|
||||||
|
|
||||||
|
private static final String REMOVED = "~rEmOvEd~";
|
||||||
|
private final ImmutableMap.Builder<String, String> builder = ImmutableMap.builder();
|
||||||
|
|
||||||
|
// Private construction is forbidden.
|
||||||
|
private Builder() {
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds the specified annotation. Any previous value associated with
|
||||||
|
* the given annotation key will be overwritten.
|
||||||
|
*
|
||||||
|
* @param key annotation key
|
||||||
|
* @param value annotation value
|
||||||
|
* @return self
|
||||||
|
*/
|
||||||
|
public Builder set(String key, String value) {
|
||||||
|
builder.put(key, value);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds the specified annotation. Any previous value associated with
|
||||||
|
* the given annotation key will be tagged for removal.
|
||||||
|
*
|
||||||
|
* @param key annotation key
|
||||||
|
* @return self
|
||||||
|
*/
|
||||||
|
public Builder remove(String key) {
|
||||||
|
builder.put(key, REMOVED);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns immutable annotations built from the accrued key/values pairs.
|
||||||
|
*
|
||||||
|
* @return annotations
|
||||||
|
*/
|
||||||
|
public Annotations build() {
|
||||||
|
return new Annotations(builder.build());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -2,12 +2,13 @@ package org.onlab.onos.net;
|
|||||||
|
|
||||||
import static com.google.common.base.MoreObjects.toStringHelper;
|
import static com.google.common.base.MoreObjects.toStringHelper;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Default port implementation.
|
* Default port implementation.
|
||||||
*/
|
*/
|
||||||
public class DefaultPort implements Port {
|
public class DefaultPort extends AbstractAnnotated implements Port {
|
||||||
|
|
||||||
private final Element element;
|
private final Element element;
|
||||||
private final PortNumber number;
|
private final PortNumber number;
|
||||||
@ -19,9 +20,13 @@ public class DefaultPort implements Port {
|
|||||||
* @param element parent network element
|
* @param element parent network element
|
||||||
* @param number port number
|
* @param number port number
|
||||||
* @param isEnabled indicator whether the port is up and active
|
* @param isEnabled indicator whether the port is up and active
|
||||||
|
* @param annotations optional key/value annotations
|
||||||
*/
|
*/
|
||||||
|
@SafeVarargs
|
||||||
public DefaultPort(Element element, PortNumber number,
|
public DefaultPort(Element element, PortNumber number,
|
||||||
boolean isEnabled) {
|
boolean isEnabled,
|
||||||
|
Map<String, String>... annotations) {
|
||||||
|
super(annotations);
|
||||||
this.element = element;
|
this.element = element;
|
||||||
this.number = number;
|
this.number = number;
|
||||||
this.isEnabled = isEnabled;
|
this.isEnabled = isEnabled;
|
||||||
|
@ -3,7 +3,7 @@ package org.onlab.onos.net;
|
|||||||
/**
|
/**
|
||||||
* Base abstraction of a network element, i.e. an infrastructure device or an end-station host.
|
* Base abstraction of a network element, i.e. an infrastructure device or an end-station host.
|
||||||
*/
|
*/
|
||||||
public interface Element extends Provided {
|
public interface Element extends Annotated, Provided {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the network element identifier.
|
* Returns the network element identifier.
|
||||||
|
@ -3,7 +3,7 @@ package org.onlab.onos.net;
|
|||||||
/**
|
/**
|
||||||
* Abstraction of a network infrastructure link.
|
* Abstraction of a network infrastructure link.
|
||||||
*/
|
*/
|
||||||
public interface Link extends Provided {
|
public interface Link extends Annotated, Provided {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Coarse representation of the link type.
|
* Coarse representation of the link type.
|
||||||
|
@ -4,7 +4,7 @@ package org.onlab.onos.net;
|
|||||||
/**
|
/**
|
||||||
* Abstraction of a network port.
|
* Abstraction of a network port.
|
||||||
*/
|
*/
|
||||||
public interface Port {
|
public interface Port extends Annotated {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the port number.
|
* Returns the port number.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user