blob: 0b5c08158e8dafcd1c8087cf5b4a03426651134d [file] [log] [blame]
package net.onrc.onos.core.util;
import net.onrc.onos.core.util.serializers.IPv4Deserializer;
import net.onrc.onos.core.util.serializers.IPv4Serializer;
import org.codehaus.jackson.map.annotate.JsonDeserialize;
import org.codehaus.jackson.map.annotate.JsonSerialize;
/**
* The class representing an IPv4 address.
* This class is immutable.
*/
@JsonDeserialize(using = IPv4Deserializer.class)
@JsonSerialize(using = IPv4Serializer.class)
public final class IPv4 {
private final int value;
/**
* Default constructor.
*/
public IPv4() {
this.value = 0;
}
/**
* Copy constructor.
*
* @param other the object to copy from.
*/
public IPv4(IPv4 other) {
this.value = other.value;
}
/**
* Constructor from an integer value.
*
* @param value the value to use.
*/
public IPv4(int value) {
this.value = value;
}
/**
* Constructor from a string.
*
* @param value the value to use.
*/
public IPv4(String value) {
String[] splits = value.split("\\.");
if (splits.length != 4) {
throw new IllegalArgumentException("Specified IPv4 address must contain four " +
"numerical digits separated by '.'");
}
int result = 0;
for (int i = 0; i < 4; ++i) {
result |= Integer.valueOf(splits[i]) << ((3 - i) * 8);
}
this.value = result;
}
/**
* Get the value of the IPv4 address.
*
* @return the value of the IPv4 address.
*/
public int value() {
return value;
}
/**
* Convert the IPv4 value to a '.' separated string.
*
* @return the IPv4 value as a '.' separated string.
*/
@Override
public String toString() {
return ((this.value >> 24) & 0xFF) + "." +
((this.value >> 16) & 0xFF) + "." +
((this.value >> 8) & 0xFF) + "." +
(this.value & 0xFF);
}
}