package com.netifera.platform.net.model;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
import com.netifera.platform.api.model.AbstractEntity;
import com.netifera.platform.api.model.IEntity;
import com.netifera.platform.api.model.IEntityReference;
import com.netifera.platform.api.model.IWorkspace;
import com.netifera.platform.util.addresses.inet.InternetAddress;
public class InternetAddressEntity extends NetworkAddressEntity {
private static final long serialVersionUID = -4283823680888685989L;
public final static String ENTITY_NAME = "address.ip";
private final IEntityReference host;
private Set<String> names = new HashSet<String>();
private IEntityReference tcpPorts;
private IEntityReference udpPorts;
private InternetAddressEntity(IWorkspace workspace, HostEntity host, byte[] address) {
super(ENTITY_NAME, workspace, host.getRealmId(), address);
this.host = host.createReference();
}
public InternetAddressEntity(IWorkspace workspace, HostEntity host, String address) {
this(workspace, host, InternetAddress.fromString(address).toBytes());
}
private InternetAddressEntity(IWorkspace workspace, IEntityReference hostReference, long realmId, byte[] address) {
super(ENTITY_NAME, workspace, realmId, address);
this.host = hostReference == null ? null : hostReference.createClone();
}
InternetAddressEntity() {
host = null;
}
public InternetAddress getAddress() {
return InternetAddress.fromBytes(getData());
}
public PortSetEntity getTcpPorts() {
return (PortSetEntity) referenceToEntity(tcpPorts);
}
public PortSetEntity getUdpPorts() {
return (PortSetEntity) referenceToEntity(udpPorts);
}
public void setTcpPorts(PortSetEntity ports) {
tcpPorts = ports.createReference();
}
public void setUdpPorts(PortSetEntity ports) {
udpPorts = ports.createReference();
}
public HostEntity getHost() {
return (HostEntity) referenceToEntity(host);
}
public void addName(String name) {
names.add(name);
}
public Set<String> getNames() {
return Collections.unmodifiableSet(names);
}
@Override
protected void synchronizeEntity(AbstractEntity masterEntity) {
super.synchronizeEntity(masterEntity);
names = ((InternetAddressEntity)masterEntity).names;
tcpPorts = ((InternetAddressEntity)masterEntity).tcpPorts;
udpPorts = ((InternetAddressEntity)masterEntity).udpPorts;
}
protected IEntity cloneEntity() {
InternetAddressEntity clone = new InternetAddressEntity(getWorkspace(), host, getRealmId(), getData());
clone.names = names;
clone.tcpPorts = tcpPorts;
clone.udpPorts = udpPorts;
return clone;
}
public static String createQueryKey(long realmId, InternetAddress address) {
return NetworkAddressEntity.createQueryKey(ENTITY_NAME, realmId, address.toBytes());
}
}