JAL-1503 update version in GPL header
[jalview.git] / src / jalview / appletgui / CutAndPasteTransfer.java
old mode 100755 (executable)
new mode 100644 (file)
index 46f3d70..ff05547
-/*\r
- * Jalview - A Sequence Alignment Editor and Viewer\r
- * Copyright (C) 2005 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle\r
- *\r
- * This program is free software; you can redistribute it and/or\r
- * modify it under the terms of the GNU General Public License\r
- * as published by the Free Software Foundation; either version 2\r
- * of the License, or (at your option) any later version.\r
- *\r
- * This program is distributed in the hope that it will be useful,\r
- * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
- * GNU General Public License for more details.\r
- *\r
- * You should have received a copy of the GNU General Public License\r
- * along with this program; if not, write to the Free Software\r
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA\r
- */\r
-\r
-package jalview.appletgui;\r
-\r
-import java.awt.*;\r
-import java.awt.event.*;\r
-\r
-import jalview.datamodel.*;\r
-import jalview.io.*;\r
-import jalview.jbappletgui.*;\r
-\r
-public class CutAndPasteTransfer\r
-    extends GCutAndPasteTransfer\r
-{\r
-  public CutAndPasteTransfer(boolean forImport)\r
-  {\r
-    super();\r
-\r
-    if (!forImport)\r
-    {\r
-      buttonPanel.setVisible(false);\r
-    }\r
-  }\r
-\r
-  public String getText()\r
-  {\r
-    return textarea.getText();\r
-  }\r
-\r
-  public void setText(String text)\r
-  {\r
-    textarea.setText(text);\r
-  }\r
-\r
-  protected void ok_actionPerformed(ActionEvent e)\r
-  {\r
-    String text = getText();\r
-    int length = text.length();\r
-    textarea.append("\n");\r
-    if(textarea.getText().length()==length)\r
-    {\r
-      String warning = "\n\n#################################################\n"\r
-          +"WARNING!! THIS IS THE MAXIMUM SIZE OF TEXTAREA!!\n"\r
-          +"\nCAN'T INPUT FULL ALIGNMENT"\r
-          +"\n\nYOU MUST DELETE THIS WARNING TO CONTINUE"\r
-          +"\n\nMAKE SURE LAST SEQUENCE PASTED IS COMPLETE"\r
-          +"\n#################################################\n";\r
-      textarea.setText(text.substring(0, text.length()-warning.length())\r
-          +warning);\r
-\r
-      textarea.setCaretPosition(text.length());\r
-      return;\r
-    }\r
-\r
-    SequenceI[] sequences = null;\r
-\r
-    String format = IdentifyFile.Identify(text, "Paste");\r
-    sequences = FormatAdapter.readFile(text, "Paste", format);\r
-\r
-    if (sequences != null)\r
-    {\r
-      AlignFrame af = new AlignFrame(new Alignment(sequences));\r
-      jalview.bin.JalviewLite.addFrame(af, "Cut & Paste input - " + format,\r
-                                       AlignFrame.NEW_WINDOW_WIDTH,\r
-                                       AlignFrame.NEW_WINDOW_HEIGHT);\r
-      af.statusBar.setText("Successfully pasted alignment file");\r
-    }\r
-\r
-    Frame frame = (Frame)this.getParent();\r
-    frame.setVisible(false);\r
-  }\r
-\r
-  protected void cancel_actionPerformed(ActionEvent e)\r
-  {\r
-    Frame frame = (Frame)this.getParent();\r
-    frame.setVisible(false);\r
-  }\r
-\r
-}\r
+/*
+ * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.1)
+ * Copyright (C) 2014 The Jalview Authors
+ * 
+ * This file is part of Jalview.
+ * 
+ * Jalview is free software: you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License 
+ * as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+ *  
+ * Jalview is distributed in the hope that it will be useful, but 
+ * WITHOUT ANY WARRANTY; without even the implied warranty 
+ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
+ * PURPOSE.  See the GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License along with Jalview.  If not, see <http://www.gnu.org/licenses/>.
+ * The Jalview Authors are detailed in the 'AUTHORS' file.
+ */
+package jalview.appletgui;
+
+import java.awt.*;
+import java.awt.event.*;
+
+import jalview.datamodel.*;
+import jalview.io.*;
+import jalview.schemes.TCoffeeColourScheme;
+import jalview.util.MessageManager;
+
+public class CutAndPasteTransfer extends Panel implements ActionListener,
+        MouseListener
+{
+  boolean pdbImport = false;
+
+  boolean treeImport = false;
+
+  boolean annotationImport = false;
+
+  Sequence seq;
+
+  AlignFrame alignFrame;
+
+  public CutAndPasteTransfer(boolean forImport, AlignFrame alignFrame)
+  {
+    try
+    {
+      jbInit();
+    } catch (Exception e)
+    {
+      e.printStackTrace();
+    }
+
+    this.alignFrame = alignFrame;
+
+    if (!forImport)
+    {
+      buttonPanel.setVisible(false);
+    }
+  }
+
+  public String getText()
+  {
+    return textarea.getText();
+  }
+
+  public void setText(String text)
+  {
+    textarea.setText(text);
+  }
+
+  public void setPDBImport(Sequence seq)
+  {
+    this.seq = seq;
+    accept.setLabel(MessageManager.getString("action.accept"));
+    addSequences.setVisible(false);
+    pdbImport = true;
+  }
+
+  public void setTreeImport()
+  {
+    treeImport = true;
+    accept.setLabel(MessageManager.getString("action.accept"));
+    addSequences.setVisible(false);
+  }
+
+  public void setAnnotationImport()
+  {
+    annotationImport = true;
+    accept.setLabel(MessageManager.getString("action.accept"));
+    addSequences.setVisible(false);
+  }
+
+  public void actionPerformed(ActionEvent evt)
+  {
+    if (evt.getSource() == accept)
+    {
+      ok(true);
+    }
+    else if (evt.getSource() == addSequences)
+    {
+      ok(false);
+    }
+    else if (evt.getSource() == cancel)
+    {
+      cancel();
+    }
+  }
+
+  protected void ok(boolean newWindow)
+  {
+    String text = getText();
+    int length = text.length();
+    textarea.append("\n");
+    if (textarea.getText().length() == length)
+    {
+      String warning = "\n\n#################################################\n"
+              + "WARNING!! THIS IS THE MAXIMUM SIZE OF TEXTAREA!!\n"
+              + "\nCAN'T INPUT FULL ALIGNMENT"
+              + "\n\nYOU MUST DELETE THIS WARNING TO CONTINUE"
+              + "\n\nMAKE SURE LAST SEQUENCE PASTED IS COMPLETE"
+              + "\n#################################################\n";
+      textarea.setText(text.substring(0, text.length() - warning.length())
+              + warning);
+
+      textarea.setCaretPosition(text.length());
+    }
+
+    if (pdbImport)
+    {
+      PDBEntry pdb = new PDBEntry();
+      pdb.setFile(text);
+
+      if (alignFrame.alignPanel.av.applet.jmolAvailable)
+        new jalview.appletgui.AppletJmol(pdb, new Sequence[]
+        { seq }, null, alignFrame.alignPanel, AppletFormatAdapter.PASTE);
+      else
+
+        new MCview.AppletPDBViewer(pdb, new Sequence[]
+        { seq }, null, alignFrame.alignPanel, AppletFormatAdapter.PASTE);
+
+    }
+    else if (treeImport)
+    {
+      try
+      {
+        jalview.io.NewickFile fin = new jalview.io.NewickFile(
+                textarea.getText(), "Paste");
+
+        fin.parse();
+        if (fin.getTree() != null)
+        {
+          alignFrame.loadTree(fin, "Pasted tree file");
+        }
+
+      } catch (Exception ex)
+      {
+        // TODO: JAL-1102 - should have a warning message in dialog, not simply
+        // overwrite the broken input data with the exception
+        textarea.setText(MessageManager.formatMessage("label.could_not_parse_newick_file", new String[]{ex.getMessage()}));
+        return;
+      }
+    }
+    else if (annotationImport)
+    {
+      TCoffeeScoreFile tcf = null;
+      try
+      {
+        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(MessageManager.getString("label.successfully_pasted_tcoffee_scores_to_alignment"));
+          }
+          else
+          {
+            // file valid but didn't get added to alignment for some reason
+            alignFrame.statusBar.setText(MessageManager.formatMessage("label.failed_add_tcoffee_scores", new String[]{(tcf.getWarningMessage() != null ? tcf.getWarningMessage() : "")}));
+          }
+        }
+        else
+        {
+          tcf = null;
+        }
+      } catch (Exception x)
+      {
+        tcf = null;
+      }
+      if (tcf == null)
+      {
+        if (new AnnotationFile().readAnnotationFile(
+                alignFrame.viewport.getAlignment(), textarea.getText(),
+                jalview.io.AppletFormatAdapter.PASTE))
+        {
+          alignFrame.alignPanel.fontChanged();
+          alignFrame.alignPanel.setScrollValues(0, 0);
+          alignFrame.statusBar
+                  .setText(MessageManager.getString("label.successfully_pasted_annotation_to_alignment"));
+
+        }
+        else
+        {
+          if (!alignFrame.parseFeaturesFile(textarea.getText(),
+                  jalview.io.AppletFormatAdapter.PASTE))
+          {
+            alignFrame.statusBar
+                    .setText(MessageManager.getString("label.couldnt_parse_pasted_text_as_valid_annotation_feature_GFF_tcoffee_file"));
+          }
+        }
+      }
+    }
+    else if (alignFrame != null)
+    {
+      Alignment al = null;
+
+      String format = new IdentifyFile().Identify(text,
+              AppletFormatAdapter.PASTE);
+      try
+      {
+        al = new AppletFormatAdapter().readFile(text,
+                AppletFormatAdapter.PASTE, format);
+      } catch (java.io.IOException ex)
+      {
+        ex.printStackTrace();
+      }
+
+      if (al != null)
+      {
+        if (newWindow)
+        {
+          AlignFrame af = new AlignFrame(al, alignFrame.viewport.applet,
+                  "Cut & Paste input - " + format, false);
+          af.statusBar.setText(MessageManager.getString("label.successfully_pasted_annotation_to_alignment"));
+        }
+        else
+        {
+          alignFrame.addSequences(al.getSequencesArray());
+          alignFrame.statusBar
+                  .setText(MessageManager.getString("label.successfully_pasted_alignment_file"));
+        }
+      }
+    }
+    // TODO: dialog should indicate if data was parsed correctly or not - see
+    // JAL-1102
+    if (this.getParent() instanceof Frame)
+    {
+      ((Frame) this.getParent()).setVisible(false);
+    }
+    else
+    {
+      ((Dialog) this.getParent()).setVisible(false);
+    }
+  }
+
+  protected void cancel()
+  {
+    textarea.setText("");
+    if (this.getParent() instanceof Frame)
+    {
+      ((Frame) this.getParent()).setVisible(false);
+    }
+    else
+    {
+      ((Dialog) this.getParent()).setVisible(false);
+    }
+  }
+
+  protected TextArea textarea = new TextArea();
+
+  Button accept = new Button("New Window");
+
+  Button addSequences = new Button("Add to Current Alignment");
+
+  Button cancel = new Button("Close");
+
+  protected Panel buttonPanel = new Panel();
+
+  BorderLayout borderLayout1 = new BorderLayout();
+
+  private void jbInit() throws Exception
+  {
+    textarea.setFont(new java.awt.Font("Monospaced", Font.PLAIN, 10));
+    textarea.setText(MessageManager.getString("label.paste_your_alignment_file"));
+    textarea.addMouseListener(this);
+    this.setLayout(borderLayout1);
+    accept.addActionListener(this);
+    addSequences.addActionListener(this);
+    cancel.addActionListener(this);
+    this.add(buttonPanel, BorderLayout.SOUTH);
+    buttonPanel.add(accept, null);
+    buttonPanel.add(addSequences);
+    buttonPanel.add(cancel, null);
+    this.add(textarea, java.awt.BorderLayout.CENTER);
+  }
+
+  public void mousePressed(MouseEvent evt)
+  {
+    if (textarea.getText().startsWith(MessageManager.getString("label.paste_your")))
+    {
+      textarea.setText("");
+    }
+  }
+
+  public void mouseReleased(MouseEvent evt)
+  {
+  }
+
+  public void mouseClicked(MouseEvent evt)
+  {
+  }
+
+  public void mouseEntered(MouseEvent evt)
+  {
+  }
+
+  public void mouseExited(MouseEvent evt)
+  {
+  }
+}