From f06e72c16c94b84230fd3e4cb18656f364a51ed6 Mon Sep 17 00:00:00 2001 From: tjc <tjc@ee4ac58c-ac51-4696-9907-e4b3aa274f04> Date: Wed, 26 Oct 2005 16:10:38 +0000 Subject: [PATCH] implement ssh file reading in act git-svn-id: svn+ssh://svn.internal.sanger.ac.uk/repos/svn/pathsoft/artemis/trunk@3788 ee4ac58c-ac51-4696-9907-e4b3aa274f04 --- uk/ac/sanger/artemis/components/ActMain.java | 98 ++++++++++++------- .../artemis/components/MultiComparator.java | 18 +++- .../artemis/io/SimpleDocumentEntry.java | 15 ++- .../sanger/artemis/util/DocumentFactory.java | 20 +++- 4 files changed, 108 insertions(+), 43 deletions(-) diff --git a/uk/ac/sanger/artemis/components/ActMain.java b/uk/ac/sanger/artemis/components/ActMain.java index dd1d8ced0..1fafc162d 100644 --- a/uk/ac/sanger/artemis/components/ActMain.java +++ b/uk/ac/sanger/artemis/components/ActMain.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/ActMain.java,v 1.7 2005-08-17 08:43:05 tjc Exp $ + * $Header: //tmp/pathsoft/artemis/uk/ac/sanger/artemis/components/ActMain.java,v 1.8 2005-10-26 16:10:38 tjc Exp $ */ package uk.ac.sanger.artemis.components; +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; @@ -35,13 +37,14 @@ import uk.ac.sanger.artemis.io.SimpleEntryInformation; import java.awt.event.*; import java.io.IOException; +import java.io.File; 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.7 2005-08-17 08:43:05 tjc Exp $ + * @version $Id: ActMain.java,v 1.8 2005-10-26 16:10:38 tjc Exp $ **/ public class ActMain extends Splash @@ -77,6 +80,20 @@ public class ActMain extends Splash } }; + ActionListener menu_listener_ssh = new ActionListener() + { + private LocalAndRemoteFileManager fm; + public void actionPerformed(ActionEvent event) + { + if(fm == null) + fm = new LocalAndRemoteFileManager(ActMain.this); + else + fm.setVisible(true); + new ComparatorDialog(ActMain.this).setVisible(true); + } + }; + makeMenuItem(file_menu, "Open SSH File Manager ...", menu_listener_ssh); + makeMenuItem(file_menu, "Quit", quit_listener); } @@ -116,40 +133,13 @@ public class ActMain extends Splash new SimpleEntryInformation(Options.getArtemisEntryInformation()); final String this_file_name = file_names[i]; - - final Document entry_document = - DocumentFactory.makeDocument(this_file_name); - - if(progress_listener != null) - entry_document.addInputStreamProgressListener(progress_listener); - - final uk.ac.sanger.artemis.io.Entry 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 null; - - final uk.ac.sanger.artemis.io.Sequence sequence = - embl_entry.getSequence(); - - if(sequence == null) - { - new MessageDialog(frame, "This file contains no sequence: " + - this_file_name); - return null; - } - - final Bases embl_bases = new Bases(sequence); - final EntryGroup entry_group = new SimpleEntryGroup(embl_bases); - + File this_file = new File(this_file_name); + try { - final Entry entry = new Entry(entry_group.getBases(), embl_entry); - entry_group.add(entry); - entry_group_array[i / 2] = entry_group; + if(!openEntry(this_file_name, entry_group_array, + entry_information, i)) + return null; } catch(OutOfRangeException e) { @@ -223,12 +213,52 @@ public class ActMain extends Splash progress_thread.finished(); } + private boolean openEntry(String this_file_name, EntryGroup[] entry_group_array, + final EntryInformation entry_information, int i) + throws OutOfRangeException + { + final Document entry_document = + DocumentFactory.makeDocument(this_file_name); + + if(progress_listener != null) + entry_document.addInputStreamProgressListener(progress_listener); + + final uk.ac.sanger.artemis.io.Entry 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; + + final uk.ac.sanger.artemis.io.Sequence sequence = + embl_entry.getSequence(); + + if(sequence == null) + { + new MessageDialog(frame, "This file contains no sequence: " + + this_file_name); + return false; + } + + final Bases embl_bases = new Bases(sequence); + EntryGroup entry_group = new SimpleEntryGroup(embl_bases); + Entry entry = new Entry(entry_group.getBases(), embl_entry); + + entry_group.add(entry); + entry_group_array[i / 2] = entry_group; + return true; + } + + }; entryWorker.start(); return true; } + /** * Create a dialog that allow the user to the choose two files to compare * and a file containing comparison data. diff --git a/uk/ac/sanger/artemis/components/MultiComparator.java b/uk/ac/sanger/artemis/components/MultiComparator.java index fc1ad94e3..2233b3a8a 100644 --- a/uk/ac/sanger/artemis/components/MultiComparator.java +++ b/uk/ac/sanger/artemis/components/MultiComparator.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/MultiComparator.java,v 1.13 2005-08-17 08:43:05 tjc Exp $ + * $Header: //tmp/pathsoft/artemis/uk/ac/sanger/artemis/components/MultiComparator.java,v 1.14 2005-10-26 16:10:38 tjc Exp $ */ package uk.ac.sanger.artemis.components; @@ -28,6 +28,7 @@ package uk.ac.sanger.artemis.components; import uk.ac.sanger.artemis.*; import uk.ac.sanger.artemis.components.filetree.FileManager; import uk.ac.sanger.artemis.components.filetree.FileNode; +import uk.ac.sanger.artemis.util.RemoteFileDocument; import uk.ac.sanger.artemis.util.FileDocument; import uk.ac.sanger.artemis.util.OutOfRangeException; import uk.ac.sanger.artemis.util.InputStreamProgressListener; @@ -35,6 +36,7 @@ import uk.ac.sanger.artemis.io.EntryInformationException; import uk.ac.sanger.artemis.io.DocumentEntryFactory; import uk.ac.sanger.artemis.io.EntryInformation; import uk.ac.sanger.artemis.io.SimpleEntryInformation; +import uk.ac.sanger.artemis.io.DocumentEntry; import java.awt.*; import java.awt.event.*; @@ -58,7 +60,7 @@ import javax.swing.border.BevelBorder; * to keep them synchronized. * * @author Kim Rutherford <kmr@sanger.ac.uk> - * @version $Id: MultiComparator.java,v 1.13 2005-08-17 08:43:05 tjc Exp $ + * @version $Id: MultiComparator.java,v 1.14 2005-10-26 16:10:38 tjc Exp $ **/ public class MultiComparator extends JFrame @@ -496,6 +498,18 @@ public class MultiComparator extends JFrame try { entry.save(DocumentEntryFactory.ANY_FORMAT); + + // save it back to ssh server + if(((DocumentEntry)entry.getEMBLEntry()).getDocument() + instanceof RemoteFileDocument) + { + RemoteFileDocument node = + (RemoteFileDocument)(((DocumentEntry)entry.getEMBLEntry()).getDocument()); + + File file = new File( ((DocumentEntry)entry.getEMBLEntry()).getDocument().toString() ); + node.saveEntry(file); + } + } catch(IOException e) { diff --git a/uk/ac/sanger/artemis/io/SimpleDocumentEntry.java b/uk/ac/sanger/artemis/io/SimpleDocumentEntry.java index 44deb0848..be8a2474f 100644 --- a/uk/ac/sanger/artemis/io/SimpleDocumentEntry.java +++ b/uk/ac/sanger/artemis/io/SimpleDocumentEntry.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/io/SimpleDocumentEntry.java,v 1.15 2005-10-11 14:20:31 tjc Exp $ + * $Header: //tmp/pathsoft/artemis/uk/ac/sanger/artemis/io/SimpleDocumentEntry.java,v 1.16 2005-10-26 16:10:38 tjc Exp $ */ package uk.ac.sanger.artemis.io; @@ -37,7 +37,7 @@ import java.util.Enumeration; * This class contains the methods common to all DocumentEntry objects. * * @author Kim Rutherford <kmr@sanger.ac.uk> - * @version $Id: SimpleDocumentEntry.java,v 1.15 2005-10-11 14:20:31 tjc Exp $ + * @version $Id: SimpleDocumentEntry.java,v 1.16 2005-10-26 16:10:38 tjc Exp $ **/ abstract public class SimpleDocumentEntry @@ -1116,7 +1116,16 @@ abstract public class SimpleDocumentEntry public void save(final Document document) throws IOException { - final Writer out_file = document.getWriter(); + final Writer out_file; + try + { + out_file = document.getWriter(); + } + catch(NullPointerException npe) + { + return; + } + writeToStream(out_file); out_file.close(); diff --git a/uk/ac/sanger/artemis/util/DocumentFactory.java b/uk/ac/sanger/artemis/util/DocumentFactory.java index 35ca1fba1..1a48fff47 100644 --- a/uk/ac/sanger/artemis/util/DocumentFactory.java +++ b/uk/ac/sanger/artemis/util/DocumentFactory.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/util/DocumentFactory.java,v 1.1 2004-06-09 09:52:58 tjc Exp $ + * $Header: //tmp/pathsoft/artemis/uk/ac/sanger/artemis/util/DocumentFactory.java,v 1.2 2005-10-26 16:10:38 tjc Exp $ */ package uk.ac.sanger.artemis.util; @@ -28,11 +28,13 @@ package uk.ac.sanger.artemis.util; import java.net.*; import java.io.*; +import uk.ac.sanger.artemis.components.filetree.RemoteFileNode; + /** * A Factory for Document objects. * * @author Kim Rutherford <kmr@sanger.ac.uk> - * @version $Id: DocumentFactory.java,v 1.1 2004-06-09 09:52:58 tjc Exp $ + * @version $Id: DocumentFactory.java,v 1.2 2005-10-26 16:10:38 tjc Exp $ **/ public class DocumentFactory { @@ -47,8 +49,18 @@ public class DocumentFactory { } catch (MalformedURLException e) { return new FileDocument (new File (source_string)); } - } else { - return new FileDocument (new File (source_string)); + } + else + { + File file = new File (source_string); + if(file.exists()) // assume a local file + return new FileDocument(file); + else // assume a remote file + { + RemoteFileNode node = new RemoteFileNode("", file.getName(), null, + file.getParent(), false); + return new RemoteFileDocument(node); + } } } } -- GitLab