JAL-1078 - extend applet cut'n'paste features/annotation to support t-coffee file
authorjprocter <jprocter@compbio.dundee.ac.uk>
Wed, 23 May 2012 19:19:17 +0000 (20:19 +0100)
committerjprocter <jprocter@compbio.dundee.ac.uk>
Wed, 23 May 2012 19:20:03 +0000 (20:20 +0100)
JAL-1102 - feedback for successful or unsuccessful parsing of annotation files

src/jalview/appletgui/AlignFrame.java
src/jalview/appletgui/CutAndPasteTransfer.java
src/jalview/bin/JalviewLite.java
src/jalview/javascript/JalviewLiteJsApi.java

index e03f2f4..842f82d 100644 (file)
@@ -236,9 +236,9 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,  ItemLis
    * @param type is protocol for accessing data referred to by file\r
    */\r
 \r
-  public void parseFeaturesFile(String file, String type)\r
+  public boolean parseFeaturesFile(String file, String type)\r
   {\r
-    parseFeaturesFile(file, type, true);\r
+    return parseFeaturesFile(file, type, true);\r
   }\r
   \r
   /**\r
@@ -247,9 +247,12 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,  ItemLis
    * @param file file URL, content, or other resolvable path\r
    * @param type is protocol for accessing data referred to by file\r
    * @param autoenabledisplay when true, display features flag will be automatically enabled if features are loaded\r
+   * @return true if data parsed as a features file\r
    */\r
-  public void parseFeaturesFile(String file, String type, boolean autoenabledisplay)\r
+  public boolean parseFeaturesFile(String file, String type, boolean autoenabledisplay)\r
   {    \r
+    // TODO: test if importing a features file onto an alignment which already has features with links overwrites the original links.\r
+    \r
     Hashtable featureLinks = new Hashtable();\r
     boolean featuresFile = false;\r
     try\r
@@ -279,8 +282,9 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,  ItemLis
         viewport.featureSettings.refreshTable();\r
       }\r
       alignPanel.paintAlignment(true);\r
+      statusBar.setText("Successfully added features to alignment.");\r
     }\r
-\r
+    return featuresFile;\r
   }\r
 \r
   public void keyPressed(KeyEvent evt)\r
@@ -753,9 +757,6 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,  ItemLis
     {\r
       loadAnnotations();\r
     }\r
-    else if( source == loadScores ) {\r
-       loadScores();\r
-    }\r
     else if (source == outputAnnotations)\r
     {\r
       outputAnnotations(true);\r
@@ -1104,7 +1105,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,  ItemLis
   public void loadAnnotations()\r
   {\r
     CutAndPasteTransfer cap = new CutAndPasteTransfer(true, this);\r
-    cap.setText("Paste your features / annotations file here.");\r
+    cap.setText("Paste your features / annotations / T-coffee score file here.");\r
     cap.setAnnotationImport();\r
     Frame frame = new Frame();\r
     frame.add(cap);\r
@@ -1112,11 +1113,6 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,  ItemLis
 \r
   }\r
   \r
-  public void loadScores() {\r
-         //TODO\r
-         \r
-  }\r
-\r
   public String outputAnnotations(boolean displayTextbox)\r
   {\r
     String annotation = new AnnotationFile().printAnnotations(\r
@@ -2288,11 +2284,14 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,  ItemLis
             overview.getPreferredSize().height + 50);\r
 \r
     frame.pack();\r
+    final AlignmentPanel ap=alignPanel;\r
     frame.addWindowListener(new WindowAdapter()\r
     {\r
       public void windowClosing(WindowEvent e)\r
       {\r
-        alignPanel.setOverviewPanel(null);\r
+        if (ap!=null) {\r
+          ap.setOverviewPanel(null);\r
+        }\r
       };\r
     });\r
 \r
@@ -2795,8 +2794,6 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,  ItemLis
 \r
   MenuItem loadAnnotations = new MenuItem("Load Features/Annotations ...");\r
   \r
-  MenuItem loadScores = new MenuItem("Load Associated T-Coffee scores ...");\r
-\r
   MenuItem outputFeatures = new MenuItem("Export Features ...");\r
 \r
   MenuItem outputAnnotations = new MenuItem("Export Annotations ...");\r
@@ -3003,7 +3000,6 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,  ItemLis
 \r
     loadTree.addActionListener(this);\r
     loadAnnotations.addActionListener(this);\r
-    loadScores.addActionListener(this);\r
     outputFeatures.addActionListener(this);\r
     outputAnnotations.addActionListener(this);\r
     selectAllSequenceMenuItem.addActionListener(this);\r
@@ -3221,7 +3217,6 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,  ItemLis
     fileMenu.add(inputText);\r
     fileMenu.add(loadTree);\r
     fileMenu.add(loadAnnotations);\r
-    fileMenu.add(loadScores);\r
     \r
     fileMenu.addSeparator();\r
     fileMenu.add(outputTextboxMenu);\r
index 4a29568..ec31b0a 100755 (executable)
@@ -22,6 +22,7 @@ import java.awt.event.*;
 
 import jalview.datamodel.*;
 import jalview.io.*;
+import jalview.schemes.TCoffeeColourScheme;
 
 public class CutAndPasteTransfer extends Panel implements ActionListener,
         MouseListener
@@ -157,18 +158,57 @@ public class CutAndPasteTransfer extends Panel implements ActionListener,
     }
     else if (annotationImport)
     {
-      if (new AnnotationFile().readAnnotationFile(
-              alignFrame.viewport.getAlignment(), textarea.getText(),
-              jalview.io.AppletFormatAdapter.PASTE))
+      TCoffeeScoreFile tcf = null;
+      try
       {
-        alignFrame.alignPanel.fontChanged();
-        alignFrame.alignPanel.setScrollValues(0, 0);
-
+        tcf = new TCoffeeScoreFile(textarea.getText(),
+                jalview.io.AppletFormatAdapter.PASTE);
+        if (tcf.isValid())
+        {
+          if (tcf.annotateAlignment(alignFrame.viewport.getAlignment(),
+                  true))
+          {
+            alignFrame.tcoffeeColour.setEnabled(true);
+            alignFrame.alignPanel.fontChanged();
+            alignFrame.changeColour(new TCoffeeColourScheme(
+                    alignFrame.viewport.getAlignment()));
+            alignFrame.statusBar
+                    .setText("Successfully pasted T-Coffee scores to alignment.");
+          }
+          else
+          {
+            // file valid but didn't get added to alignment for some reason
+            alignFrame.statusBar.setText("Failed to add T-Coffee scores: "+(tcf.getWarningMessage()!=null ? tcf.getWarningMessage():""));
+          }
+        }
+        else
+        {
+          tcf = null;
+        }
+      } catch (Exception x)
+      {
+        tcf = null;
       }
-      else
+      if (tcf == null)
       {
-        alignFrame.parseFeaturesFile(textarea.getText(),
-                jalview.io.AppletFormatAdapter.PASTE);
+        if (new AnnotationFile().readAnnotationFile(
+                alignFrame.viewport.getAlignment(), textarea.getText(),
+                jalview.io.AppletFormatAdapter.PASTE))
+        {
+          alignFrame.alignPanel.fontChanged();
+          alignFrame.alignPanel.setScrollValues(0, 0);
+          alignFrame.statusBar
+                  .setText("Successfully pasted annotation to alignment.");
+
+        }
+        else
+        {
+          if (!alignFrame.parseFeaturesFile(textarea.getText(),
+                  jalview.io.AppletFormatAdapter.PASTE))
+          {
+            alignFrame.statusBar.setText("Couldn't parse pasted text as a valid annotation, feature, GFF, or T-Coffee score file.");
+          }
+        }
       }
     }
     else if (alignFrame != null)
index 3ae1be6..9c23a0a 100644 (file)
@@ -732,9 +732,9 @@ public class JalviewLite extends Applet implements
    * jalview.bin.JalviewLiteJsApi#loadAnnotationFrom(jalview.appletgui.AlignFrame\r
    * , java.lang.String)\r
    */\r
-  public void loadFeaturesFrom(AlignFrame alf, String features, boolean autoenabledisplay)\r
+  public boolean loadFeaturesFrom(AlignFrame alf, String features, boolean autoenabledisplay)\r
   {\r
-    alf.parseFeaturesFile(features, AppletFormatAdapter.PASTE, autoenabledisplay);\r
+    return alf.parseFeaturesFile(features, AppletFormatAdapter.PASTE, autoenabledisplay);\r
   }\r
 \r
 \r
index de3d29e..f849dc3 100644 (file)
@@ -291,8 +291,9 @@ public interface JalviewLiteJsApi
    * @param alf
    * @param features - gff or features file
    * @param autoenabledisplay - when true, feature display will be enabled if any features can be parsed from the string.
+   * @return true if data parsed as features
    */
-  public abstract void loadFeaturesFrom(AlignFrame alf, String features, boolean autoenabledisplay);
+  public abstract boolean loadFeaturesFrom(AlignFrame alf, String features, boolean autoenabledisplay);
 
   /**
    * get the sequence features in the given format (Jalview or GFF)