package com.netifera.platform.net.model;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
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;
public class HostEntity extends AbstractEntity {
private static final long serialVersionUID = 7428760363871082973L;
public final static String ENTITY_NAME = "host";
private String label;
private List<IEntityReference> addresses = new ArrayList<IEntityReference>();
private IEntityReference defaultAddress;
public HostEntity(IWorkspace workspace, long realmId) {
super(ENTITY_NAME, workspace, realmId);
}
HostEntity() {}
public void addAddress(NetworkAddressEntity address) {
if (addresses.size() == 0)
setDefaultAddress(address);
addresses.add(address.createReference());
}
public List<NetworkAddressEntity> getAddresses() {
List<NetworkAddressEntity> answer = new ArrayList<NetworkAddressEntity>();
for (IEntityReference ref: addresses)
answer.add((NetworkAddressEntity) referenceToEntity(ref));
return answer;
}
public void setDefaultAddress(NetworkAddressEntity address) {
this.defaultAddress = address.createReference();
}
public NetworkAddressEntity getDefaultAddress() {
return (NetworkAddressEntity) referenceToEntity(defaultAddress);
}
public void setLabel(String label) {
this.label = label;
}
public String getLabel() {
return label;
}
public boolean hasAddress(byte[] address) {
if (Arrays.equals(getDefaultAddress().getData(), address))
return true;
for (IEntityReference ref: addresses) {
NetworkAddressEntity addressEntity = (NetworkAddressEntity) referenceToEntity(ref);
if (Arrays.equals(addressEntity.getData(), address))
return true;
}
return false;
}
@Override
protected void synchronizeEntity(AbstractEntity masterEntity) {
label = ((HostEntity)masterEntity).label;
}
protected IEntity cloneEntity() {
HostEntity clone = new HostEntity(getWorkspace(), getRealmId());
clone.label = label;
for (IEntityReference ref: addresses)
clone.addresses.add(ref.createClone());
if(defaultAddress != null) {
clone.defaultAddress = defaultAddress.createClone();
}
return clone;
}
}