package org.nextprot.api.core.domain;
import org.jsondoc.core.annotation.ApiObject;
import org.jsondoc.core.annotation.ApiObjectField;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
@ApiObject(name = "interaction", description = "The interactions")
public class Interaction implements Serializable, IsoformSpecific {
private static final long serialVersionUID = -4893142951872871844L;
private Long evidenceId;
private String evidenceType;
@ApiObjectField(description = "The datasource of the interaction evidence")
private String evidenceDatasource;
private String evidenceQuality;
private Long evidenceResourceId;
private String evidenceResourceType;
private boolean selfInteraction=false;
@ApiObjectField(description = "The local db identifier")
private Long partnershipId;
@ApiObjectField(description = "The md5 of the interaction as an identifier")
private String md5;
// members below should be read from the db when the field and value are available
private String evidenceCodeAC="ECO:0000353";
private String evidenceCodeName="physical interaction evidence used in manual assertion";
@ApiObjectField(description = "The quality (can be gold or silver)")
private String quality;
@ApiObjectField(description = "The interaction database")
private String evidenceXrefDB;
@ApiObjectField(description = "The accession code of the interaction")
private String evidenceXrefAC;
@ApiObjectField(description = "The url of the interaction")
private String evidenceXrefURL;
@ApiObjectField(description = "The number of experiments")
private int numberOfExperiments;
@ApiObjectField(description = "The interactants")
private List<Interactant> interactants;
public String getEvidenceCodeAC() {
return evidenceCodeAC;
}
public void setEvidenceCodeAC(String evidenceCodeAC) {
this.evidenceCodeAC = evidenceCodeAC;
}
public String getEvidenceCodeName() {
return evidenceCodeName;
}
public void setEvidenceCodeName(String evidenceCodeName) {
this.evidenceCodeName = evidenceCodeName;
}
public boolean isSelfInteraction() {
return selfInteraction;
}
public void setSelfInteraction(boolean selfInteraction) {
this.selfInteraction = selfInteraction;
}
public Interaction() {
interactants = new ArrayList<>();
}
public Long getEvidenceId() {
return evidenceId;
}
public void setEvidenceId(Long evidenceId) {
this.evidenceId = evidenceId;
}
public String getEvidenceType() {
return evidenceType;
}
public void setEvidenceType(String evidenceType) {
this.evidenceType = evidenceType;
}
public String getEvidenceQuality() {
return evidenceQuality;
}
public void setEvidenceQuality(String evidenceQuality) {
this.evidenceQuality = evidenceQuality;
}
public String getEvidenceDatasource() {
return evidenceDatasource;
}
public Long getId() {
return partnershipId;
}
public void setId(Long partnershipId) {
this.partnershipId = partnershipId;
}
public String getMd5() {
return md5;
}
public void setMd5(String md5) {
this.md5 = md5;
}
public void setEvidenceDatasource(String name) {
this.evidenceDatasource = name;
}
public int getNumberOfExperiments() {
return numberOfExperiments;
}
public void setNumberOfExperiments(int numberOfExperiments) {
this.numberOfExperiments = numberOfExperiments;
}
public List<Interactant> getInteractants() {
return interactants;
}
public void setInteractants(List<Interactant> interactants) {
this.interactants = interactants;
}
public void addInteractant(Interactant interactant) {
this.interactants.add(interactant);
}
public String getEvidenceXrefDB() {
return evidenceXrefDB;
}
public void setEvidenceXrefDB(String database) {
this.evidenceXrefDB = database;
}
public String getEvidenceXrefAC() {
return evidenceXrefAC;
}
public void setEvidenceXrefAC(String accession) {
this.evidenceXrefAC = accession;
}
public String getEvidenceXrefURL() {
return evidenceXrefURL;
}
public void setEvidenceXrefURL(String url) {
this.evidenceXrefURL = url;
}
public String getQuality() {
return quality;
}
public void setQuality(String quality) {
this.quality = quality;
}
// according to issue http://issues.isb-sib.ch/browse/CALIPHOMISC-149
// we always propagate the interactions to all isoforms but we set the specificity property
@Override
public boolean isSpecificForIsoform(String isoform) {
return true;
}
/**
* Determines if an interaction is specific to the isoform passed as the parameter
* @param isoform the name of an isoform
* @return true if the parameter matches the name of the isoform of the entry point
*/
public boolean isInteractionSpecificForIsoform(String isoform) {
boolean result = false;
for (Interactant act: interactants) {
if (act.isEntryPoint() && act.isNextprot() && act.isIsoform()) {
if (isoform.startsWith("NX_")) isoform = isoform.substring(3);
if (act.getAccession().equals(isoform)) result = true;
}
}
return result;
}
public Long getEvidenceResourceId() {
return evidenceResourceId;
}
public void setEvidenceResourceId(Long evidenceResourceId) {
this.evidenceResourceId = evidenceResourceId;
}
public String getEvidenceResourceType() {
return evidenceResourceType;
}
public void setEvidenceResourceType(String evidenceResourceType) {
this.evidenceResourceType = evidenceResourceType;
}
}