X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fdatamodel%2FSequenceFeature.java;h=719cf5277d59beecd98f99c095327ff3a7a77de2;hb=5ea3aac765826cdf87a68faf27fe539e2b38a277;hp=0baa78ebde392b4288cf5f7361eeab214479aa02;hpb=58951652adedb7c15569b5295359baa4c3a81e1e;p=jalview.git diff --git a/src/jalview/datamodel/SequenceFeature.java b/src/jalview/datamodel/SequenceFeature.java index 0baa78e..719cf52 100755 --- a/src/jalview/datamodel/SequenceFeature.java +++ b/src/jalview/datamodel/SequenceFeature.java @@ -20,6 +20,8 @@ */ package jalview.datamodel; +import jalview.datamodel.features.FeatureLocationI; + import java.util.HashMap; import java.util.Map; import java.util.Vector; @@ -30,7 +32,7 @@ import java.util.Vector; * @author $author$ * @version $Revision$ */ -public class SequenceFeature +public class SequenceFeature implements FeatureLocationI { private static final String STATUS = "status"; @@ -176,6 +178,24 @@ public class SequenceFeature } /** + * A copy constructor that allows the begin and end positions and group to be + * modified + * + * @param sf + * @param newBegin + * @param newEnd + * @param newGroup + */ + public SequenceFeature(SequenceFeature sf, int newBegin, int newEnd, + String newGroup) + { + this(sf); + begin = newBegin; + end = newEnd; + featureGroup = newGroup; + } + + /** * Two features are considered equal if they have the same type, group, * description, start, end, phase, strand, and (if present) 'Name', ID' and * 'Parent' attributes. @@ -268,6 +288,7 @@ public class SequenceFeature * * @return DOCUMENT ME! */ + @Override public int getBegin() { return begin; @@ -283,6 +304,7 @@ public class SequenceFeature * * @return DOCUMENT ME! */ + @Override public int getEnd() { return end; @@ -340,7 +362,10 @@ public class SequenceFeature links = new Vector(); } - links.insertElementAt(labelLink, 0); + if (!links.contains(labelLink)) + { + links.insertElementAt(labelLink, 0); + } } public float getScore() @@ -532,4 +557,31 @@ public class SequenceFeature return s.hashCode() + getBegin() + getEnd() + (int) getScore() + getStrand(); } + + /** + * Answers true if the feature's start/end values represent two related + * positions, rather than ends of a range. Such features may be visualised or + * reported differently to features on a range. + */ + @Override + public boolean isContactFeature() + { + // TODO abstract one day to a FeatureType class + if ("disulfide bond".equalsIgnoreCase(type) + || "disulphide bond".equalsIgnoreCase(type)) + { + return true; + } + return false; + } + + /** + * Answers true if the sequence has zero start and end position + * + * @return + */ + public boolean isNonPositional() + { + return begin == 0 && end == 0; + } }