Add "type" attributes to Topology elements
Add type attributes to Topology elements (ONOS-1575, ONOS-1391)
- add "type" as String attributes
- add "type" to JSON representation
Change-Id: I0ab790cfd18eba17e352780b336e5cd49c6fcb1e
diff --git a/src/main/java/net/onrc/onos/core/topology/DeviceImpl.java b/src/main/java/net/onrc/onos/core/topology/DeviceImpl.java
index 61de0d2..f331b49 100644
--- a/src/main/java/net/onrc/onos/core/topology/DeviceImpl.java
+++ b/src/main/java/net/onrc/onos/core/topology/DeviceImpl.java
@@ -132,6 +132,7 @@
*/
@Override
public String getType() {
- throw new UnsupportedOperationException("Not implemented yet");
+ // FIXME assuming device is always in packet layer for now.
+ return TopologyElement.TYPE_PACKET;
}
}
diff --git a/src/main/java/net/onrc/onos/core/topology/LinkImpl.java b/src/main/java/net/onrc/onos/core/topology/LinkImpl.java
index aa635ef..26c260a 100644
--- a/src/main/java/net/onrc/onos/core/topology/LinkImpl.java
+++ b/src/main/java/net/onrc/onos/core/topology/LinkImpl.java
@@ -167,6 +167,6 @@
*/
@Override
public String getType() {
- throw new UnsupportedOperationException("Not implemented yet");
+ return getStringAttribute(TopologyElement.TYPE, TopologyElement.TYPE_PACKET);
}
}
diff --git a/src/main/java/net/onrc/onos/core/topology/PortImpl.java b/src/main/java/net/onrc/onos/core/topology/PortImpl.java
index 8a5e783..52dbe47 100644
--- a/src/main/java/net/onrc/onos/core/topology/PortImpl.java
+++ b/src/main/java/net/onrc/onos/core/topology/PortImpl.java
@@ -205,6 +205,6 @@
*/
@Override
public String getType() {
- throw new UnsupportedOperationException("Not implemented yet");
+ return getStringAttribute(TopologyElement.TYPE, TopologyElement.TYPE_PACKET);
}
}
diff --git a/src/main/java/net/onrc/onos/core/topology/SwitchImpl.java b/src/main/java/net/onrc/onos/core/topology/SwitchImpl.java
index b00409e..f434e33 100644
--- a/src/main/java/net/onrc/onos/core/topology/SwitchImpl.java
+++ b/src/main/java/net/onrc/onos/core/topology/SwitchImpl.java
@@ -199,6 +199,6 @@
*/
@Override
public String getType() {
- throw new UnsupportedOperationException("Not implemented yet");
+ return getStringAttribute(TopologyElement.TYPE, TopologyElement.TYPE_PACKET);
}
}
diff --git a/src/main/java/net/onrc/onos/core/topology/TopologyElement.java b/src/main/java/net/onrc/onos/core/topology/TopologyElement.java
index ceaf0fc..fc94c0a 100644
--- a/src/main/java/net/onrc/onos/core/topology/TopologyElement.java
+++ b/src/main/java/net/onrc/onos/core/topology/TopologyElement.java
@@ -18,7 +18,22 @@
* (Required to define a method returning itself's type)
*/
public class TopologyElement<T extends TopologyElement<T>>
- implements StringAttributes, UpdateStringAttributes {
+ implements ITopologyElement, StringAttributes, UpdateStringAttributes {
+
+ // TODO: Where should the attribute names be defined?
+ /**
+ * Attribute name for type.
+ */
+ public static final String TYPE = "type";
+ /**
+ * Attribute "type" value representing that the object belongs to Packet layer.
+ */
+ public static final String TYPE_PACKET = "packet";
+ /**
+ * Attribute "type" value representing that the object belongs to Optical layer.
+ */
+ public static final String TYPE_OPTICAL = "optical";
+
private boolean isFrozen = false;
@@ -151,4 +166,9 @@
this.stringAttributes.remove(attr);
}
+
+ @Override
+ public String getType() {
+ return getStringAttribute(TYPE, TYPE_PACKET);
+ }
}
diff --git a/src/main/java/net/onrc/onos/core/topology/TopologyObject.java b/src/main/java/net/onrc/onos/core/topology/TopologyObject.java
index ccb266c..f929926 100644
--- a/src/main/java/net/onrc/onos/core/topology/TopologyObject.java
+++ b/src/main/java/net/onrc/onos/core/topology/TopologyObject.java
@@ -9,6 +9,7 @@
*/
public abstract class TopologyObject implements ITopologyElement {
+ // XXX This will be a snapshot, thus should be replaceable
/**
* Topology instance this object belongs to.
*/
diff --git a/src/main/java/net/onrc/onos/core/topology/TopologyPublisher.java b/src/main/java/net/onrc/onos/core/topology/TopologyPublisher.java
index 1d5b8a6..b82c86f 100644
--- a/src/main/java/net/onrc/onos/core/topology/TopologyPublisher.java
+++ b/src/main/java/net/onrc/onos/core/topology/TopologyPublisher.java
@@ -141,6 +141,9 @@
// FIXME should be merging, with existing attrs, etc..
// TODO define attr name as constant somewhere.
// TODO populate appropriate attributes.
+ linkEvent.createStringAttribute(TopologyElement.TYPE,
+ TopologyElement.TYPE_PACKET);
+
linkEvent.freeze();
if (!registryService.hasControl(link.getDst())) {
@@ -162,6 +165,8 @@
// FIXME should be merging, with existing attrs, etc..
// TODO define attr name as constant somewhere.
// TODO populate appropriate attributes.
+ linkEvent.createStringAttribute(TopologyElement.TYPE,
+ TopologyElement.TYPE_PACKET);
linkEvent.freeze();
if (!registryService.hasControl(link.getDst())) {
@@ -181,6 +186,8 @@
// FIXME should be merging, with existing attrs, etc..
// TODO define attr name as constant somewhere.
// TODO populate appropriate attributes.
+ portEvent.createStringAttribute(TopologyElement.TYPE,
+ TopologyElement.TYPE_PACKET);
portEvent.createStringAttribute("name", port.getName());
portEvent.freeze();
@@ -199,6 +206,15 @@
final Dpid dpid = new Dpid(switchId);
PortEvent portEvent = new PortEvent(dpid, new PortNumber(port.getPortNumber()));
+ // FIXME should be merging, with existing attrs, etc..
+ // TODO define attr name as constant somewhere.
+ // TODO populate appropriate attributes.
+ portEvent.createStringAttribute(TopologyElement.TYPE,
+ TopologyElement.TYPE_PACKET);
+ portEvent.createStringAttribute("name", port.getName());
+
+ portEvent.freeze();
+
if (registryService.hasControl(switchId)) {
topologyDiscoveryInterface.removePortDiscoveryEvent(portEvent);
} else {
@@ -214,6 +230,8 @@
// FIXME should be merging, with existing attrs, etc..
// TODO define attr name as constant somewhere.
// TODO populate appropriate attributes.
+ switchEvent.createStringAttribute(TopologyElement.TYPE,
+ TopologyElement.TYPE_PACKET);
switchEvent.createStringAttribute("ConnectedSince",
sw.getConnectedSince().toString());
@@ -233,6 +251,8 @@
// TODO define attr name as constant somewhere.
// TODO populate appropriate attributes.
portEvent.createStringAttribute("name", port.getName());
+ portEvent.createStringAttribute(TopologyElement.TYPE,
+ TopologyElement.TYPE_PACKET);
portEvent.freeze();
portEvents.add(portEvent);
diff --git a/src/main/java/net/onrc/onos/core/topology/web/serializers/DeviceEventSerializer.java b/src/main/java/net/onrc/onos/core/topology/web/serializers/DeviceEventSerializer.java
index 94ccce2..4ced3c3 100644
--- a/src/main/java/net/onrc/onos/core/topology/web/serializers/DeviceEventSerializer.java
+++ b/src/main/java/net/onrc/onos/core/topology/web/serializers/DeviceEventSerializer.java
@@ -3,6 +3,7 @@
import java.io.IOException;
import net.onrc.onos.core.topology.DeviceEvent;
+import net.onrc.onos.core.topology.TopologyElement;
import net.onrc.onos.core.util.SwitchPort;
import org.codehaus.jackson.JsonGenerator;
@@ -26,6 +27,7 @@
//
jsonGenerator.writeStartObject();
+ jsonGenerator.writeStringField(TopologyElement.TYPE, deviceEvent.getType());
jsonGenerator.writeStringField("mac", deviceEvent.getMac().toString());
jsonGenerator.writeFieldName("attachmentPoints");
jsonGenerator.writeStartArray();
diff --git a/src/main/java/net/onrc/onos/core/topology/web/serializers/DeviceSerializer.java b/src/main/java/net/onrc/onos/core/topology/web/serializers/DeviceSerializer.java
index 1f8676a..1445787 100644
--- a/src/main/java/net/onrc/onos/core/topology/web/serializers/DeviceSerializer.java
+++ b/src/main/java/net/onrc/onos/core/topology/web/serializers/DeviceSerializer.java
@@ -4,6 +4,7 @@
import net.onrc.onos.core.topology.Device;
import net.onrc.onos.core.topology.Port;
+import net.onrc.onos.core.topology.TopologyElement;
import org.codehaus.jackson.JsonGenerator;
import org.codehaus.jackson.map.SerializerProvider;
@@ -26,6 +27,7 @@
//
jsonGenerator.writeStartObject();
+ jsonGenerator.writeStringField(TopologyElement.TYPE, dev.getType());
jsonGenerator.writeStringField("mac", dev.getMacAddress().toString());
jsonGenerator.writeFieldName("attachmentPoints");
jsonGenerator.writeStartArray();
diff --git a/src/main/java/net/onrc/onos/core/topology/web/serializers/LinkEventSerializer.java b/src/main/java/net/onrc/onos/core/topology/web/serializers/LinkEventSerializer.java
index 0678d49..47985b0 100644
--- a/src/main/java/net/onrc/onos/core/topology/web/serializers/LinkEventSerializer.java
+++ b/src/main/java/net/onrc/onos/core/topology/web/serializers/LinkEventSerializer.java
@@ -1,6 +1,8 @@
package net.onrc.onos.core.topology.web.serializers;
import net.onrc.onos.core.topology.LinkEvent;
+import net.onrc.onos.core.topology.TopologyElement;
+
import org.codehaus.jackson.JsonGenerator;
import org.codehaus.jackson.map.SerializerProvider;
import org.codehaus.jackson.map.ser.std.SerializerBase;
@@ -40,6 +42,7 @@
//
jsonGenerator.writeStartObject();
+ jsonGenerator.writeStringField(TopologyElement.TYPE, linkEvent.getType());
jsonGenerator.writeObjectField("src", linkEvent.getSrc());
jsonGenerator.writeObjectField("dst", linkEvent.getDst());
jsonGenerator.writeEndObject();
diff --git a/src/main/java/net/onrc/onos/core/topology/web/serializers/LinkSerializer.java b/src/main/java/net/onrc/onos/core/topology/web/serializers/LinkSerializer.java
index 44f5cc3..7b06a21 100644
--- a/src/main/java/net/onrc/onos/core/topology/web/serializers/LinkSerializer.java
+++ b/src/main/java/net/onrc/onos/core/topology/web/serializers/LinkSerializer.java
@@ -4,6 +4,7 @@
import java.util.Map.Entry;
import net.onrc.onos.core.topology.Link;
+import net.onrc.onos.core.topology.TopologyElement;
import org.codehaus.jackson.JsonGenerator;
import org.codehaus.jackson.map.SerializerProvider;
@@ -26,6 +27,7 @@
// In the future, we will use a single serializer.
//
jsonGenerator.writeStartObject();
+ jsonGenerator.writeStringField(TopologyElement.TYPE, link.getType());
jsonGenerator.writeObjectField("src", link.getSrcPort().asSwitchPort());
jsonGenerator.writeObjectField("dst", link.getDstPort().asSwitchPort());
jsonGenerator.writeObjectFieldStart("stringAttributes");
diff --git a/src/main/java/net/onrc/onos/core/topology/web/serializers/PortEventSerializer.java b/src/main/java/net/onrc/onos/core/topology/web/serializers/PortEventSerializer.java
index 84f23ac..4f2d5bf 100644
--- a/src/main/java/net/onrc/onos/core/topology/web/serializers/PortEventSerializer.java
+++ b/src/main/java/net/onrc/onos/core/topology/web/serializers/PortEventSerializer.java
@@ -3,6 +3,7 @@
import java.io.IOException;
import net.onrc.onos.core.topology.PortEvent;
+import net.onrc.onos.core.topology.TopologyElement;
import org.codehaus.jackson.JsonGenerator;
import org.codehaus.jackson.map.SerializerProvider;
@@ -25,6 +26,7 @@
//
jsonGenerator.writeStartObject();
+ jsonGenerator.writeStringField(TopologyElement.TYPE, portEvent.getType());
jsonGenerator.writeStringField("state", "ACTIVE");
jsonGenerator.writeStringField("dpid", portEvent.getDpid().toString());
//
diff --git a/src/main/java/net/onrc/onos/core/topology/web/serializers/PortSerializer.java b/src/main/java/net/onrc/onos/core/topology/web/serializers/PortSerializer.java
index 69d710e..34d411f 100644
--- a/src/main/java/net/onrc/onos/core/topology/web/serializers/PortSerializer.java
+++ b/src/main/java/net/onrc/onos/core/topology/web/serializers/PortSerializer.java
@@ -4,6 +4,7 @@
import java.util.Map.Entry;
import net.onrc.onos.core.topology.Port;
+import net.onrc.onos.core.topology.TopologyElement;
import org.codehaus.jackson.JsonGenerator;
import org.codehaus.jackson.map.SerializerProvider;
@@ -26,6 +27,7 @@
//
jsonGenerator.writeStartObject();
+ jsonGenerator.writeStringField(TopologyElement.TYPE, port.getType());
jsonGenerator.writeStringField("state", "ACTIVE");
jsonGenerator.writeStringField("dpid", port.getDpid().toString());
//
diff --git a/src/main/java/net/onrc/onos/core/topology/web/serializers/SwitchEventSerializer.java b/src/main/java/net/onrc/onos/core/topology/web/serializers/SwitchEventSerializer.java
index 09358c4..c4e1826 100644
--- a/src/main/java/net/onrc/onos/core/topology/web/serializers/SwitchEventSerializer.java
+++ b/src/main/java/net/onrc/onos/core/topology/web/serializers/SwitchEventSerializer.java
@@ -3,6 +3,7 @@
import java.io.IOException;
import net.onrc.onos.core.topology.SwitchEvent;
+import net.onrc.onos.core.topology.TopologyElement;
import org.codehaus.jackson.JsonGenerator;
import org.codehaus.jackson.map.SerializerProvider;
@@ -24,6 +25,7 @@
//
jsonGenerator.writeStartObject();
+ jsonGenerator.writeStringField(TopologyElement.TYPE, switchEvent.getType());
jsonGenerator.writeStringField("dpid",
switchEvent.getDpid().toString());
jsonGenerator.writeStringField("state", "ACTIVE");
diff --git a/src/main/java/net/onrc/onos/core/topology/web/serializers/SwitchSerializer.java b/src/main/java/net/onrc/onos/core/topology/web/serializers/SwitchSerializer.java
index 79516b4..8542641 100644
--- a/src/main/java/net/onrc/onos/core/topology/web/serializers/SwitchSerializer.java
+++ b/src/main/java/net/onrc/onos/core/topology/web/serializers/SwitchSerializer.java
@@ -5,6 +5,7 @@
import net.onrc.onos.core.topology.Port;
import net.onrc.onos.core.topology.Switch;
+import net.onrc.onos.core.topology.TopologyElement;
import org.codehaus.jackson.JsonGenerator;
import org.codehaus.jackson.map.SerializerProvider;
@@ -26,6 +27,7 @@
//
jsonGenerator.writeStartObject();
+ jsonGenerator.writeStringField(TopologyElement.TYPE, sw.getType());
jsonGenerator.writeStringField("dpid", sw.getDpid().toString());
jsonGenerator.writeStringField("state", "ACTIVE");
jsonGenerator.writeArrayFieldStart("ports");