import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
-import java.util.StringTokenizer;
-import java.util.Vector;
+import java.util.ArrayList;
+import java.util.List;
import javax.swing.SwingUtilities;
public class FileLoader implements Runnable
{
+ private static final String DEFAULT_FILE_FORMAT_PROPERTY = "DEFAULT_FILE_FORMAT";
+
+ private static final String RECENT_URL_PROPERTY = "RECENT_URL";
+
+ private static final String RECENT_FILE_PROPERTY = "RECENT_FILE";
+
+ private static final String TAB = "\t";
+
+ /*
+ * maximum number of items in file/url history lists;
+ * pseudo-constant (not final) so amendable by Groovy if wanted
+ */
+ private static int MAX_HISTORY = 11;
+
private File selectedFile;
String file;
}
/**
- * Load a (file, protocol) source of unknown type
- *
- * @param file
- * @param protocol
- */
- public void LoadFile(String file, DataSourceType protocol)
- {
- loadFile(file, protocol, null);
- }
-
- /**
* Load alignment from (file, protocol) and wait till loaded
*
* @param file
/**
* Load alignment from (file, protocol) of type format and wait till loaded
*
- * @param file
+ * @param fileObject
* @param sourceType
* @param format
* @return alignFrame constructed from file contents
+ * @throws NullPointerException
+ * if {@code file} is null
*/
- public AlignFrame loadFileWaitTillLoaded(File file,
+ public AlignFrame loadFileWaitTillLoaded(File fileObject,
DataSourceType sourceType, FileFormatI format)
{
- setFileFields(null, file, null, sourceType, format);
+ setFileFields(null, fileObject, fileObject.getPath(), sourceType, format);
return _loadFileWaitTillLoaded();
}
/**
- * Load alignment from FileParse source of type format and wait till loaded
- *
- * @param source
- * @param format
- * @return alignFrame constructed from file contents
- */
- public AlignFrame loadFileWaitTillLoaded(AlignmentFileReaderI source,
- FileFormatI format)
- {
- setFileFields(source, null, source.getInFile(),
- source.getDataSourceType(), format);
- return _loadFileWaitTillLoaded();
- }
-
- /**
- * runs the 'run' method (in this thread), then return the alignFrame that's
- * (hopefully) been read
+ * Runs the 'run' method (in this thread), then returns the alignFrame that
+ * (hopefully) has been constructed
*
* @return
*/
return alignFrame;
}
+ /**
+ * Updates the Jalview properties file to add the last file or URL read to the
+ * tab-separated list in property RECENT_FILE or RECENT_URL respectively. The
+ * property is created if it does not already exist. The new entry is added as
+ * the first item (without duplication). If the list exceeds some maximum
+ * length (currently 10 entries), the oldest (last) entry is dropped.
+ * <p>
+ * Files read from the temporary file directory are not added to the property.
+ * <p>
+ * Property DEFAULT_FILE_FORMAT (e.g. "Fasta" etc) is also set if currently
+ * reading from file.
+ */
public void updateRecentlyOpened()
{
- Vector<String> recent = new Vector<>();
+ List<String> recent = new ArrayList<>();
if (protocol == DataSourceType.PASTE)
{
// do nothing if the file was pasted in as text... there is no filename to
// refer to it as.
return;
}
- if (file != null
- && file.indexOf(System.getProperty("java.io.tmpdir")) > -1)
+ if (file == null
+ || file.indexOf(System.getProperty("java.io.tmpdir")) > -1)
{
// ignore files loaded from the system's temporary directory
return;
}
- String type = protocol == DataSourceType.FILE ? "RECENT_FILE"
- : "RECENT_URL";
+ String type = protocol == DataSourceType.FILE ? RECENT_FILE_PROPERTY
+ : RECENT_URL_PROPERTY;
String historyItems = Cache.getProperty(type);
- StringTokenizer st;
-
if (historyItems != null)
{
- st = new StringTokenizer(historyItems, "\t");
+ String[] tokens = historyItems.split("\\t");
- while (st.hasMoreTokens())
+ for (String token : tokens)
{
- recent.addElement(st.nextToken().trim());
+ recent.add(token.trim());
}
}
recent.remove(file);
}
- StringBuffer newHistory = new StringBuffer(file);
- for (int i = 0; i < recent.size() && i < 10; i++)
+ StringBuilder newHistory = new StringBuilder(file);
+ for (int i = 0; i < recent.size() && i < MAX_HISTORY - 1; i++)
{
- newHistory.append("\t");
- newHistory.append(recent.elementAt(i));
+ newHistory.append(TAB);
+ newHistory.append(recent.get(i));
}
Cache.setProperty(type, newHistory.toString());
if (protocol == DataSourceType.FILE)
{
- Cache.setProperty("DEFAULT_FILE_FORMAT", format.getName());
+ Cache.setProperty(DEFAULT_FILE_FORMAT_PROPERTY, format.getName());
}
}