/* * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.2b1) * 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 . * The Jalview Authors are detailed in the 'AUTHORS' file. */ package jalview.appletgui; import jalview.datamodel.Alignment; import jalview.datamodel.PDBEntry; import jalview.datamodel.Sequence; import jalview.io.AnnotationFile; import jalview.io.AppletFormatAdapter; import jalview.io.IdentifyFile; import jalview.io.TCoffeeScoreFile; import jalview.schemes.TCoffeeColourScheme; import jalview.util.MessageManager; import java.awt.BorderLayout; import java.awt.Button; import java.awt.Dialog; import java.awt.Font; import java.awt.Frame; import java.awt.Panel; import java.awt.TextArea; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; 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().annotateAlignmentView(alignFrame.viewport, 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) { } }