package org.nextprot.api.isoform.mapper.domain;
import com.google.common.base.Preconditions;
import org.apache.commons.lang3.builder.EqualsBuilder;
import org.apache.commons.lang3.builder.HashCodeBuilder;
import org.nextprot.api.isoform.mapper.domain.impl.exception.UndefinedFeatureQueryException;
import java.util.Collections;
import java.util.List;
/**
* Single feature query
*/
public class SingleFeatureQuery extends BaseFeatureQuery {
private static final long serialVersionUID = 20161117L;
private String accession;
private String feature;
private String featureType;
private boolean propagableFeature;
public SingleFeatureQuery(){
//because of json
}
public SingleFeatureQuery(String feature, String featureType, String accession) {
Preconditions.checkNotNull(feature);
Preconditions.checkNotNull(featureType);
this.accession = accession;
this.feature = feature;
this.featureType = featureType;
}
public void checkFeatureQuery() throws FeatureQueryException {
super.checkFeatureQuery();
if (feature.isEmpty())
throw new UndefinedFeatureQueryException(this);
}
/**
* @return the nextprot entry accession number (example: NX_P01308)
*/
@Override
public String getAccession() {
return accession;
}
/**
* @return the string formatted feature
*/
public String getFeature() {
return feature;
}
@Override
public List<String> getFeatureList() {
return Collections.singletonList(feature);
}
/**
* @return the annotation category as string
*/
@Override
public String getFeatureType() {
return featureType;
}
/**
* @return true if feature should be propagated to other isoforms
*/
public boolean isFeaturePropagable() {
return propagableFeature;
}
public void setPropagableFeature(boolean propagableFeature) {
this.propagableFeature = propagableFeature;
}
@Override
public int hashCode() {
return HashCodeBuilder.reflectionHashCode(this);
}
@Override
public boolean equals(Object obj) {
return EqualsBuilder.reflectionEquals(this, obj);
}
public void setAccession(String accession) {
this.accession = accession;
}
}