diff --git a/uk/ac/sanger/artemis/components/ActMain.java b/uk/ac/sanger/artemis/components/ActMain.java index 6466c63a1a9ac3549fb3312761bff9f96372524d..24cc2a37a382d726dccb75919f1f9fd1735e73e3 100644 --- a/uk/ac/sanger/artemis/components/ActMain.java +++ b/uk/ac/sanger/artemis/components/ActMain.java @@ -20,7 +20,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - * $Header: //tmp/pathsoft/artemis/uk/ac/sanger/artemis/components/ActMain.java,v 1.9 2006-03-02 15:58:46 tjc Exp $ + * $Header: //tmp/pathsoft/artemis/uk/ac/sanger/artemis/components/ActMain.java,v 1.10 2006-10-18 14:25:23 tjc Exp $ */ package uk.ac.sanger.artemis.components; @@ -29,9 +29,13 @@ import uk.ac.sanger.artemis.components.filetree.FileManager; import uk.ac.sanger.artemis.components.filetree.LocalAndRemoteFileManager; import uk.ac.sanger.artemis.*; import uk.ac.sanger.artemis.sequence.Bases; -import uk.ac.sanger.artemis.components.filetree.FileManager; +import uk.ac.sanger.artemis.sequence.NoSequenceException; +import uk.ac.sanger.artemis.components.database.DatabaseEntrySource; +import uk.ac.sanger.artemis.components.database.DatabaseJFrame; +import uk.ac.sanger.artemis.components.database.DatabaseTreeNode; import uk.ac.sanger.artemis.util.*; +import uk.ac.sanger.artemis.io.DatabaseDocumentEntry; import uk.ac.sanger.artemis.io.EntryInformation; import uk.ac.sanger.artemis.io.SimpleEntryInformation; @@ -44,7 +48,7 @@ import javax.swing.JFrame; * The main window for the Artemis Comparison Tool. * * @author Kim Rutherford <kmr@sanger.ac.uk> - * @version $Id: ActMain.java,v 1.9 2006-03-02 15:58:46 tjc Exp $ + * @version $Id: ActMain.java,v 1.10 2006-10-18 14:25:23 tjc Exp $ **/ public class ActMain extends Splash @@ -94,6 +98,24 @@ public class ActMain extends Splash }; makeMenuItem(file_menu, "Open SSH File Manager ...", menu_listener_ssh); + final boolean sanger_options = + Options.getOptions().getPropertyTruthValue("sanger_options"); + + if(sanger_options) + { + ActionListener menu_listener = new ActionListener() + { + public void actionPerformed(ActionEvent event) + { + launchDatabaseJFrame(true); + } + }; + + makeMenuItem(file_menu, "Database Entry ...", menu_listener); + if(System.getProperty("chado") != null) + launchDatabaseJFrame(false); + } + makeMenuItem(file_menu, "Quit", quit_listener); } @@ -110,7 +132,7 @@ public class ActMain extends Splash **/ public static boolean makeMultiComparator(final JFrame frame, final InputStreamProgressListener progress_listener, - final String[] file_names) + final Object[] file_names) { final ProgressThread progress_thread = new ProgressThread(null, @@ -132,8 +154,8 @@ public class ActMain extends Splash final EntryInformation entry_information = new SimpleEntryInformation(Options.getArtemisEntryInformation()); - final String this_file_name = file_names[i]; - File this_file = new File(this_file_name); + final Object this_file_name = file_names[i]; + //File this_file = new File(this_file_name); try { @@ -158,7 +180,7 @@ public class ActMain extends Splash { for(int i = 1 ; i < file_names.length ; i += 2) { - final String comparison_data_file_name = file_names[i]; + final String comparison_data_file_name = (String)file_names[i]; final Document comparison_data_document = DocumentFactory.makeDocument(comparison_data_file_name); @@ -213,21 +235,52 @@ public class ActMain extends Splash progress_thread.finished(); } - private boolean openEntry(String this_file_name, EntryGroup[] entry_group_array, + private boolean openEntry(Object this_file_name, EntryGroup[] entry_group_array, final EntryInformation entry_information, int i) throws OutOfRangeException { - final Document entry_document = - DocumentFactory.makeDocument(this_file_name); + uk.ac.sanger.artemis.io.Entry embl_entry = null; + + // test if this is a database entry rather than a file + if(this_file_name instanceof DatabaseTreeNode) + { + DatabaseTreeNode dbNode = (DatabaseTreeNode)this_file_name; + DatabaseEntrySource entry_source = dbNode.getEntrySource(); + + try + { + Entry entry = entry_source.getEntry(dbNode.getFeatureId(), + dbNode.getSchema(), + progress_listener); + embl_entry = (DatabaseDocumentEntry)entry.getEMBLEntry(); + } + catch(NoSequenceException e) + { + e.printStackTrace(); + } + catch(IOException e) + { + e.printStackTrace(); + } + + DatabaseDocument doc = + (DatabaseDocument)((DatabaseDocumentEntry)embl_entry).getDocument(); + doc.setName((String)dbNode.getUserObject()); + } + else + { + final Document entry_document = + DocumentFactory.makeDocument((String)this_file_name); - if(progress_listener != null) - entry_document.addInputStreamProgressListener(progress_listener); + if(progress_listener != null) + entry_document.addInputStreamProgressListener(progress_listener); - final uk.ac.sanger.artemis.io.Entry embl_entry = - EntryFileDialog.getEntryFromFile(frame, entry_document, + embl_entry = + EntryFileDialog.getEntryFromFile(frame, entry_document, entry_information, false); - + } + // getEntryFromFile() has alerted the user so we just need to quit if(embl_entry == null) return false; @@ -238,7 +291,7 @@ public class ActMain extends Splash if(sequence == null) { new MessageDialog(frame, "This file contains no sequence: " + - this_file_name); + (String)this_file_name); return false; } @@ -272,6 +325,32 @@ public class ActMain extends Splash new ComparatorDialog(this).setVisible(true); } + /** + * + * Launch database manager window + * + */ + private void launchDatabaseJFrame(final boolean prompt_user) + { + SwingWorker entryWorker = new SwingWorker() + { + public Object construct() + { + getStatusLabel().setText("Connecting ..."); + DatabaseEntrySource entry_source = new DatabaseEntrySource(); + if(!entry_source.setLocation(prompt_user)) + return null; + + final DatabaseJFrame frame = new DatabaseJFrame(entry_source, + ActMain.this); + frame.setVisible(true); + getStatusLabel().setText(""); + return null; + } + }; + entryWorker.start(); + } + /** * Exit from ACT. **/ diff --git a/uk/ac/sanger/artemis/components/ArtemisMain.java b/uk/ac/sanger/artemis/components/ArtemisMain.java index b987acad4b12ce89252e7a97e514d3dafce3ad5d..de4d9054851efaa66c3fe8bc5924f445bc6a549a 100644 --- a/uk/ac/sanger/artemis/components/ArtemisMain.java +++ b/uk/ac/sanger/artemis/components/ArtemisMain.java @@ -20,11 +20,13 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - * $Header: //tmp/pathsoft/artemis/uk/ac/sanger/artemis/components/ArtemisMain.java,v 1.20 2006-01-04 14:25:09 tjc Exp $ + * $Header: //tmp/pathsoft/artemis/uk/ac/sanger/artemis/components/ArtemisMain.java,v 1.21 2006-10-18 14:25:23 tjc Exp $ */ package uk.ac.sanger.artemis.components; +import uk.ac.sanger.artemis.components.database.DatabaseEntrySource; +import uk.ac.sanger.artemis.components.database.DatabaseJFrame; import uk.ac.sanger.artemis.components.filetree.FileManager; import uk.ac.sanger.artemis.components.filetree.LocalAndRemoteFileManager; import uk.ac.sanger.artemis.*; @@ -48,7 +50,7 @@ import java.awt.datatransfer.*; * The main window for the Artemis sequence editor. * * @author Kim Rutherford <kmr@sanger.ac.uk> - * @version $Id: ArtemisMain.java,v 1.20 2006-01-04 14:25:09 tjc Exp $ + * @version $Id: ArtemisMain.java,v 1.21 2006-10-18 14:25:23 tjc Exp $ **/ public class ArtemisMain extends Splash @@ -602,7 +604,7 @@ public class ArtemisMain extends Splash /** * Make an EntryEdit component from the given Entry. **/ - protected EntryEdit makeEntryEdit(final Entry entry) + public static EntryEdit makeEntryEdit(final Entry entry) { final Bases bases = entry.getBases(); final EntryGroup entry_group = new SimpleEntryGroup(bases); diff --git a/uk/ac/sanger/artemis/components/ComparatorDialog.java b/uk/ac/sanger/artemis/components/ComparatorDialog.java index 2cc7ff5fd8b1477e8427d7a86bf238f43b73f66a..f922309d72570ccf6eafcb172512daa701030fd9 100644 --- a/uk/ac/sanger/artemis/components/ComparatorDialog.java +++ b/uk/ac/sanger/artemis/components/ComparatorDialog.java @@ -20,7 +20,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - * $Header: //tmp/pathsoft/artemis/uk/ac/sanger/artemis/components/ComparatorDialog.java,v 1.2 2006-10-18 11:25:12 tjc Exp $ + * $Header: //tmp/pathsoft/artemis/uk/ac/sanger/artemis/components/ComparatorDialog.java,v 1.3 2006-10-18 14:25:23 tjc Exp $ */ package uk.ac.sanger.artemis.components; @@ -41,7 +41,7 @@ import javax.swing.*; * compare with a Comparator component and a file containing comparison data. * * @author Kim Rutherford <kmr@sanger.ac.uk> - * @version $Id: ComparatorDialog.java,v 1.2 2006-10-18 11:25:12 tjc Exp $ + * @version $Id: ComparatorDialog.java,v 1.3 2006-10-18 14:25:23 tjc Exp $ **/ public class ComparatorDialog extends JFrame @@ -272,14 +272,18 @@ public class ComparatorDialog extends JFrame throw new Error("internal error - not enough file names given to " + "ComparatorDialog.doApply()"); - String [] file_names = new String [text_field_vector.size()]; + Object[] file_names = new Object[text_field_vector.size()]; for(int i = 0; i < text_field_vector.size(); ++i) { - file_names[i] = - ((JTextField) text_field_vector.elementAt(i)).getText().trim(); - - if(file_names[i].length() == 0) + TextFieldSink tfield = (TextFieldSink)text_field_vector.elementAt(i); + + if(tfield.getDbNode() != null) + file_names[i] = tfield.getDbNode(); + else + file_names[i] = tfield.getText().trim(); + + if(file_names[i] instanceof String && ((String)file_names[i]).length() == 0) { // ignore the problem if there are at least 3 files listed(ie. seq1 // comp1v2 seq2) and the remaining files lengths are zero diff --git a/uk/ac/sanger/artemis/components/TextFieldSink.java b/uk/ac/sanger/artemis/components/TextFieldSink.java index 61ba9d4b842d0f5b4a509e0a9b06a5e10cdbf473..9ee96dbf2a85d1b8b63860c0898c904cea755bda 100644 --- a/uk/ac/sanger/artemis/components/TextFieldSink.java +++ b/uk/ac/sanger/artemis/components/TextFieldSink.java @@ -22,10 +22,13 @@ package uk.ac.sanger.artemis.components; import java.awt.datatransfer.*; + import javax.swing.*; -import javax.swing.event.*; import java.awt.event.*; import javax.swing.border.*; + +import uk.ac.sanger.artemis.components.database.DatabaseTreeNode; + import java.awt.dnd.*; import java.awt.*; import java.io.*; @@ -38,6 +41,7 @@ import java.io.*; */ public class TextFieldSink extends JTextField implements DropTargetListener { + private DatabaseTreeNode dbNode = null; public TextFieldSink(String text, int columns) { @@ -94,7 +98,8 @@ public class TextFieldSink extends JTextField implements DropTargetListener public void dragEnter(DropTargetDragEvent e) { - if(e.isDataFlavorSupported(DataFlavor.stringFlavor)) + if(e.isDataFlavorSupported(DataFlavor.stringFlavor) || + e.isDataFlavorSupported(DatabaseTreeNode.DATABASETREENODE)) { e.acceptDrag(DnDConstants.ACTION_COPY_OR_MOVE); this.setBorder(dropBorder); @@ -110,7 +115,31 @@ public class TextFieldSink extends JTextField implements DropTargetListener { this.setBorder(endBorder); Transferable t = e.getTransferable(); - if(t.isDataFlavorSupported(DataFlavor.stringFlavor)) + + if(t.isDataFlavorSupported(DatabaseTreeNode.DATABASETREENODE)) + { + try + { + setCursor(new Cursor(Cursor.WAIT_CURSOR)); + dbNode = + (DatabaseTreeNode)t.getTransferData(DatabaseTreeNode.DATABASETREENODE); + this.replaceSelection(dbNode.getSchema()+":featureId="+dbNode.getFeatureId()); + + e.dropComplete(true); + setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); + } + catch(UnsupportedFlavorException e1) + { + // TODO Auto-generated catch block + e1.printStackTrace(); + } + catch(IOException e1) + { + // TODO Auto-generated catch block + e1.printStackTrace(); + } + } + else if(t.isDataFlavorSupported(DataFlavor.stringFlavor)) { e.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE); try @@ -131,10 +160,16 @@ public class TextFieldSink extends JTextField implements DropTargetListener public void dragOver(DropTargetDragEvent e) { - if(e.isDataFlavorSupported(DataFlavor.stringFlavor)) + if(e.isDataFlavorSupported(DataFlavor.stringFlavor) || + e.isDataFlavorSupported(DatabaseTreeNode.DATABASETREENODE)) e.acceptDrag(DnDConstants.ACTION_COPY_OR_MOVE); } public void dropActionChanged(DropTargetDragEvent e) {} + + public DatabaseTreeNode getDbNode() + { + return dbNode; + } } diff --git a/uk/ac/sanger/artemis/components/DatabaseEntrySource.java b/uk/ac/sanger/artemis/components/database/DatabaseEntrySource.java similarity index 81% rename from uk/ac/sanger/artemis/components/DatabaseEntrySource.java rename to uk/ac/sanger/artemis/components/database/DatabaseEntrySource.java index 5c308bf321da3984f7780024431b898006d563b9..90b17acddcadff4b4eff2c31f87fbdb1377745b3 100644 --- a/uk/ac/sanger/artemis/components/DatabaseEntrySource.java +++ b/uk/ac/sanger/artemis/components/database/DatabaseEntrySource.java @@ -22,12 +22,9 @@ * */ -package uk.ac.sanger.artemis.components; +package uk.ac.sanger.artemis.components.database; import javax.swing.*; -import javax.swing.tree.DefaultMutableTreeNode; -import javax.swing.tree.TreeSelectionModel; -import javax.swing.tree.TreePath; import java.awt.Container; import java.awt.GridLayout; import java.io.*; @@ -48,7 +45,7 @@ import uk.ac.sanger.artemis.io.EntryInformationException; * This is an EntrySource that reads Entry objects from a relational database. * */ -public class DatabaseEntrySource implements EntrySource +public class DatabaseEntrySource implements EntrySource, Serializable { private String location; @@ -206,13 +203,6 @@ public class DatabaseEntrySource implements EntrySource return true; } - /** - * Given the entry name get the seq feature_id - */ - protected String getEntryID(String name) - { - return (String)entries.get(name); - } /** * Create database organism JTree. @@ -238,58 +228,13 @@ public class DatabaseEntrySource implements EntrySource } } - DefaultMutableTreeNode top = new DefaultMutableTreeNode(""); + DatabaseTreeNode top = new DatabaseTreeNode("", DatabaseEntrySource.this); createNodes(top, doc.getSchema(), entries); - final JTree tree = new JTree(top); - tree.getSelectionModel().setSelectionMode( - TreeSelectionModel.SINGLE_TREE_SELECTION); - + final DatabaseJTree tree = new DatabaseJTree(top); + return tree; } - /** - * Get DefaultMutableTreeNode of selected node. - * @param tree the <code>Jtree</code> component - * @return node that is currently selected - */ - protected String getSelectedNode(JTree tree) - { - TreePath path = tree.getLeadSelectionPath(); - if (path == null) - return null; - - DefaultMutableTreeNode seq_node = - (DefaultMutableTreeNode)path.getLastPathComponent(); - DefaultMutableTreeNode type_node = - (DefaultMutableTreeNode)seq_node.getParent(); - DefaultMutableTreeNode schema_node = - (DefaultMutableTreeNode)type_node.getParent(); - - return (String)schema_node.getUserObject() + " - " + - (String)type_node.getUserObject() + " - " + - (String)seq_node.getUserObject(); - } - - /** - * Get schema of the selected node - * @param tree the <code>Jtree</code> component - * @return name of Organism that is top level of selected node - */ - protected String getSchemaOfSelectedNode(JTree tree) - { - TreePath path = tree.getLeadSelectionPath(); - if(path == null) - return null; - - DefaultMutableTreeNode seq_node = - (DefaultMutableTreeNode)path.getLastPathComponent(); - DefaultMutableTreeNode type_node = - (DefaultMutableTreeNode)seq_node.getParent(); - DefaultMutableTreeNode schema_node = - (DefaultMutableTreeNode)type_node.getParent(); - - return (String)schema_node.getUserObject(); - } /** * Create the nodes of the organism JTree @@ -297,12 +242,12 @@ public class DatabaseEntrySource implements EntrySource * @param schema <code>List</code> * @param organism sequences collection */ - private void createNodes(DefaultMutableTreeNode top, List schema, + private void createNodes(DatabaseTreeNode top, List schema, Hashtable entries) { - DefaultMutableTreeNode schema_node; - DefaultMutableTreeNode seq_node; - DefaultMutableTreeNode typ_node; + DatabaseTreeNode schema_node; + DatabaseTreeNode seq_node; + DatabaseTreeNode typ_node; final Object v_organism[] = entries.keySet().toArray(); final int v_organism_size = v_organism.length; @@ -318,12 +263,14 @@ public class DatabaseEntrySource implements EntrySource else name = ((Organism)schema.get(i)).getCommonName(); - schema_node = new DefaultMutableTreeNode(name); + schema_node = new DatabaseTreeNode(name, DatabaseEntrySource.this); Hashtable seq_type_node = new Hashtable(); for(int j = 0; j < v_organism_size; j++) { - String seq_name = (String)v_organism[j]; + String seq_name = (String)v_organism[j]; + String featureId = (String)entries.get(seq_name); + if(seq_name.startsWith(name)) { int ind1 = seq_name.indexOf("- "); @@ -334,14 +281,16 @@ public class DatabaseEntrySource implements EntrySource if(!seq_type_node.containsKey(type)) { - typ_node = new DefaultMutableTreeNode(type); + typ_node = new DatabaseTreeNode(type, DatabaseEntrySource.this); seq_type_node.put(type, typ_node); schema_node.add(typ_node); } else - typ_node = (DefaultMutableTreeNode) seq_type_node.get(type); + typ_node = (DatabaseTreeNode) seq_type_node.get(type); - seq_node = new DefaultMutableTreeNode(seq_name); + seq_node = new DatabaseTreeNode(seq_name, + DatabaseEntrySource.this, + featureId, name); typ_node.add(seq_node); nchild++; } diff --git a/uk/ac/sanger/artemis/components/DatabaseJFrame.java b/uk/ac/sanger/artemis/components/database/DatabaseJFrame.java similarity index 82% rename from uk/ac/sanger/artemis/components/DatabaseJFrame.java rename to uk/ac/sanger/artemis/components/database/DatabaseJFrame.java index 4810838ac2e18a1f2dc9a476d11aec142754db72..52b50161cbb2d9644cb55f11bbb1c7b0224f5e01 100644 --- a/uk/ac/sanger/artemis/components/DatabaseJFrame.java +++ b/uk/ac/sanger/artemis/components/database/DatabaseJFrame.java @@ -20,10 +20,12 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - * $Header: //tmp/pathsoft/artemis/uk/ac/sanger/artemis/components/DatabaseJFrame.java,v 1.10 2006-10-17 10:18:56 tjc Exp $ + * $Header: //tmp/pathsoft/artemis/uk/ac/sanger/artemis/components/database/DatabaseJFrame.java,v 1.1 2006-10-18 14:25:23 tjc Exp $ */ -package uk.ac.sanger.artemis.components; +package uk.ac.sanger.artemis.components.database; + +import uk.ac.sanger.artemis.components.*; import uk.ac.sanger.artemis.Entry; import uk.ac.sanger.artemis.sequence.*; @@ -44,6 +46,8 @@ import javax.swing.JPanel; import javax.swing.JLabel; import javax.swing.BorderFactory; import javax.swing.border.Border; +import javax.swing.tree.TreePath; + import java.awt.BorderLayout; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; @@ -62,7 +66,7 @@ public class DatabaseJFrame extends JFrame private boolean splitGFFEntry = false; public DatabaseJFrame(final DatabaseEntrySource entry_source, - final ArtemisMain art_main) + final Splash splash_main) { super("Organism List"); final JTree tree = entry_source.getDatabaseTree(); @@ -73,7 +77,7 @@ public class DatabaseJFrame extends JFrame public void mouseClicked(MouseEvent e) { if(e.getClickCount() == 2 && !e.isPopupTrigger()) - showSelected(entry_source, tree, art_main); + showSelected(entry_source, tree, splash_main); } }; tree.addMouseListener(mouseListener); @@ -85,7 +89,7 @@ public class DatabaseJFrame extends JFrame screen.height * 6 / 10); scroll.setPreferredSize(dim_frame); - setJMenuBar(makeMenuBar(entry_source, tree, art_main)); + setJMenuBar(makeMenuBar(entry_source, tree, splash_main)); JPanel pane = (JPanel)getContentPane(); pane.add(scroll, BorderLayout.CENTER); @@ -113,17 +117,23 @@ public class DatabaseJFrame extends JFrame * */ private void showSelected(final DatabaseEntrySource entry_source, - final JTree tree, final ArtemisMain art_main) + final JTree tree, final Splash splash_main) { - String node_name = null; - try { - node_name = entry_source.getSelectedNode(tree); - String id = entry_source.getEntryID(node_name); + TreePath path = tree.getLeadSelectionPath(); + if(path == null) + return; + DatabaseTreeNode seq_node = + (DatabaseTreeNode)path.getLastPathComponent(); + String node_name = (String)seq_node.getUserObject(); + String schema = seq_node.getSchema(); + + String id = seq_node.getFeatureId(); if(id != null) getEntryEditFromDatabase(id, entry_source, tree, - art_main, node_name); + splash_main, node_name, + schema); } catch(NullPointerException npe) { @@ -137,7 +147,8 @@ public class DatabaseJFrame extends JFrame */ private void getEntryEditFromDatabase(final String id, final DatabaseEntrySource entry_source, final JTree tree, - final ArtemisMain art_main, final String node_name) + final Splash splash_main, final String node_name, + final String schema) { SwingWorker entryWorker = new SwingWorker() { @@ -151,25 +162,17 @@ public class DatabaseJFrame extends JFrame try { final InputStreamProgressListener progress_listener = - art_main.getInputStreamProgressListener(); + splash_main.getInputStreamProgressListener(); entry_source.setSplitGFF(splitGFFEntry); - String schema = entry_source.getSchemaOfSelectedNode(tree); - final Entry entry = entry_source.getEntry(id, schema, progress_listener); DatabaseDocumentEntry db_entry = (DatabaseDocumentEntry)entry.getEMBLEntry(); - - int ind = 0; - String name = node_name; - if( (ind = name.lastIndexOf("-")) > -1) - name = name.substring(ind+1).trim(); - - ((DatabaseDocument)db_entry.getDocument()).setName(name); + ((DatabaseDocument)db_entry.getDocument()).setName(node_name); if(entry == null) { @@ -178,7 +181,7 @@ public class DatabaseJFrame extends JFrame return null; } - final EntryEdit new_entry_edit = art_main.makeEntryEdit(entry); + final EntryEdit new_entry_edit = ArtemisMain.makeEntryEdit(entry); // add gff entries if(splitGFFEntry) @@ -204,17 +207,17 @@ public class DatabaseJFrame extends JFrame } catch(OutOfRangeException e) { - new MessageDialog(art_main, "read failed: one of the features in " + new MessageDialog(splash_main, "read failed: one of the features in " + " the entry has an out of range " + "location: " + e.getMessage()); } catch(NoSequenceException e) { - new MessageDialog(art_main, "read failed: entry contains no sequence"); + new MessageDialog(splash_main, "read failed: entry contains no sequence"); } catch(IOException e) { - new MessageDialog(art_main, "read failed due to IO error: " + e); + new MessageDialog(splash_main, "read failed due to IO error: " + e); } tree.setCursor(cdone); return null; @@ -226,7 +229,7 @@ public class DatabaseJFrame extends JFrame } private JMenuBar makeMenuBar(final DatabaseEntrySource entry_source, - final JTree tree, final ArtemisMain art_main) + final JTree tree, final Splash splash_main) { JMenuBar mBar = new JMenuBar(); JMenu fileMenu = new JMenu("File"); @@ -237,7 +240,7 @@ public class DatabaseJFrame extends JFrame { public void actionPerformed(ActionEvent e) { - showSelected(entry_source, tree, art_main); + showSelected(entry_source, tree, splash_main); } }); fileMenu.add(fileShow); diff --git a/uk/ac/sanger/artemis/components/database/DatabaseJTree.java b/uk/ac/sanger/artemis/components/database/DatabaseJTree.java new file mode 100644 index 0000000000000000000000000000000000000000..b50ab54efefb5856b1e30c0cef0e0647ce84e465 --- /dev/null +++ b/uk/ac/sanger/artemis/components/database/DatabaseJTree.java @@ -0,0 +1,151 @@ +/* DatabaseJTree.java + * + * created: October 2006 + * + * This file is part of Artemis + * + * Copyright(C) 2006 Genome Research Limited + * + * This program 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 2 + * of the License, or(at your option) any later version. + * + * This program 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 this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * +*/ + +package uk.ac.sanger.artemis.components.database; + + +import java.awt.Point; +import java.awt.datatransfer.Transferable; +import java.awt.dnd.DnDConstants; +import java.awt.dnd.DragGestureEvent; +import java.awt.dnd.DragGestureListener; +import java.awt.dnd.DragSource; +import java.awt.dnd.DragSourceDragEvent; +import java.awt.dnd.DragSourceDropEvent; +import java.awt.dnd.DragSourceEvent; +import java.awt.dnd.DragSourceListener; +import java.awt.event.InputEvent; +import java.awt.event.MouseEvent; + +import javax.swing.JTree; +import javax.swing.tree.TreePath; +import javax.swing.tree.TreeSelectionModel; + + +/** +* +* File node for local file tree manager +* +*/ +public class DatabaseJTree extends JTree + implements DragGestureListener, + DragSourceListener +{ + /** + * + * @param file file node file + * + */ + public DatabaseJTree(DatabaseTreeNode rootNode) + { + super(rootNode); + getSelectionModel().setSelectionMode( + TreeSelectionModel.SINGLE_TREE_SELECTION); + + + DragSource dragSource = DragSource.getDefaultDragSource(); + + dragSource.createDefaultDragGestureRecognizer( + this, // component where drag originates + DnDConstants.ACTION_COPY_OR_MOVE, // actions + this); // drag gesture recognizer + } + + private boolean isLeafSelection() + { + TreePath path = getLeadSelectionPath(); + if(path == null) + return false; + + DatabaseTreeNode node = (DatabaseTreeNode)path.getLastPathComponent(); + return node.isLeaf(); + } + + private DatabaseTreeNode getSelectedNode() + { + TreePath path = getLeadSelectionPath(); + if(path == null) + return null; + + return (DatabaseTreeNode)path.getLastPathComponent(); + } + + public void dragGestureRecognized(DragGestureEvent dge) + { + // ignore if mouse popup trigger + InputEvent ie = dge.getTriggerEvent(); + if(ie instanceof MouseEvent) + if(((MouseEvent)ie).isPopupTrigger()) + return; + + // drag only files + if(isLeafSelection()) + { + final int nlist = getSelectionCount(); + if(nlist > 1) + { + + } + else + { + dge.startDrag(DragSource.DefaultCopyDrop, // cursor + null, + new Point(0,0), + (Transferable)getSelectedNode(), // transferable data + this); // drag source listener + } + } + + } + + public void dragDropEnd(DragSourceDropEvent dsde) + { + // TODO Auto-generated method stub + + } + + public void dragEnter(DragSourceDragEvent dsde) + { + // TODO Auto-generated method stub + + } + + public void dragExit(DragSourceEvent dse) + { + // TODO Auto-generated method stub + + } + + public void dragOver(DragSourceDragEvent dsde) + { + // TODO Auto-generated method stub + + } + + public void dropActionChanged(DragSourceDragEvent dsde) + { + // TODO Auto-generated method stub + + } +} diff --git a/uk/ac/sanger/artemis/components/database/DatabaseTreeNode.java b/uk/ac/sanger/artemis/components/database/DatabaseTreeNode.java new file mode 100644 index 0000000000000000000000000000000000000000..631d22590761d84c40d4cd55ff781aa906689e80 --- /dev/null +++ b/uk/ac/sanger/artemis/components/database/DatabaseTreeNode.java @@ -0,0 +1,127 @@ +/* DatabaseTreeNode.java + * + * created: October 2006 + * + * This file is part of Artemis + * + * Copyright(C) 2006 Genome Research Limited + * + * This program 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 2 + * of the License, or(at your option) any later version. + * + * This program 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 this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * +*/ + +package uk.ac.sanger.artemis.components.database; + +import java.awt.datatransfer.Transferable; +import java.awt.datatransfer.DataFlavor; +import java.awt.datatransfer.UnsupportedFlavorException; +import javax.swing.tree.DefaultMutableTreeNode; + +import java.io.Serializable; +import java.io.IOException; + +/** +* +* File node for local file tree manager +* +*/ +public class DatabaseTreeNode extends DefaultMutableTreeNode + implements Transferable, Serializable +{ + /** data flavour of a database node */ + //public static DataFlavor DATABASETREENODE = + // new DataFlavor(DatabaseTreeNode.class, "Database Node"); + /** flavours database node and string */ + //static DataFlavor flavors[] = { DATABASETREENODE, DataFlavor.stringFlavor }; + + public static final DataFlavor DATABASETREENODE = + new DataFlavor(DatabaseTreeNode.class, "Work Package"); + public static final DataFlavor STRING_DATA_FLAVOUR = + new DataFlavor(String.class, "text/plain"); + private static final DataFlavor flavors[] = { DATABASETREENODE}; + + + private DatabaseEntrySource entrySource; + private String featureId; + private String schema; + + public DatabaseTreeNode(final String name, + final DatabaseEntrySource entrySource) + { + super(name); + this.entrySource = entrySource; + } + + public DatabaseTreeNode(final String name, + final DatabaseEntrySource entrySource, + final String featureId, + final String schema) + { + super(name); + this.entrySource = entrySource; + this.featureId = featureId; + this.schema = schema; + } + +// Transferable + public DataFlavor[] getTransferDataFlavors() + { + return flavors; + } + + public boolean isDataFlavorSupported(DataFlavor f) + { + if(f.equals(DATABASETREENODE) || f.equals(DataFlavor.stringFlavor)) + return true; + return false; + } + + public Object getTransferData(DataFlavor d) + throws UnsupportedFlavorException, IOException + { + if(d.equals(DATABASETREENODE)) + return this; + else throw new UnsupportedFlavorException(d); + } + + + public DatabaseEntrySource getEntrySource() + { + return entrySource; + } + + public String getFeatureId() + { + return featureId; + } + + public String getSchema() + { + return schema; + } + +//Serializable + private void writeObject(java.io.ObjectOutputStream out) throws IOException + { + out.defaultWriteObject(); + } + + private void readObject(java.io.ObjectInputStream in) + throws IOException, ClassNotFoundException + { + in.defaultReadObject(); + } + +} diff --git a/uk/ac/sanger/artemis/components/genebuilder/GeneEdit.java b/uk/ac/sanger/artemis/components/genebuilder/GeneEdit.java index d3d691cb21e083a7ee85bb8aba7d1f2021d64b73..f58c232f4dd3ebfac5aa918e1cd1183b738ba23b 100644 --- a/uk/ac/sanger/artemis/components/genebuilder/GeneEdit.java +++ b/uk/ac/sanger/artemis/components/genebuilder/GeneEdit.java @@ -54,7 +54,7 @@ import uk.ac.sanger.artemis.io.DatabaseDocumentEntry; import uk.ac.sanger.artemis.io.EntryInformationException; import uk.ac.sanger.artemis.io.GFFStreamFeature; import uk.ac.sanger.artemis.util.DatabaseDocument; -import uk.ac.sanger.artemis.components.DatabaseEntrySource; +import uk.ac.sanger.artemis.components.database.DatabaseEntrySource; /** diff --git a/uk/ac/sanger/artemis/util/DatabaseDocument.java b/uk/ac/sanger/artemis/util/DatabaseDocument.java index fa7a9f22a2ead6a38436975ec9228473899f12c3..624ed01bedc618e2c8ff192487cfea236ccbd034 100644 --- a/uk/ac/sanger/artemis/util/DatabaseDocument.java +++ b/uk/ac/sanger/artemis/util/DatabaseDocument.java @@ -32,7 +32,7 @@ import uk.ac.sanger.artemis.chado.IBatisDAO; import uk.ac.sanger.artemis.chado.JdbcDAO; import uk.ac.sanger.artemis.chado.GmodDAO; import uk.ac.sanger.artemis.chado.ChadoTransaction; -import uk.ac.sanger.artemis.components.DatabaseEntrySource; +import uk.ac.sanger.artemis.components.database.DatabaseEntrySource; import org.gmod.schema.sequence.Feature; import org.gmod.schema.sequence.FeatureProp;