X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fio%2FFileLoader.java;h=66b51cd568c8373db1e5ea93055094809e81b684;hb=09b8644607fb5b9debbfe39a7177922b0e66aa9a;hp=f04b88dc9e3dec958ffab18759a20fadd323f7ec;hpb=8af8526d7448904c67db19f41e237a0eedd55a74;p=jalview.git diff --git a/src/jalview/io/FileLoader.java b/src/jalview/io/FileLoader.java index f04b88d..66b51cd 100755 --- a/src/jalview/io/FileLoader.java +++ b/src/jalview/io/FileLoader.java @@ -29,7 +29,6 @@ import jalview.bin.Jalview; import jalview.datamodel.AlignmentI; import jalview.datamodel.HiddenColumns; import jalview.datamodel.PDBEntry; -import jalview.datamodel.SequenceGroup; import jalview.datamodel.SequenceI; import jalview.gui.AlignFrame; import jalview.gui.AlignViewport; @@ -44,13 +43,16 @@ import jalview.ws.utils.UrlDownloadClient; import java.io.File; import java.io.IOException; +import java.util.ArrayList; +import java.util.List; import java.util.StringTokenizer; -import java.util.Vector; import javax.swing.SwingUtilities; public class FileLoader implements Runnable { + private static final String TAB = "\t"; + String file; DataSourceType protocol; @@ -200,62 +202,102 @@ public class FileLoader implements Runnable return alignFrame; } - public void updateRecentlyOpened() + public void LoadFileOntoAlignmentWaitTillLoaded(AlignViewport viewport, + String file, DataSourceType sourceType, FileFormatI format) { - Vector recent = new Vector(); - if (protocol == DataSourceType.PASTE) + this.viewport = viewport; + this.file = file; + this.protocol = sourceType; + this.format = format; + _LoadAlignmentFileWaitTillLoaded(); + } + + protected void _LoadAlignmentFileWaitTillLoaded() + { + Thread loader = new Thread(this); + loader.start(); + + while (loader.isAlive()) { - // do nothing if the file was pasted in as text... there is no filename to - // refer to it as. - return; + try + { + Thread.sleep(500); + } catch (Exception ex) + { + } } - if (file != null - && file.indexOf(System.getProperty("java.io.tmpdir")) > -1) + } + + /** + * Updates (or creates) the tab-separated list of recently opened files held + * under the given property name by inserting the filePath at the front of the + * list. Duplicates are removed, and the list is limited to 11 entries. The + * method returns the updated value of the property. + * + * @param filePath + * @param sourceType + */ + public static String updateRecentlyOpened(String filePath, + DataSourceType sourceType) + { + if (sourceType != DataSourceType.FILE + && sourceType != DataSourceType.URL) { - // ignore files loaded from the system's temporary directory - return; + return null; } - String type = protocol == DataSourceType.FILE ? "RECENT_FILE" - : "RECENT_URL"; - String historyItems = jalview.bin.Cache.getProperty(type); + String propertyName = sourceType == DataSourceType.FILE ? "RECENT_FILE" + : "RECENT_URL"; + String historyItems = Cache.getProperty(propertyName); + if (filePath != null + && filePath.indexOf(System.getProperty("java.io.tmpdir")) > -1) + { + // ignore files loaded from the system's temporary directory + return null; + } - StringTokenizer st; + List recent = new ArrayList<>(); if (historyItems != null) { - st = new StringTokenizer(historyItems, "\t"); + StringTokenizer st = new StringTokenizer(historyItems, TAB); while (st.hasMoreTokens()) { - recent.addElement(st.nextElement().toString().trim()); + String trimmed = st.nextToken().trim(); + if (!recent.contains(trimmed)) + { + recent.add(trimmed); + } } } - if (recent.contains(file)) + /* + * if file was already in the list, it moves to the top + */ + if (recent.contains(filePath)) { - recent.remove(file); + recent.remove(filePath); } - StringBuffer newHistory = new StringBuffer(file); + StringBuilder newHistory = new StringBuilder(filePath); for (int i = 0; i < recent.size() && i < 10; i++) { - newHistory.append("\t"); - newHistory.append(recent.elementAt(i)); + newHistory.append(TAB); + newHistory.append(recent.get(i)); } - Cache.setProperty(type, newHistory.toString()); + String newProperty = newHistory.toString(); + Cache.setProperty(propertyName, newProperty); - if (protocol == DataSourceType.FILE) - { - Cache.setProperty("DEFAULT_FILE_FORMAT", format.getName()); - } + return newProperty; } @Override public void run() { - String title = protocol == DataSourceType.PASTE ? "Copied From Clipboard" + String title = protocol == DataSourceType.PASTE + ? "Copied From Clipboard" : file; Runtime rt = Runtime.getRuntime(); try @@ -286,8 +328,7 @@ public class FileLoader implements Runnable + "\" has null or unidentifiable data content!"); if (!Jalview.isHeadlessMode()) { - JvOptionPane.showInternalMessageDialog( - Desktop.desktop, + JvOptionPane.showInternalMessageDialog(Desktop.desktop, MessageManager.getString("label.couldnt_read_data") + " in " + file + "\n" + AppletFormatAdapter.getSupportedFormats(), @@ -314,8 +355,8 @@ public class FileLoader implements Runnable if (source != null) { // Tell the user (developer?) that this is going to cause a problem - System.err - .println("IMPLEMENTATION ERROR: Cannot read consecutive Jalview XML projects from a stream."); + System.err.println( + "IMPLEMENTATION ERROR: Cannot read consecutive Jalview XML projects from a stream."); // We read the data anyway - it might make sense. } alignFrame = new Jalview2XML(raiseGUI).loadJalviewAlign(file); @@ -340,9 +381,10 @@ public class FileLoader implements Runnable if (downloadStructureFile) { String structExt = format.getExtensions().split(",")[0]; - String urlLeafName = file.substring(file.lastIndexOf(System - .getProperty("file.separator")), file - .lastIndexOf(".")); + String urlLeafName = file.substring( + file.lastIndexOf( + System.getProperty("file.separator")), + file.lastIndexOf(".")); String tempStructureFileStr = createNamedJvTempFile( urlLeafName, structExt); UrlDownloadClient.download(file, tempStructureFileStr); @@ -377,8 +419,9 @@ public class FileLoader implements Runnable { // register PDB entries with desktop's structure selection // manager - StructureSelectionManager.getStructureSelectionManager( - Desktop.instance).registerPDBEntry(pdbe); + StructureSelectionManager + .getStructureSelectionManager(Desktop.instance) + .registerPDBEntry(pdbe); } } } @@ -398,45 +441,16 @@ public class FileLoader implements Runnable AlignmentI alignment = viewport.getAlignment(); SequenceI seq = alignment .getSequenceAt(alignment.getAbsoluteHeight() - 1); - alignment.deleteSequence(alignment.getAbsoluteHeight() - 1); - SequenceGroup sg = viewport.getSelectionGroup(); - if (sg != null) + if (seq.hasHMMProfile()) { - seq.insertCharAt(0, sg.getStartRes(), '-'); - seq.insertCharAt(sg.getEndRes() + 1, - alignment.getWidth() - sg.getEndRes(), '-'); - SequenceI topSeq = sg.getSequencesInOrder(alignment)[0]; - int topIndex = alignment.findIndex(topSeq); - alignment.insertSequenceAt(topIndex, seq); - sg.setSeqrep(seq); - viewport.getSelectionGroup().addSequence(seq, false); + /* + * fudge: move HMM consensus sequence from last to first + */ + alignment.deleteSequence(alignment.getAbsoluteHeight() - 1); + alignment.insertSequenceAt(0, seq); } - else - { - for (int i = 0; i < alignment.getAbsoluteHeight(); i++) - { - if (!alignment.getSequenceAt(i).isHMMConsensusSequence()) - { - alignment.getSequences().add(i, seq); - break; - } - } - } - viewport.setAlignment(alignment); - viewport.initInformation(); - viewport.updateInformation(viewport.getAlignPanel()); viewport.getAlignPanel().adjustAnnotationHeight(); viewport.updateSequenceIdColours(); - if (viewport.getAlignPanel().alignFrame - .getSelectedHMM() == null) - { - viewport.getAlignPanel().alignFrame - .setSelectedHMM(seq.getHMM()); - } - viewport.getAlignPanel().repaint(); - viewport.alignmentChanged(viewport.getAlignPanel()); - - } } else @@ -458,8 +472,8 @@ public class FileLoader implements Runnable alignFrame.getViewport().setFeaturesDisplayed(fd); alignFrame.getViewport().setShowSequenceFeatures( ((ComplexAlignFile) source).isShowSeqFeatures()); - ColourSchemeI cs = ColourSchemeMapper.getJalviewColourScheme( - colourSchemeName, al); + ColourSchemeI cs = ColourSchemeMapper + .getJalviewColourScheme(colourSchemeName, al); if (cs != null) { alignFrame.changeColour(cs); @@ -485,8 +499,8 @@ public class FileLoader implements Runnable .applyFeaturesStyle(proxyColourScheme); } alignFrame.statusBar.setText(MessageManager.formatMessage( - "label.successfully_loaded_file", - new String[] { title })); + "label.successfully_loaded_file", new String[] + { title })); if (raiseGUI) { @@ -501,8 +515,8 @@ public class FileLoader implements Runnable try { - alignFrame.setMaximum(jalview.bin.Cache.getDefault( - "SHOW_FULLSCREEN", false)); + alignFrame.setMaximum(jalview.bin.Cache + .getDefault("SHOW_FULLSCREEN", false)); } catch (java.beans.PropertyVetoException ex) { } @@ -515,11 +529,8 @@ public class FileLoader implements Runnable Desktop.instance.stopLoading(); } - final String errorMessage = MessageManager - .getString("label.couldnt_load_file") - + " " - + title - + "\n" + error; + final String errorMessage = MessageManager.getString( + "label.couldnt_load_file") + " " + title + "\n" + error; // TODO: refactor FileLoader to be independent of Desktop / Applet GUI // bits ? if (raiseGUI && Desktop.desktop != null) @@ -530,7 +541,8 @@ public class FileLoader implements Runnable public void run() { JvOptionPane.showInternalMessageDialog(Desktop.desktop, - errorMessage, MessageManager + errorMessage, + MessageManager .getString("label.error_loading_file"), JvOptionPane.WARNING_MESSAGE); } @@ -543,7 +555,12 @@ public class FileLoader implements Runnable } } - updateRecentlyOpened(); + updateRecentlyOpened(file, protocol); + + if (protocol == DataSourceType.FILE && format != null) + { + Cache.setProperty("DEFAULT_FILE_FORMAT", format.getName()); + } } catch (Exception er) { @@ -556,11 +573,11 @@ public class FileLoader implements Runnable @Override public void run() { - JvOptionPane.showInternalMessageDialog( - Desktop.desktop, MessageManager.formatMessage( - "label.problems_opening_file", - new String[] { file }), MessageManager - .getString("label.file_open_error"), + JvOptionPane.showInternalMessageDialog(Desktop.desktop, + MessageManager.formatMessage( + "label.problems_opening_file", new String[] + { file }), + MessageManager.getString("label.file_open_error"), JvOptionPane.WARNING_MESSAGE); } }); @@ -578,11 +595,11 @@ public class FileLoader implements Runnable @Override public void run() { - JvOptionPane.showInternalMessageDialog( - Desktop.desktop, MessageManager.formatMessage( + JvOptionPane.showInternalMessageDialog(Desktop.desktop, + MessageManager.formatMessage( "warn.out_of_memory_loading_file", new String[] - { file }), MessageManager - .getString("label.out_of_memory"), + { file }), + MessageManager.getString("label.out_of_memory"), JvOptionPane.WARNING_MESSAGE); } }); @@ -646,24 +663,10 @@ public class FileLoader implements Runnable String seprator = System.getProperty("file.separator"); String jvTempDir = System.getProperty("java.io.tmpdir") + "jalview" + seprator + System.currentTimeMillis(); - File tempStructFile = new File(jvTempDir + seprator + fileName + "." - + extension); + File tempStructFile = new File( + jvTempDir + seprator + fileName + "." + extension); tempStructFile.mkdirs(); return tempStructFile.toString(); } - /* - * (non-Javadoc) - * - * @see java.lang.Object#finalize() - */ - @Override - protected void finalize() throws Throwable - { - source = null; - alignFrame = null; - viewport = null; - super.finalize(); - } - }