X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fdatamodel%2FSequence.java;h=5a3ffa420dd0f836b7e1df6523b4e941db11b76e;hb=refs%2Fheads%2Ffeatures%2FJAL-653_JAL-1766_htslib_refseqsupport;hp=68c8c5006dc24e94e86c1da347034e5190041b97;hpb=bc02849268c0a7ffda386ec00658b3411029b5e5;p=jalview.git diff --git a/src/jalview/datamodel/Sequence.java b/src/jalview/datamodel/Sequence.java index 68c8c50..5a3ffa4 100755 --- a/src/jalview/datamodel/Sequence.java +++ b/src/jalview/datamodel/Sequence.java @@ -22,6 +22,7 @@ package jalview.datamodel; import jalview.analysis.AlignSeq; import jalview.api.DBRefEntryI; +import jalview.datamodel.features.SequenceFeatures; import jalview.util.Comparison; import jalview.util.DBRefUtils; import jalview.util.MapList; @@ -81,6 +82,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. * @@ -120,6 +123,7 @@ public class Sequence extends ASequence implements SequenceI this.sequence = sequence2; this.start = start2; this.end = end2; + sequenceFeatureStore = new SequenceFeatures(); parseId(); checkValidRange(); } @@ -233,8 +237,7 @@ public class Sequence extends ASequence implements SequenceI { char[] oseq = seq.getSequence(); initSeqAndName(seq.getName(), Arrays.copyOf(oseq, oseq.length), - seq.getStart(), - seq.getEnd()); + seq.getStart(), seq.getEnd()); } description = seq.getDescription(); if (seq != datasetSequence) @@ -293,7 +296,6 @@ public class Sequence extends ASequence implements SequenceI } } - @Override public void setSequenceFeatures(SequenceFeature[] features) { @@ -316,12 +318,11 @@ public class Sequence extends ASequence implements SequenceI } @Override - public synchronized void addSequenceFeature(SequenceFeature sf) + public synchronized boolean addSequenceFeature(SequenceFeature sf) { - if (sequenceFeatures==null && datasetSequence != null) + if (sequenceFeatures == null && datasetSequence != null) { - datasetSequence.addSequenceFeature(sf); - return; + return datasetSequence.addSequenceFeature(sf); } if (sequenceFeatures == null) { @@ -332,7 +333,7 @@ public class Sequence extends ASequence implements SequenceI { if (sequenceFeatures[i].equals(sf)) { - return; + return false; } } @@ -341,6 +342,9 @@ public class Sequence extends ASequence implements SequenceI temp[sequenceFeatures.length] = sf; sequenceFeatures = temp; + + sequenceFeatureStore.add(sf); + return true; } @Override @@ -348,8 +352,9 @@ public class Sequence extends ASequence implements SequenceI { if (sequenceFeatures == null) { - if (datasetSequence!=null) { - datasetSequence.deleteFeature(sf); + if (datasetSequence != null) + { + datasetSequence.deleteFeature(sf); } return; } @@ -1094,7 +1099,7 @@ public class Sequence extends ASequence implements SequenceI @Override public SequenceI deriveSequence() { - Sequence seq=null; + Sequence seq = null; if (datasetSequence == null) { if (isValidDatasetSequence()) @@ -1108,7 +1113,7 @@ public class Sequence extends ASequence implements SequenceI else { // Create a new, valid dataset sequence - createDatasetSequence(); + createDatasetSequence(); } } return new Sequence(this); @@ -1156,9 +1161,9 @@ public class Sequence extends ASequence implements SequenceI dsseq.setDescription(description); // move features and database references onto dataset sequence dsseq.sequenceFeatures = sequenceFeatures; - sequenceFeatures=null; + sequenceFeatures = null; dsseq.dbrefs = dbrefs; - dbrefs=null; + dbrefs = null; // TODO: search and replace any references to this sequence with // references to the dataset sequence in Mappings on dbref dsseq.pdbIds = pdbIds; @@ -1416,15 +1421,14 @@ public class Sequence extends ASequence implements SequenceI return null; } - @Override public List getPrimaryDBRefs() { - if (datasetSequence!=null) + if (datasetSequence != null) { return datasetSequence.getPrimaryDBRefs(); } - if (dbrefs==null || dbrefs.length==0) + if (dbrefs == null || dbrefs.length == 0) { return Collections.emptyList(); } @@ -1477,4 +1481,13 @@ public class Sequence extends ASequence implements SequenceI } } + @Override + public List findFeatures(String type, int from, int to) + { + if (datasetSequence != null) + { + return datasetSequence.findFeatures(type, from, to); + } + return sequenceFeatureStore.findFeatures(type, from, to); + } }