package net.onrc.onos.core.util; import javax.annotation.concurrent.Immutable; import net.onrc.onos.core.util.serializers.DpidDeserializer; import net.onrc.onos.core.util.serializers.DpidSerializer; import org.codehaus.jackson.map.annotate.JsonDeserialize; import org.codehaus.jackson.map.annotate.JsonSerialize; import org.projectfloodlight.openflow.util.HexString; import com.google.common.primitives.Longs; /** * The class representing a network switch DPID. * This class is immutable. */ @JsonDeserialize(using = DpidDeserializer.class) @JsonSerialize(using = DpidSerializer.class) @Immutable public final class Dpid { private static final long UNKNOWN = 0; private final long value; /** * Default constructor. */ protected Dpid() { this.value = Dpid.UNKNOWN; } /** * Constructor from a long value. * * @param value the value to use. */ public Dpid(long value) { this.value = value; } /** * Constructor from a string. * * @param value the value to use. */ public Dpid(String value) { this.value = HexString.toLong(value); } /** * Get the value of the DPID. * * @return the value of the DPID. */ public long value() { return value; } /** * Convert the DPID value to a ':' separated hexadecimal string. * * @return the DPID value as a ':' separated hexadecimal string. */ @Override public String toString() { return HexString.toHexString(this.value); } @Override public boolean equals(Object other) { if (!(other instanceof Dpid)) { return false; } Dpid otherDpid = (Dpid) other; return value == otherDpid.value; } @Override public int hashCode() { return Longs.hashCode(value); } }