X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fio%2FFileLoader.java;h=c662ccfb380bddbaeac696b9b3348698482d816e;hb=d587f1aa61946dc14f6f089cf1dc2a3116cfb773;hp=5996d9895df54d9d9fef282e22a3a301459c4e36;hpb=771046fa14fd90393329d8ab3c1defbca37576d2;p=jalview.git diff --git a/src/jalview/io/FileLoader.java b/src/jalview/io/FileLoader.java index 5996d98..c662ccf 100755 --- a/src/jalview/io/FileLoader.java +++ b/src/jalview/io/FileLoader.java @@ -1,25 +1,78 @@ +/* +* Jalview - A Sequence Alignment Editor and Viewer +* Copyright (C) 2006 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle +* +* 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA +*/ + package jalview.io; import jalview.gui.AlignFrame; import jalview.gui.Jalview2XML; import javax.swing.JOptionPane; -import jalview.datamodel.Alignment; -import jalview.gui.Desktop; -import jalview.datamodel.SequenceI; -public class FileLoader +import jalview.gui.*; +import jalview.datamodel.*; +import java.util.Vector; +import java.util.StringTokenizer; +import javax.swing.SwingUtilities; + +public class FileLoader implements Runnable { + String file; + String protocol; + String format; + AlignViewport viewport; + AlignFrame alignFrame; + + public void LoadFile(AlignViewport viewport, String file, String protocol, String format) + { + this.viewport = viewport; + LoadFile(file, protocol, format); + } + + + public void LoadFile(String file, String protocol, String format) { - LoadingThread loader = new LoadingThread(file, protocol, format); - loader.start(); + this.file = file; + this.protocol = protocol; + this.format = format; + + final Thread loader = new Thread(this); + + SwingUtilities.invokeLater(new Runnable() + { + public void run() + { + loader.start(); + } + }); } + public AlignFrame LoadFileWaitTillLoaded(String file, String protocol, String format) { - LoadingThread loader = new LoadingThread(file, protocol, format); + this.file = file; + this.protocol = protocol; + this.format = format; + + Thread loader = new Thread(this); loader.start(); + while (loader.isAlive()) { try @@ -30,69 +83,164 @@ public class FileLoader {} } - return loader.af; + return alignFrame; } - class LoadingThread - extends Thread -{ - String file; - String protocol; - String format; - AlignFrame af; - public LoadingThread(String file, String protocol, String format) + public void updateRecentlyOpened() { - this.file = file; - this.protocol = protocol; - this.format = format; - } + Vector recent = new Vector(); - public void run() - { - SequenceI[] sequences = null; + String type = protocol.equals(FormatAdapter.FILE) + ? "RECENT_FILE" : "RECENT_URL"; - if (format.equalsIgnoreCase("Jalview")) - { - af = Jalview2XML.LoadJalviewAlign(file); - } - else + String historyItems = jalview.bin.Cache.getProperty(type); + + StringTokenizer st; + + if (historyItems != null) { - if (FormatAdapter.formats.contains(format)) + st = new StringTokenizer(historyItems, "\t"); + + while (st.hasMoreTokens()) { - sequences = FormatAdapter.readFile(file, protocol, format); + recent.addElement(st.nextElement().toString().trim()); } + } - if ( (sequences != null) && (sequences.length > 0)) - { - af = new AlignFrame(new Alignment(sequences)); - af.currentFileFormat = format; - af.statusBar.setText("Successfully loaded file " + file); + if (recent.contains(file)) + { + recent.remove(file); + } - Desktop.addInternalFrame(af, file, AlignFrame.NEW_WINDOW_WIDTH, - AlignFrame.NEW_WINDOW_HEIGHT); + StringBuffer newHistory = new StringBuffer(file); + for (int i = 0; i < recent.size() && i < 10; i++) + { + newHistory.append("\t"); + newHistory.append(recent.elementAt(i)); + } + jalview.bin.Cache.setProperty(type, newHistory.toString()); - try + if(type.equals(FormatAdapter.FILE)) + jalview.bin.Cache.setProperty("DEFAULT_FILE_FORMAT", format); + } + + public void run() + { + try{ + if (Desktop.instance != null) + Desktop.instance.startLoading(file); + + SequenceI[] sequences = null; + + if (format.equalsIgnoreCase("Jalview")) { - af.setMaximum(jalview.bin.Cache.getDefault("SHOW_FULLSCREEN", false)); + alignFrame = new Jalview2XML().LoadJalviewAlign(file); } - catch (Exception ex) + else { + String error = AppletFormatAdapter.SUPPORTED_FORMATS; + + if (FormatAdapter.isValidFormat(format)) + { + try + { + sequences = new FormatAdapter().readFile(file, protocol, format); + } + catch (java.io.IOException ex) + { + error = ex.getMessage(); + } + } + + if ( (sequences != null) && (sequences.length > 0)) + { + if (viewport != null) + { + for (int i = 0; i < sequences.length; i++) + { + viewport.getAlignment().addSequence(sequences[i]); + } + viewport.firePropertyChange("alignment", null, + viewport.getAlignment().getSequences()); + + } + else + { + Alignment al = new Alignment(sequences); + + alignFrame = new AlignFrame(al, + AlignFrame.DEFAULT_WIDTH, + AlignFrame.DEFAULT_HEIGHT); + + alignFrame.statusBar.setText("Successfully loaded file " + file); + alignFrame.setFileName(file, format); + + + Desktop.addInternalFrame(alignFrame, file, + AlignFrame.DEFAULT_WIDTH, + AlignFrame.DEFAULT_HEIGHT); + + try + { + alignFrame.setMaximum(jalview.bin.Cache.getDefault( + "SHOW_FULLSCREEN", false)); + } + catch (java.beans.PropertyVetoException ex) + { + } + } + } + else + { + if (Desktop.instance != null) + Desktop.instance.stopLoading(); + + final String errorMessage = "Couldn't load file " + file + "\n" + + error; + + javax.swing.SwingUtilities.invokeLater(new Runnable() + { + public void run() + { + JOptionPane.showInternalMessageDialog(Desktop.desktop, + errorMessage, + "Error loading file", + JOptionPane.WARNING_MESSAGE); + } + }); + } } + + updateRecentlyOpened(); + } - else + catch (OutOfMemoryError er) { - JOptionPane.showInternalMessageDialog(Desktop.desktop, - "Couldn't open file.\n" + - "Formats currently supported are\n" + - "Fasta, MSF, Clustal, BLC, PIR, MSP, and PFAM" // JBPNote - message should be generated through FormatAdapter! - , "Error loading file", - JOptionPane.WARNING_MESSAGE); + + er.printStackTrace(); + alignFrame = null; + + javax.swing.SwingUtilities.invokeLater(new Runnable() + { + public void run() + { + javax.swing.JOptionPane.showInternalMessageDialog(Desktop.desktop, + "Out of memory loading file "+file+"!!" + + + "\nSee help files for increasing Java Virtual Machine memory." + , "Out of memory", + javax.swing.JOptionPane.WARNING_MESSAGE); + } + }); } + + System.gc(); + if (Desktop.instance != null) + Desktop.instance.stopLoading(); + } - } -} }