blob: de0fff63fb262f409e8f00c17a0e41273943a5b9 [file] [log] [blame]
Jonathan Hart472062d2014-04-03 10:56:48 -07001package net.onrc.onos.core.topology;
Yuta HIGUCHI54ab8cd2014-02-11 09:43:34 -08002
Pavlin Radoslavov5cf1fe02014-07-03 22:52:25 -07003import net.onrc.onos.core.topology.web.serializers.SwitchEventSerializer;
Sho SHIMIZU83e3c1f2014-06-13 15:57:26 -07004import net.onrc.onos.core.util.Dpid;
5
Yuta HIGUCHIb5107282014-02-14 17:18:24 -08006import java.nio.ByteBuffer;
Sho SHIMIZUf34f1502014-06-13 13:48:00 -07007import java.util.Objects;
Yuta HIGUCHIdac4caa2014-02-11 18:51:35 -08008
Pavlin Radoslavov5cf1fe02014-07-03 22:52:25 -07009import org.codehaus.jackson.map.annotate.JsonSerialize;
10
Yuta HIGUCHI54ab8cd2014-02-11 09:43:34 -080011/**
Ray Milkeyb41100a2014-04-10 10:42:15 -070012 * Self-contained Switch Object.
Ray Milkey269ffb92014-04-03 14:43:30 -070013 * <p/>
Ray Milkeyb41100a2014-04-10 10:42:15 -070014 * TODO: We probably want common base class/interface for Self-Contained Event Object.
Yuta HIGUCHI54ab8cd2014-02-11 09:43:34 -080015 */
Pavlin Radoslavov5cf1fe02014-07-03 22:52:25 -070016@JsonSerialize(using = SwitchEventSerializer.class)
Yuta HIGUCHI54ab8cd2014-02-11 09:43:34 -080017public class SwitchEvent {
Sho SHIMIZU83e3c1f2014-06-13 15:57:26 -070018 protected final Dpid dpid;
Yuta HIGUCHI54ab8cd2014-02-11 09:43:34 -080019
Pavlin Radoslavov45ec04b2014-02-14 23:29:33 -080020 /**
Yuta HIGUCHI9cc421b2014-02-24 15:34:44 -080021 * Default constructor for Serializer to use.
Pavlin Radoslavov45ec04b2014-02-14 23:29:33 -080022 */
Yuta HIGUCHI9cc421b2014-02-24 15:34:44 -080023 @Deprecated
Pavlin Radoslavov45ec04b2014-02-14 23:29:33 -080024 public SwitchEvent() {
Ray Milkey269ffb92014-04-03 14:43:30 -070025 dpid = null;
Pavlin Radoslavov45ec04b2014-02-14 23:29:33 -080026 }
27
Yuta HIGUCHI54ab8cd2014-02-11 09:43:34 -080028 public SwitchEvent(Long dpid) {
Sho SHIMIZU83e3c1f2014-06-13 15:57:26 -070029 this.dpid = new Dpid(dpid);
Yuta HIGUCHI54ab8cd2014-02-11 09:43:34 -080030 }
31
Yuta HIGUCHI8f3dfa32014-06-25 00:14:25 -070032 public Dpid getDpid() {
33 return dpid;
Yuta HIGUCHI54ab8cd2014-02-11 09:43:34 -080034 }
35
Yuta HIGUCHI54ab8cd2014-02-11 09:43:34 -080036 @Override
Sho SHIMIZUf34f1502014-06-13 13:48:00 -070037 public boolean equals(Object o) {
38 if (this == o) {
39 return true;
40 }
41
42 if (!(o instanceof SwitchEvent)) {
43 return false;
44 }
45
46 SwitchEvent that = (SwitchEvent) o;
47 return Objects.equals(this.dpid, that.dpid);
48 }
49
50 @Override
51 public int hashCode() {
52 return Objects.hashCode(dpid);
53 }
54
55 @Override
Yuta HIGUCHI54ab8cd2014-02-11 09:43:34 -080056 public String toString() {
Sho SHIMIZU83e3c1f2014-06-13 15:57:26 -070057 return "[SwitchEvent 0x" + Long.toHexString(dpid.value()) + "]";
Yuta HIGUCHI54ab8cd2014-02-11 09:43:34 -080058 }
59
Yuta HIGUCHIb5107282014-02-14 17:18:24 -080060 public static final int SWITCHID_BYTES = 2 + 8;
61
Yuta HIGUCHIa341b112014-02-23 15:42:00 -080062 public static ByteBuffer getSwitchID(Long dpid) {
Ray Milkey269ffb92014-04-03 14:43:30 -070063 if (dpid == null) {
64 throw new IllegalArgumentException("dpid cannot be null");
65 }
66 return (ByteBuffer) ByteBuffer.allocate(SwitchEvent.SWITCHID_BYTES).putChar('S').putLong(dpid).flip();
Yuta HIGUCHIb5107282014-02-14 17:18:24 -080067 }
68
Pavlin Radoslavov45ec04b2014-02-14 23:29:33 -080069 public byte[] getID() {
Sho SHIMIZU83e3c1f2014-06-13 15:57:26 -070070 return getSwitchID(dpid.value()).array();
Yuta HIGUCHIa341b112014-02-23 15:42:00 -080071 }
72
73 public ByteBuffer getIDasByteBuffer() {
Sho SHIMIZU83e3c1f2014-06-13 15:57:26 -070074 return getSwitchID(dpid.value());
Pavlin Radoslavov45ec04b2014-02-14 23:29:33 -080075 }
Yuta HIGUCHI54ab8cd2014-02-11 09:43:34 -080076}