package org.phenoscape.model;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.obo.annotation.base.OBOUtil;
import org.obo.annotation.base.OBOUtil.Differentium;
import org.obo.app.model.AbstractPropertyChangeObject;
import org.obo.datamodel.OBOClass;
import org.obo.datamodel.OBOProperty;
import org.obo.datamodel.OBOSession;
public class PhenotypeProposal extends AbstractPropertyChangeObject {
public static enum ResolvedStatus {
PROPOSED, ACCEPTED, REJECTED
}
private ResolvedStatus status = ResolvedStatus.PROPOSED;
private final String characterID;
private final String stateID;
private String entityText;
private String entityLocatorText;
private String qualityText;
private String qualityModifierText;
private final List<OBOClass> entities = new ArrayList<OBOClass>();
private final List<OBOClass> entityLocators = new ArrayList<OBOClass>();
private final List<OBOClass> qualities = new ArrayList<OBOClass>();
private final List<OBOClass> qualityModifiers = new ArrayList<OBOClass>();
private boolean qualityIsNegated;
private OBOClass negatedQualityParent;
public PhenotypeProposal(String characterID, String stateID) {
super();
this.characterID = characterID;
this.stateID = stateID;
}
public ResolvedStatus getStatus() {
return this.status;
}
public void setStatus(ResolvedStatus status) {
this.status = status;
}
public String getEntityText() {
return entityText;
}
public void setEntityText(String entityText) {
this.entityText = entityText;
}
public String getEntityLocatorText() {
return entityLocatorText;
}
public void setEntityLocatorText(String entityLocatorText) {
this.entityLocatorText = entityLocatorText;
}
public String getQualityText() {
return qualityText;
}
public void setQualityText(String qualityText) {
this.qualityText = qualityText;
}
public String getQualityModifierText() {
return qualityModifierText;
}
public void setQualityModifierText(String qualityModifierText) {
this.qualityModifierText = qualityModifierText;
}
public boolean isQualityIsNegated() {
return qualityIsNegated;
}
public void setQualityIsNegated(boolean qualityIsNegated) {
this.qualityIsNegated = qualityIsNegated;
}
public OBOClass getNegatedQualityParent() {
return negatedQualityParent;
}
public void setNegatedQualityParent(OBOClass negatedQualityParent) {
this.negatedQualityParent = negatedQualityParent;
}
public List<OBOClass> getEntities() {
return entities;
}
public List<OBOClass> getEntityLocators() {
return entityLocators;
}
public List<OBOClass> getQualities() {
return qualities;
}
public List<OBOClass> getProcessedQualities(OBOSession session) {
final List<OBOClass> negatedQualities = new ArrayList<OBOClass>();
if (this.qualityIsNegated && (!this.qualities.isEmpty()) && (this.getNegatedQualityParent() != null)) {
for (OBOClass quality : this.getQualities()) {
final Differentium diff = new Differentium();
diff.setRelation((OBOProperty)(session.getObject("PHENOSCAPE:complement_of")));
diff.setTerm(quality);
negatedQualities.add(OBOUtil.createPostComposition(this.getNegatedQualityParent(), Collections.singletonList(diff)));
}
return negatedQualities;
} else {
return this.getQualities();
}
}
public List<OBOClass> getQualityModifiers() {
return qualityModifiers;
}
public String getCharacterID() {
return characterID;
}
public String getStateID() {
return stateID;
}
}