*/
package jalview.datamodel;
-import jalview.analysis.AlignSeq;
-import jalview.datamodel.features.SequenceFeatures;
-import jalview.datamodel.features.SequenceFeaturesI;
-import jalview.util.Comparison;
-import jalview.util.DBRefUtils;
-import jalview.util.MapList;
-import jalview.util.StringUtils;
-
import java.util.ArrayList;
import java.util.Arrays;
import java.util.BitSet;
import java.util.Vector;
import fr.orsay.lri.varna.models.rna.RNA;
+import jalview.analysis.AlignSeq;
+import jalview.datamodel.features.SequenceFeatures;
+import jalview.datamodel.features.SequenceFeaturesI;
+import jalview.util.Comparison;
+import jalview.util.DBRefUtils;
+import jalview.util.MapList;
+import jalview.util.StringUtils;
/**
*
}
/**
- * DOCUMENT ME!
+ * Answers the sequence name, with '/start-end' appended if jvsuffix is true
*
- * @return DOCUMENT ME!
+ * @return
*/
@Override
public String getDisplayId(boolean jvsuffix)
{
- StringBuffer result = new StringBuffer(name);
- if (jvsuffix)
+ if (!jvsuffix)
{
- result.append("/" + start + "-" + end);
+ return name;
}
+ StringBuilder result = new StringBuilder(name);
+ result.append("/").append(start).append("-").append(end);
return result.toString();
}
public void setStart(int start)
{
this.start = start;
+ sequenceChanged();
}
/**
@Override
public void addDBRef(DBRefEntry entry)
{
+ // TODO JAL-3980 maintain as sorted list
if (datasetSequence != null)
{
datasetSequence.addDBRef(entry);
{
dbrefs = new DBModList<>();
}
+ // TODO JAL-3979 LOOK UP RATHER THAN SWEEP FOR EFFICIENCY
for (int ib = 0, nb = dbrefs.size(); ib < nb; ib++)
{
getStart(), getEnd());
datasetSequence = dsseq;
+ updateDatasetFrom(dsseq, this);
+ }
+ return datasetSequence;
+ }
- dsseq.setDescription(description);
- // move features and database references onto dataset sequence
- dsseq.sequenceFeatureStore = sequenceFeatureStore;
- sequenceFeatureStore = null;
- dsseq.dbrefs = dbrefs;
- dbrefs = null;
- // TODO: search and replace any references to this sequence with
- // references to the dataset sequence in Mappings on dbref
- dsseq.pdbIds = pdbIds;
- pdbIds = null;
- datasetSequence.updatePDBIds();
- if (annotation != null)
+ /**
+ * used by createDatasetSequence - transfers dataset-only properties to dsseq
+ * from sequence2
+ *
+ * @param dsseq
+ * - newly created dataset sequenceI for sequence
+ * @param sequence2
+ * - sequence object that needs a dataset
+ */
+ protected void updateDatasetFrom(Sequence dsseq, Sequence sequence2)
+ {
+ dsseq.setDescription(description);
+ // move features and database references onto dataset sequence
+ dsseq.sequenceFeatureStore = sequenceFeatureStore;
+ sequenceFeatureStore = null;
+ dsseq.dbrefs = dbrefs;
+ dbrefs = null;
+ // TODO: search and replace any references to this sequence with
+ // references to the dataset sequence in Mappings on dbref
+ dsseq.pdbIds = pdbIds;
+ pdbIds = null;
+ datasetSequence.updatePDBIds();
+ if (annotation != null)
+ {
+ // annotation is cloned rather than moved, to preserve what's currently
+ // on the alignment
+ for (AlignmentAnnotation aa : annotation)
{
- // annotation is cloned rather than moved, to preserve what's currently
- // on the alignment
- for (AlignmentAnnotation aa : annotation)
- {
- AlignmentAnnotation _aa = new AlignmentAnnotation(aa);
- _aa.sequenceRef = datasetSequence;
- _aa.adjustForAlignment(); // uses annotation's own record of
- // sequence-column mapping
- datasetSequence.addAlignmentAnnotation(_aa);
- }
+ AlignmentAnnotation _aa = new AlignmentAnnotation(aa);
+ _aa.sequenceRef = datasetSequence;
+ _aa.adjustForAlignment(); // uses annotation's own record of
+ // sequence-column mapping
+ datasetSequence.addAlignmentAnnotation(_aa);
}
}
- return datasetSequence;
}
/*
public List<AlignmentAnnotation> getAlignmentAnnotations(String calcId,
String label)
{
+ return getAlignmentAnnotations(calcId, label, null, true);
+ }
+
+ @Override
+ public List<AlignmentAnnotation> getAlignmentAnnotations(String calcId,
+ String label, String description)
+ {
+ return getAlignmentAnnotations(calcId, label, description, false);
+ }
+
+ private List<AlignmentAnnotation> getAlignmentAnnotations(String calcId,
+ String label, String description, boolean ignoreDescription)
+ {
List<AlignmentAnnotation> result = new ArrayList<>();
if (this.annotation != null)
{
for (AlignmentAnnotation ann : annotation)
{
- if (ann.calcId != null && ann.calcId.equals(calcId)
- && ann.label != null && ann.label.equals(label))
+ if ((ann.calcId != null && ann.calcId.equals(calcId))
+ && (ann.label != null && ann.label.equals(label))
+ && ((ignoreDescription && description == null)
+ || (ann.description != null
+ && ann.description.equals(description))))
+
{
result.add(ann);
}
List<SequenceFeature> result = getFeatures().findFeatures(startPos,
endPos, types);
- if (datasetSequence != null)
- {
- result = datasetSequence.getFeatures().findFeatures(startPos, endPos,
- types);
- }
- else
- {
- result = sequenceFeatureStore.findFeatures(startPos, endPos, types);
- }
/*
* if end column is gapped, endPos may be to the right,