package qa.qcri.aidr.dbmanager.dto;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import com.fasterxml.jackson.annotation.JsonBackReference;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonManagedReference;
import qa.qcri.aidr.common.exception.PropertyNotSetException;
import qa.qcri.aidr.dbmanager.entities.misc.Collection;
import qa.qcri.aidr.dbmanager.entities.model.Model;
import qa.qcri.aidr.dbmanager.entities.model.ModelFamily;
import qa.qcri.aidr.dbmanager.entities.model.NominalAttribute;
@XmlRootElement
@JsonIgnoreProperties(ignoreUnknown=true)
public class ModelFamilyDTO implements Serializable {
/**
*
*/
private static final long serialVersionUID = 7377627785888285732L;
@XmlElement
private Long modelFamilyId;
@XmlElement
private NominalAttributeDTO nominalAttributeDTO = null;
@XmlElement
private CollectionDTO crisisDTO = null;
@XmlElement
private boolean isActive;
@XmlElement
private List<ModelDTO> modelsDTO = null;
public ModelFamilyDTO() {
}
public ModelFamilyDTO(ModelFamily model) throws PropertyNotSetException {
if (model != null) {
this.setModelFamilyId(model.getModelFamilyId());
if (model.hasNominalAttribute()) {
NominalAttribute na = new NominalAttribute(model.getNominalAttribute().getUsers(),
model.getNominalAttribute().getName(), model.getNominalAttribute().getDescription(), model.getNominalAttribute().getCode());
if(model.getNominalAttribute().hasNominalLabels()){
na.setNominalLabels(model.getNominalAttribute().getNominalLabels());
}
na.setNominalAttributeId(model.getNominalAttribute().getNominalAttributeId());
this.setNominalAttributeDTO(new NominalAttributeDTO(na));
}
if (model.hasCrisis()) {
Collection c = new Collection(model.getCollection().getUsers(), model.getCollection().getCrisisType(), model.getCollection().getName(), model.getCollection().getCode(),
model.getCollection().isIsTrashed(), model.getCollection().isIsMicromapperEnabled());
c.setCrisisId(model.getCollection().getCrisisId());
this.setCrisisDTO(new CollectionDTO(c));
}
this.setIsActive(model.isIsActive());
this.setModelFamilyId(model.getModelFamilyId());
if (model.hasModels()) {
this.setModelsDTO(this.toModelDTOList(model.getModels()));
}
}
}
public ModelFamilyDTO(NominalAttributeDTO nominalAttributeDTO, CollectionDTO crisisDTO,
boolean isActive) {
this.setNominalAttributeDTO(nominalAttributeDTO);
this.setCrisisDTO(crisisDTO);
this.setIsActive(isIsActive());
}
public Long getModelFamilyId() {
return this.modelFamilyId;
}
public void setModelFamilyId(Long modelFamilyId) {
this.modelFamilyId = modelFamilyId;
}
public NominalAttributeDTO getNominalAttributeDTO() {
return this.nominalAttributeDTO;
}
public void setNominalAttributeDTO(NominalAttributeDTO nominalAttributeDTO) {
this.nominalAttributeDTO = nominalAttributeDTO;
}
public CollectionDTO getCrisisDTO() {
return this.crisisDTO;
}
public void setCrisisDTO(CollectionDTO crisisDTO) {
this.crisisDTO = crisisDTO;
}
public boolean isIsActive() {
return this.isActive;
}
public void setIsActive(boolean isActive) {
this.isActive = isActive;
}
public List<ModelDTO> getModelsDTO() {
return modelsDTO;
}
public void setModelsDTO(List<ModelDTO> modelsDTO) {
this.modelsDTO = modelsDTO;
}
private List<ModelDTO> toModelDTOList(List<Model> list) throws PropertyNotSetException {
if (list != null) {
List<ModelDTO> dtoList = new ArrayList<ModelDTO>();
for (Model d: list) {
dtoList.add(new ModelDTO(d));
}
return dtoList;
}
return null;
}
private List<Model> toModelList(List<ModelDTO> list) throws PropertyNotSetException {
if (list != null) {
List<Model> eList = new ArrayList<Model>();
for (ModelDTO dto: list) {
eList.add(dto.toEntity());
}
return eList;
}
return null;
}
public ModelFamily toEntity() throws PropertyNotSetException {
ModelFamily entity = new ModelFamily();
if (this.getNominalAttributeDTO() != null) {
entity.setNominalAttribute(this.getNominalAttributeDTO().toEntity());
}
if (this.getCrisisDTO() != null) {
entity.setCollection(this.getCrisisDTO().toEntity());
}
entity.setIsActive(this.isIsActive());
if (this.getModelFamilyId() != null) {
entity.setModelFamilyId(modelFamilyId);
}
if (this.modelsDTO != null) {
entity.setModels(this.toModelList(this.getModelsDTO()));
}
return entity;
}
}