// first determine our application base, this way if anything goes wrong later in the
// process, our caller can use the appbase to download a new configuration file
_appbase = config.getString("appbase");
+ // override if a Version Locator file has been used
+ if (newAppbase != null) {
+ _appbase = newAppbase.toString();
+ }
if (_appbase == null) {
throw new RuntimeException("m.missing_appbase");
}
// add the launch specific application arguments
_appargs.addAll(_envc.appArgs);
- // add startupFiles
- for (File f : startupFiles) {
- _appargs.add("-open");
- _appargs.add(f.getAbsolutePath());
- }
-
// look for custom arguments
fillAssignmentListFromPairs("extra.txt", _txtJvmArgs);
args.add(_class);
}
+ // almost finally check the startup file arguments
+ for (File f : startupFiles) {
+ _appargs.add(f.getAbsolutePath());
+ break; // Only add one file to open
+ }
+
+ // check if one arg with recognised extension
+ if ( _appargs.size() == 1 && _appargs.get(0) != null ) {
+ String filename = _appargs.get(0);
+ String ext = null;
+ int j = filename.lastIndexOf('.');
+ if (j > -1) {
+ ext = filename.substring(j+1);
+ }
+ if (startupFileExtensions.contains(ext.toLowerCase())) {
+ _appargs.add(0, "-open");
+ } else if (locatorFileExtension.equals(ext.toLowerCase())) {
+ // deal with this when first encountered in Getdown!
+ }
+ }
+
// finally add the application arguments
for (String string : _appargs) {
args.add(processArg(string));
}
-
+
String[] envp = createEnvironment();
String[] sargs = args.toArray(new String[args.size()]);
log.info("Running " + StringUtil.join(sargs, "\n "));
startupFiles.add(f);
}
+ public void newAppbase (URL url) {
+ if ((url.getHost().endsWith(".jalview.org") || url.equals("jalview.org"))) {
+ newAppbase = url;
+ }
+ log.info("Java Version Locator url '"+url.toString()+"' does not have a jalview.org domain. Ignoring");
+ }
+
protected final EnvConfig _envc;
protected File _config;
protected Digest _digest;
protected List<String> _jvmargs = new ArrayList<>();
protected List<String> _appargs = new ArrayList<>();
protected List<File> startupFiles = new ArrayList<>();
+ protected URL newAppbase;
protected String[] _optimumJvmArgs;
protected static final String ENV_VAR_PREFIX = "%ENV.";
protected static final Pattern ENV_VAR_PATTERN = Pattern.compile("%ENV\\.(.*?)%");
+
+ public static final List<String> startupFileExtensions = Arrays.asList(new String[] { "jvp" });
+ public static final String locatorFileExtension = "jvl";
}
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
+import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.HttpURLConnection;
+import java.net.MalformedURLException;
import java.net.URL;
import java.util.*;
if (j > -1) {
ext = filename.substring(j+1);
}
- // jvp files
- if (ext.equals("jvp")) {
+ // jvp files etc
+ boolean addedStartupFile = false; // only add one startup file
+ if (_app.startupFileExtensions.contains(ext.toLowerCase()) && ! addedStartupFile) {
File f = new File(filename);
if (f.exists()) {
_app.addStartupFile(f);
+ addedStartupFile = true;
}
}
// jvl files
- if (ext.equals("jvl")) {
- // Do stuff with the appbase here!
+ if (_app.locatorFileExtension.equals(ext.toLowerCase())) {
+ // Do something special with this here
+ File f = new File(filename);
+ if (f.exists()) {
+ String line = null;
+ try {
+ FileReader fr = new FileReader(f);
+ BufferedReader br = new BufferedReader(fr);
+ line = br.readLine();
+ br.close();
+ } catch(Exception e) {
+ log.warning("Something went wrong reading Jalview Version Locator file '"+filename+"'", e);
+ }
+ if (line != null) {
+ String urlString = line.trim();
+ try {
+ URL newAppbase = new URL(urlString);
+ _app.newAppbase(newAppbase);
+ } catch(MalformedURLException e) {
+ log.warning("Java Version Locator url '"+urlString+"' found in file '"+filename+"' is malformed", e);
+ }
+ }
+ }
}
}
}
protected static final int MAX_LOOPS = 5;
protected static final long FALLBACK_CHECK_TIME = 1000L;
+
}