JAL-3269 ready for testing embedded interface
[jalview.git] / src / jalview / bin / JalviewAppLoader.java
index 0d911c0..51a0330 100644 (file)
@@ -7,6 +7,7 @@ import jalview.datamodel.Alignment;
 import jalview.datamodel.AlignmentI;
 import jalview.datamodel.AlignmentOrder;
 import jalview.datamodel.ColumnSelection;
+import jalview.datamodel.HiddenColumns;
 import jalview.datamodel.PDBEntry;
 import jalview.datamodel.Sequence;
 import jalview.datamodel.SequenceGroup;
@@ -17,6 +18,7 @@ import jalview.gui.Desktop;
 import jalview.io.AnnotationFile;
 import jalview.io.AppletFormatAdapter;
 import jalview.io.DataSourceType;
+import jalview.io.FeaturesFile;
 import jalview.io.FileFormat;
 import jalview.io.FileFormatI;
 import jalview.io.FileFormats;
@@ -24,6 +26,7 @@ import jalview.io.IdentifyFile;
 import jalview.io.JPredFile;
 import jalview.io.JnetAnnotationMaker;
 import jalview.io.NewickFile;
+import jalview.structure.SelectionSource;
 import jalview.structure.StructureSelectionManager;
 import jalview.util.HttpUtils;
 import jalview.util.MessageManager;
@@ -1228,7 +1231,7 @@ public class JalviewAppLoader
     {
       order[i] = alorder.getSequenceAt(i).getName();
     }
-    return arrayToSeparatorList(order);
+    return arrayToSeparatorList(order, sep);
   }
 
   public String getSelectedSequencesAsAlignmentFrom(AlignFrameI alf,
@@ -1335,4 +1338,146 @@ public class JalviewAppLoader
     }
   }
 
+  public void loadAnnotationFrom(AlignFrameI alf, String annotation)
+  {
+    if (new AnnotationFile().annotateAlignmentView(
+            ((AlignFrame) alf).getViewport(), annotation,
+            DataSourceType.PASTE))
+    {
+      ((AlignFrame) alf).alignPanel.fontChanged();
+      ((AlignFrame) alf).alignPanel.setScrollValues(0, 0);
+    }
+    else
+    {
+      ((AlignFrame) alf).parseFeaturesFile(annotation,
+              DataSourceType.PASTE);
+    }
+  }
+
+  public boolean loadFeaturesFrom(AlignFrameI alf, String features,
+          boolean autoenabledisplay)
+  {
+    boolean ret = ((AlignFrame) alf).parseFeaturesFile(features,
+            DataSourceType.PASTE);
+    if (!ret)
+    {
+      return false;
+    }
+    if (autoenabledisplay)
+    {
+      ((AlignFrame) alf).getViewport().setShowSequenceFeatures(true);
+      // this next was for a checkbox in JalviewLite
+      // ((AlignFrame) alf).getViewport().sequenceFeatures.setState(true);
+    }
+    return true;
+  }
+
+  public String getFeaturesFrom(AlignFrameI alf, String format)
+  {
+    AlignFrame f = ((AlignFrame) alf);
+
+    String features;
+    FeaturesFile formatter = new FeaturesFile();
+    if (format.equalsIgnoreCase("Jalview"))
+    {
+      features = formatter.printJalviewFormat(
+              f.getViewport().getAlignment().getSequencesArray(),
+              f.alignPanel.getFeatureRenderer(), true);
+    }
+    else
+    {
+      features = formatter.printGffFormat(
+              f.getViewport().getAlignment().getSequencesArray(),
+              f.alignPanel.getFeatureRenderer(), true);
+    }
+
+    if (features == null)
+    {
+      features = "";
+    }
+    return features;
+
+  }
+
+  public String getAnnotationFrom(AlignFrameI alf)
+  {
+    AlignFrame f = (AlignFrame) alf;
+    String annotation = new AnnotationFile()
+            .printAnnotationsForView(f.getViewport());
+    return annotation;
+  }
+
+  public AlignFrameI newViewFrom(AlignFrameI alf, String name)
+  {
+    return (AlignFrameI) ((AlignFrame) alf).newView(name, true);
+  }
+
+  public String[] separatorListToArray(String list)
+  {
+    return separatorListToArray(list, separator);
+  }
+
+  public Object[] getSelectionForListener(AlignFrameI currentFrame,
+          SequenceGroup seqsel, ColumnSelection colsel,
+          HiddenColumns hidden, SelectionSource source, Object alignFrame)
+  {
+    // System.err.println("Testing selection event relay to
+    // jsfunction:"+_listener);
+    String setid = "";
+    AlignFrame src = (AlignFrame) alignFrame;
+    if (source != null)
+    {
+      if (source instanceof AlignViewport
+              && ((AlignFrame) currentFrame).getViewport() == source)
+      {
+        // should be valid if it just generated an event!
+        src = (AlignFrame) currentFrame;
+
+      }
+    }
+    String[] seqs = new String[] {};
+    String[] cols = new String[] {};
+    int strt = 0, end = (src == null) ? -1
+            : src.alignPanel.av.getAlignment().getWidth();
+    if (seqsel != null && seqsel.getSize() > 0)
+    {
+      seqs = new String[seqsel.getSize()];
+      for (int i = 0; i < seqs.length; i++)
+      {
+        seqs[i] = seqsel.getSequenceAt(i).getName();
+      }
+      if (strt < seqsel.getStartRes())
+      {
+        strt = seqsel.getStartRes();
+      }
+      if (end == -1 || end > seqsel.getEndRes())
+      {
+        end = seqsel.getEndRes();
+      }
+    }
+    if (colsel != null && !colsel.isEmpty())
+    {
+      if (end == -1)
+      {
+        end = colsel.getMax() + 1;
+      }
+      cols = new String[colsel.getSelected().size()];
+      for (int i = 0; i < cols.length; i++)
+      {
+        cols[i] = "" + (1 + colsel.getSelected().get(i).intValue());
+      }
+    }
+    else
+    {
+      if (seqsel != null && seqsel.getSize() > 0)
+      {
+        // send a valid range, otherwise we send the empty selection
+        cols = new String[2];
+        cols[0] = "" + (1 + strt) + "-" + (1 + end);
+      }
+    }
+    return new Object[] { src, setid, arrayToSeparatorList(seqs),
+        arrayToSeparatorList(cols) };
+  }
+
 }
\ No newline at end of file