X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fdatamodel%2FSequence.java;h=9f3e7b8cb2acfa7818541e32c94d2895e5d0b89f;hb=f1fbc7674102f63dfe1bd156a2d19f3c658e35d5;hp=9994675cd4595ec2cb0da18b0bb80f01ea95225b;hpb=82c9e6981596955f5f5cea41b25adc7e7581746b;p=jalview.git diff --git a/src/jalview/datamodel/Sequence.java b/src/jalview/datamodel/Sequence.java index 9994675..9f3e7b8 100755 --- a/src/jalview/datamodel/Sequence.java +++ b/src/jalview/datamodel/Sequence.java @@ -22,6 +22,8 @@ package jalview.datamodel; import jalview.analysis.AlignSeq; import jalview.api.DBRefEntryI; +import jalview.datamodel.features.SequenceFeatures; +import jalview.datamodel.features.SequenceFeaturesI; import jalview.util.Comparison; import jalview.util.DBRefUtils; import jalview.util.MapList; @@ -88,6 +90,8 @@ public class Sequence extends ASequence implements SequenceI /** array of sequence features - may not be null for a valid sequence object */ public SequenceFeature[] sequenceFeatures; + private SequenceFeatures sequenceFeatureStore; + /** * Creates a new Sequence object. * @@ -127,6 +131,7 @@ public class Sequence extends ASequence implements SequenceI this.sequence = sequence2; this.start = start2; this.end = end2; + sequenceFeatureStore = new SequenceFeatures(); parseId(); checkValidRange(); } @@ -324,6 +329,13 @@ public class Sequence extends ASequence implements SequenceI @Override public synchronized boolean addSequenceFeature(SequenceFeature sf) { + if (sf.getType() == null) + { + System.err.println("SequenceFeature type may not be null: " + + sf.toString()); + return false; + } + if (sequenceFeatures == null && datasetSequence != null) { return datasetSequence.addSequenceFeature(sf); @@ -346,6 +358,8 @@ public class Sequence extends ASequence implements SequenceI temp[sequenceFeatures.length] = sf; sequenceFeatures = temp; + + sequenceFeatureStore.add(sf); return true; } @@ -361,6 +375,14 @@ public class Sequence extends ASequence implements SequenceI return; } + /* + * new way + */ + sequenceFeatureStore.delete(sf); + + /* + * old way - to be removed + */ int index = 0; for (index = 0; index < sequenceFeatures.length; index++) { @@ -420,6 +442,13 @@ public class Sequence extends ASequence implements SequenceI } @Override + public SequenceFeaturesI getFeatures() + { + return datasetSequence != null ? datasetSequence.getFeatures() + : sequenceFeatureStore; + } + + @Override public boolean addPDBId(PDBEntry entry) { if (pdbIds == null) @@ -1164,6 +1193,8 @@ public class Sequence extends ASequence implements SequenceI // move features and database references onto dataset sequence dsseq.sequenceFeatures = sequenceFeatures; sequenceFeatures = null; + dsseq.sequenceFeatureStore = sequenceFeatureStore; + sequenceFeatureStore = null; dsseq.dbrefs = dbrefs; dbrefs = null; // TODO: search and replace any references to this sequence with @@ -1483,4 +1514,17 @@ public class Sequence extends ASequence implements SequenceI } } + /** + * {@inheritDoc} + */ + @Override + public List findFeatures(int from, int to, + String... types) + { + if (datasetSequence != null) + { + return datasetSequence.findFeatures(from, to, types); + } + return sequenceFeatureStore.findFeatures(from, to, types); + } }