package com.netifera.platform.net.model;
import com.netifera.platform.api.model.AbstractEntity;
import com.netifera.platform.api.model.IEntity;
import com.netifera.platform.api.model.IWorkspace;
import com.netifera.platform.util.HexaEncoding;
import com.netifera.platform.util.addresses.inet.InternetNetblock;
public class NetblockEntity extends AbstractEntity {
private static final long serialVersionUID = -8976034297129679105L;
public final static String ENTITY_NAME = "netblock.ip";
/*
* byte representation of the network
*/
private byte[] data;
/* CIDR
* i.e.: 24 means /24
*/
private int maskBitCount;
public NetblockEntity(IWorkspace workspace, long realmId) {
super(ENTITY_NAME, workspace, realmId);
}
NetblockEntity() {}
public void setData(byte[] data) {
assert(data.length == 4 || data.length == 16);
this.data = data.clone();
}
public byte[] getData() {
return data; // FIXME readonly
}
public void setMaskBitCount(int count) {
assert(count > 0 && count <= 128); // FIXME data.length
maskBitCount = count;
}
public int getMaskBitCount() {
return maskBitCount;
}
public InternetNetblock getNetblock() {
return InternetNetblock.fromData(data, maskBitCount);
}
@Override
protected void synchronizeEntity(AbstractEntity masterEntity) {
data = ((NetblockEntity)masterEntity).data; // FIXME
maskBitCount = ((NetblockEntity)masterEntity).maskBitCount;
}
@Override
protected IEntity cloneEntity() {
NetblockEntity clone = new NetblockEntity(getWorkspace(), getRealmId());
clone.data = data.clone();
clone.maskBitCount = maskBitCount;
return clone;
}
public static String createQueryKey(long realmId, InternetNetblock netblock) {
return createQueryKey(realmId, netblock.getNetworkAddress().toBytes(), netblock.getCIDR());
}
private static String createQueryKey(long realmId, byte[] data, int maskBits) {
return ENTITY_NAME + ":" + realmId + ":" + HexaEncoding.bytes2hex(data) + "/" + maskBits;
}
@Override
protected String generateQueryKey() {
return createQueryKey(getRealmId(), data, maskBitCount);
}
}