JAL-4028 experiment - THISISAPLACEHOLDER sequences get additional sequence data ...
[jalview.git] / src / jalview / datamodel / SequenceDummy.java
index 172c25f..af8ba3e 100644 (file)
@@ -20,6 +20,8 @@
  */
 package jalview.datamodel;
 
+import org.apache.logging.log4j.util.Strings;
+
 public class SequenceDummy extends Sequence
 {
   public SequenceDummy(String sequenceId)
@@ -60,4 +62,71 @@ public class SequenceDummy extends Sequence
     // required for correct behaviour of SequenceIdMatcher
     return super.getDisplayId(false);
   }
+
+  @Override
+  public int getStart()
+  {
+    return super.getStart();
+  }
+
+  @Override
+  public int getEnd()
+  {
+    if (datasetSequence == null && dummy && getFeatures() != null
+            && getFeatures().hasFeatures())
+    {
+      return getFeatures().getFeatureExtent().get(1);
+    }
+    return super.getEnd();
+  }
+
+  @Override
+  public char[] getSequence()
+  {
+    checkSeqData();
+    return super.getSequence();
+  }
+
+  @Override
+  public String getSequenceAsString(int start, int end)
+  {
+    checkSeqData();
+    return super.getSequenceAsString(start, end);
+  }
+
+  private void checkSeqData()
+  {
+    // materialise a dummy sequence of the correct length
+    if (datasetSequence == null && dummy && getFeatures() != null
+            && getFeatures().hasFeatures())
+    {
+      int endS = getEnd();
+      char[] sq = super.getSequence();
+      if (endS > sq.length)
+      {
+        setSequence(
+                String.valueOf(sq) + Strings.repeat("X", endS - sq.length));
+      }
+    }
+  }
+
+  @Override
+  public String getSequenceAsString()
+  {
+    checkSeqData();
+    return super.getSequenceAsString();
+  }
+
+  @Override
+  public SequenceI createDatasetSequence()
+  {
+    if (dummy && datasetSequence == null)
+    {
+      checkSeqData();
+      datasetSequence = new SequenceDummy(this.getName());
+      super.updateDatasetFrom((Sequence) datasetSequence, this);
+      super.setEnd(datasetSequence.getEnd());
+    }
+    return super.createDatasetSequence();
+  }
 }