package org.nextprot.api.commons.bio.variation.prot.impl.seqchange;
import com.google.common.base.Preconditions;
import org.nextprot.api.commons.bio.AminoAcidCode;
import org.nextprot.api.commons.bio.variation.prot.seqchange.SequenceChange;
import java.util.Objects;
/**
* A frameshift affects a protein sequence after amino-acid leading to a truncated protein.
*
* Created by fnikitin on 10/07/15.
*/
public class Frameshift implements SequenceChange<Frameshift.Change> {
private final Change change;
public Frameshift(Change change) {
this.change = change;
}
@Override
public Change getValue() {
return change;
}
@Override
public Type getType() {
return Type.FRAMESHIFT;
}
public static class Change {
private final AminoAcidCode changedAminoAcid;
private final int newTerminationPosition;
public Change(AminoAcidCode changedAminoAcid, int newTerminationPosition) {
Preconditions.checkArgument(newTerminationPosition>1);
this.changedAminoAcid = changedAminoAcid;
this.newTerminationPosition = newTerminationPosition;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof Change)) return false;
Change change = (Change) o;
return newTerminationPosition == change.newTerminationPosition &&
changedAminoAcid == change.changedAminoAcid;
}
@Override
public int hashCode() {
return Objects.hash(changedAminoAcid, newTerminationPosition);
}
public AminoAcidCode getChangedAminoAcid() {
return changedAminoAcid;
}
public int getNewTerminationPosition() {
return newTerminationPosition;
}
}
}