package fr.orsay.lri.varna; /* VARNA is a tool for the automated drawing, visualization and annotation of the secondary structure of RNA, designed as a companion software for web servers and databases. Copyright (C) 2008 Kevin Darty, Alain Denise and Yann Ponty. electronic mail : Yann.Ponty@lri.fr paper mail : LRI, bat 490 Université Paris-Sud 91405 Orsay Cedex France This file is part of VARNA version 3.1. VARNA version 3.1 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. VARNA version 3.1 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 VARNA version 3.1. If not, see http://www.gnu.org/licenses. */ import java.awt.Component; import java.awt.GridLayout; import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.Transferable; import java.awt.dnd.DnDConstants; import java.awt.dnd.DropTarget; import java.awt.dnd.DropTargetDragEvent; import java.awt.dnd.DropTargetDropEvent; import java.awt.dnd.DropTargetEvent; import java.awt.dnd.DropTargetListener; import java.io.File; import java.io.FileReader; import java.io.IOException; import java.util.ArrayList; import java.util.List; import javax.swing.JApplet; import javax.swing.JOptionPane; import fr.orsay.lri.varna.controlers.ControleurScriptParser; import fr.orsay.lri.varna.exceptions.ExceptionFileFormatOrSyntax; import fr.orsay.lri.varna.exceptions.ExceptionLoadingFailed; import fr.orsay.lri.varna.exceptions.ExceptionModeleStyleBaseSyntaxError; import fr.orsay.lri.varna.exceptions.ExceptionNonEqualLength; import fr.orsay.lri.varna.exceptions.ExceptionParameterError; import fr.orsay.lri.varna.interfaces.InterfaceParameterLoader; import fr.orsay.lri.varna.models.VARNAConfigLoader; import fr.orsay.lri.varna.models.rna.RNA; // @j2s issues -- see README_SWINGJS.txt public class VARNA extends JApplet implements InterfaceParameterLoader,DropTargetListener { ArrayList _vpl = null; static{ /** * * @j2sNative * * * if (!thisApplet.__Info.sequenceDBN) { * thisApplet.__Info.sequenceDBN = "GGGGCCAAUAUGGCCAUCC"; * thisApplet.__Info.structureDBN = "((((((.....))))..))"; * thisApplet.__Info.title = "Hello RNA world, from SwingJS!";//prompt("Title?","Hello RNA world!"); * } * * * */ } // private static final_long serialVersionUID = -2598221520127067670L; public VARNA() { super(); } public void init() { try { VARNAConfigLoader VARNAcfg = new VARNAConfigLoader(this); try { _vpl = VARNAcfg.createVARNAPanels(); for (int i=0;i<_vpl.size();i++) { new DropTarget(_vpl.get(i), this); } } catch (IOException e) { JOptionPane.showMessageDialog(this, e.getMessage(), "VARNA Error", JOptionPane.ERROR_MESSAGE); } catch (ExceptionFileFormatOrSyntax e) { JOptionPane.showMessageDialog(this, e.getMessage(), "VARNA Error", JOptionPane.ERROR_MESSAGE); } catch (ExceptionLoadingFailed e) { JOptionPane.showMessageDialog(this, e.getMessage(), "VARNA Error", JOptionPane.ERROR_MESSAGE); } setLayout(new GridLayout(VARNAcfg.getNbColumns(), VARNAcfg .getNbRows())); for (int i = 0; i < _vpl.size(); i++) { getContentPane().add(_vpl.get(i)); } } catch (ExceptionParameterError e) { VARNAPanel.errorDialogStatic(e, this); } catch (ExceptionModeleStyleBaseSyntaxError e) { VARNAPanel.errorDialogStatic(e, this); } catch (ExceptionNonEqualLength e) { VARNAPanel.errorDialogStatic(e, this); } } public void start() { //setVisible(true); //repaint(); //getContentPane().setVisible(true); //getContentPane().repaint(); } public void update() { System.out.println("update"); } public String getParameterValue(String key, String def) { if (getParameter(key) == null) { return def; } else { return getParameter(key); } } public String[][] getParameterInfo() { return VARNAConfigLoader.getParameterInfo(); } public ArrayList getPanels() { return _vpl; } public String getSelection() { return getSelection(0); } public String getSelection(int panel) { String result = "["; VARNAPanel v = _vpl.get(panel); List l = v.getSelectionIndices(); for(int i=0;i0) {result += ",";} result += n; } result += "]"; return result; } public void runScript(String script) { if (_vpl.size()>0) { VARNAPanel _vp = _vpl.get(0); try { ControleurScriptParser.executeScript(_vp, script); } catch (Exception e) { e.printStackTrace(); } } } public void setRNA(String seq, String str) { if (_vpl.size()>0) { try { _vpl.get(0).drawRNA(seq, str); } catch (ExceptionNonEqualLength e) { e.printStackTrace(); } } } public void setSmoothedRNA(String seq, String str) { if (_vpl.size()>0) { try { _vpl.get(0).drawRNAInterpolated(seq, str); _vpl.get(0).repaint(); } catch (ExceptionNonEqualLength e) { // TODO Auto-generated catch block e.printStackTrace(); } } } public void dragEnter(DropTargetDragEvent arg0) { } public void dragExit(DropTargetEvent arg0) { } public void dragOver(DropTargetDragEvent arg0) { } public void drop(DropTargetDropEvent dtde) { try { Transferable tr = dtde.getTransferable(); DataFlavor[] flavors = tr.getTransferDataFlavors(); for (int i = 0; i < flavors.length; i++) { if (flavors[i].isFlavorJavaFileListType()) { dtde.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE); List list = (List) tr.getTransferData(flavors[i]); for (int j = 0; j < list.size(); j++) { Object o = list.get(j); if (dtde.getSource() instanceof DropTarget) { DropTarget dt = (DropTarget) dtde.getSource(); Component c = dt.getComponent(); if (c instanceof VARNAPanel) { VARNAPanel vp = (VARNAPanel) c; // BH -- in JavaScript, the File object has a .bytes // property that we need to maintain. //String path = o.toString(); vp.loadFile((File) o,true); //vp.repaint(); BH unnecessary } } } dtde.dropComplete(true); return; } } dtde.rejectDrop(); } catch (Exception e) { e.printStackTrace(); dtde.rejectDrop(); } } public void dropActionChanged(DropTargetDragEvent arg0) { } }