Marc De Leenheer

Full long value for port numbers. Fix port number serializer.

Change-Id: I106ce3d39533e22f5a9a0e6972b91f669068198b
......@@ -49,16 +49,19 @@ public final class PortNumber {
private final long number;
private final String name;
private final boolean hasName;
// Public creation is prohibited
private PortNumber(long number) {
this.number = number;
this.name = UnsignedLongs.toString(number);
this.hasName = false;
}
private PortNumber(long number, String name) {
this.number = number;
this.name = name;
this.hasName = true;
}
/**
......@@ -99,7 +102,11 @@ public final class PortNumber {
* @return true if logical port number
*/
public boolean isLogical() {
return number < 0 || number > MAX_NUMBER;
if (hasName) {
return false;
} else {
return (number < 0 || number > MAX_NUMBER);
}
}
/**
......@@ -120,6 +127,16 @@ public final class PortNumber {
return name;
}
/**
* Indicates whether this port number was created with a port name,
* or only with a number.
*
* @return true if port was created with name
*/
public boolean hasName() {
return hasName;
}
private String decodeLogicalPort() {
if (number == CONTROLLER_NUMBER) {
return "CONTROLLER";
......
......@@ -38,12 +38,19 @@ public final class PortNumberSerializer extends
@Override
public void write(Kryo kryo, Output output, PortNumber object) {
output.writeBoolean(object.hasName());
output.writeLong(object.toLong());
if (object.hasName()) {
output.writeString(object.name());
}
}
@Override
public PortNumber read(Kryo kryo, Input input,
Class<PortNumber> type) {
public PortNumber read(Kryo kryo, Input input, Class<PortNumber> type) {
if (input.readBoolean()) {
return PortNumber.portNumber(input.readLong(), input.readString());
} else {
return PortNumber.portNumber(input.readLong());
}
}
}
......