Rename {Switch,Port,Link,Host}Event -> {...}Data
Change-Id: I89d8bae8358409514132eeac00deb0c947ecf68f
diff --git a/src/main/java/net/onrc/onos/core/topology/PortData.java b/src/main/java/net/onrc/onos/core/topology/PortData.java
new file mode 100644
index 0000000..86785cd
--- /dev/null
+++ b/src/main/java/net/onrc/onos/core/topology/PortData.java
@@ -0,0 +1,169 @@
+package net.onrc.onos.core.topology;
+
+import net.onrc.onos.core.topology.web.serializers.PortDataSerializer;
+import net.onrc.onos.core.util.Dpid;
+import net.onrc.onos.core.util.PortNumber;
+import net.onrc.onos.core.util.SwitchPort;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+import org.codehaus.jackson.map.annotate.JsonSerialize;
+
+import java.nio.ByteBuffer;
+import java.util.Objects;
+
+/**
+ * Self-contained Port object.
+ */
+@JsonSerialize(using = PortDataSerializer.class)
+public class PortData extends TopologyElement<PortData> {
+ public static final int PORTID_BYTES = SwitchData.SWITCHID_BYTES + 2 + 8;
+
+ private final SwitchPort id;
+ // TODO Add Hardware Address
+
+ // TODO: Where should the attribute names be defined?
+ /**
+ * Attribute name for description.
+ */
+ public static final String DESCRIPTION = "description";
+
+ /**
+ * Default constructor for Serializer to use.
+ */
+ @Deprecated
+ protected PortData() {
+ id = null;
+ }
+
+ /**
+ * Constructor for given SwitchPort.
+ *
+ * @param switchPort the SwitchPort to identify the port
+ */
+ public PortData(SwitchPort switchPort) {
+ this.id = checkNotNull(switchPort);
+ }
+
+ /**
+ * Constructor for given switch DPID and port number.
+ *
+ * @param dpid the DPID of the switch the port belongs to
+ * @param number the PortNumber to identify the port
+ */
+ public PortData(Dpid dpid, PortNumber number) {
+ this.id = new SwitchPort(dpid, number);
+ }
+
+ /**
+ * Copy constructor.
+ * <p>
+ * Creates an unfrozen copy of the given PortData object.
+ *
+ * @param original the object to make copy of
+ */
+ public PortData(PortData original) {
+ super(original);
+ this.id = original.id;
+ }
+
+ /**
+ * Gets the SwitchPort identifying this port.
+ *
+ * @return the SwitchPort identifying this port
+ */
+ public SwitchPort getSwitchPort() {
+ return id;
+ }
+
+ /**
+ * Gets the DPID of the switch this port belongs to.
+ *
+ * @return the DPID of the switch this port belongs to
+ */
+ public Dpid getDpid() {
+ return id.getDpid();
+ }
+
+ /**
+ * Gets the port number.
+ *
+ * @return the port number
+ */
+ public PortNumber getPortNumber() {
+ return id.getPortNumber();
+ }
+
+ /**
+ * Computes the port ID for a given switch DPID and a port number.
+ *
+ * @param dpid the switch DPID to use
+ * @param number the port number to use
+ * @return the port ID as a ByteBuffer
+ */
+ public static ByteBuffer getPortID(Dpid dpid, PortNumber number) {
+ checkNotNull(dpid);
+ checkNotNull(number);
+ return getPortID(dpid.value(), number.value());
+ }
+
+ /**
+ * Computes the port ID for a given switch DPID and a port number.
+ * <p>
+ * TODO: This method should be removed and replaced with the corresponding
+ * getPortID(Dpid, PortNumber) method.
+ *
+ * @param dpid the switch DPID to use
+ * @param number the port number to use
+ * @return the port ID as a ByteBuffer
+ */
+ public static ByteBuffer getPortID(Long dpid, Long number) {
+ if (dpid == null) {
+ throw new IllegalArgumentException("dpid cannot be null");
+ }
+ if (number == null) {
+ throw new IllegalArgumentException("number cannot be null");
+ }
+ return (ByteBuffer) ByteBuffer.allocate(PortData.PORTID_BYTES)
+ .putChar('S').putLong(dpid)
+ .putChar('P').putLong(number).flip();
+ }
+
+ @Override
+ public Dpid getOriginDpid() {
+ return this.id.getDpid();
+ }
+
+ @Override
+ public ByteBuffer getIDasByteBuffer() {
+ return getPortID(getDpid(), getPortNumber());
+ }
+
+ @Override
+ public int hashCode() {
+ return 31 * super.hashCode() + Objects.hashCode(id);
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) {
+ return true;
+ }
+
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+
+ // Compare attributes
+ if (!super.equals(o)) {
+ return false;
+ }
+
+ PortData other = (PortData) o;
+ return Objects.equals(this.id, other.id);
+ }
+
+ @Override
+ public String toString() {
+ return "[PortData " + getDpid() + "@" + getPortNumber() + "]";
+ }
+}