import java.util.HashMap;
import java.util.Map;
import java.util.Vector;
+import java.util.logging.ConsoleHandler;
+import java.util.logging.Level;
+import java.util.logging.Logger;
import javax.swing.LookAndFeel;
import javax.swing.UIManager;
/**
* Main class for Jalview Application <br>
* <br>
- * start with java -Djava.ext.dirs=$PATH_TO_LIB$ jalview.bin.Jalview
+ * start with: java -classpath "$PATH_TO_LIB$/*:$PATH_TO_CLASSES$" \
+ * jalview.bin.Jalview
+ *
+ * or on Windows: java -classpath "$PATH_TO_LIB$/*;$PATH_TO_CLASSES$" \
+ * jalview.bin.Jalview jalview.bin.Jalview
+ *
+ * (ensure -classpath arg is quoted to avoid shell expansion of '*' and do not
+ * embellish '*' to e.g. '*.jar')
*
* @author $author$
* @version $Revision$
*/
public class Jalview
{
+ static
+ {
+ Platform.getURLCommandArguments();
+ }
- // BH 6/19/2018 starting to work on JS version - just discovering issues
+ // singleton instance of this class
- /*
- * singleton instance of this class
- */
private static Jalview instance;
private Desktop desktop;
public static AlignFrame currentAlignFrame;
- public static boolean isJS = /** @j2sNative true || */ // BH 2018
- false;
-
static
{
-
- if (!isJS)
- { // BH 2018
- // grab all the rights we can the JVM
- Policy.setPolicy(new Policy()
+ if (!Platform.isJS())
+ /**
+ * Java only
+ *
+ * @j2sIgnore
+ */
{
- @Override
- public PermissionCollection getPermissions(CodeSource codesource)
- {
- Permissions perms = new Permissions();
- perms.add(new AllPermission());
- return (perms);
- }
-
- @Override
- public void refresh()
- {
- }
- });
-
+ // grab all the rights we can for the JVM
+ Policy.setPolicy(new Policy()
+ {
+ @Override
+ public PermissionCollection getPermissions(CodeSource codesource)
+ {
+ Permissions perms = new Permissions();
+ perms.add(new AllPermission());
+ return (perms);
+ }
+
+ @Override
+ public void refresh()
+ {
+ }
+ });
}
}
*/
public static void main(String[] args)
{
+// setLogging(); // BH - for event debugging in JavaScript
instance = new Jalview();
instance.doMain(args);
+}
+
+ private static void logClass(String name)
+ {
+ // BH - for event debugging in JavaScript
+ ConsoleHandler consoleHandler = new ConsoleHandler();
+ consoleHandler.setLevel(Level.ALL);
+ Logger logger = Logger.getLogger(name);
+ logger.setLevel(Level.ALL);
+ logger.addHandler(consoleHandler);
}
+ @SuppressWarnings("unused")
+ private static void setLogging()
+ {
+
+ /**
+ * @j2sIgnore
+ *
+ */
+ {
+ System.out.println("not in js");
+ }
+
+ // BH - for event debugging in JavaScript (Java mode only)
+ if (!Platform.isJS())
+ /**
+ * Java only
+ *
+ * @j2sIgnore
+ */
+ {
+ Logger.getLogger("").setLevel(Level.ALL);
+ logClass("java.awt.EventDispatchThread");
+ logClass("java.awt.EventQueue");
+ logClass("java.awt.Component");
+ logClass("java.awt.focus.Component");
+ logClass("java.awt.focus.DefaultKeyboardFocusManager");
+ }
+
+ }
+
+
+
+
/**
* @param args
*/
void doMain(String[] args)
{
- if (!isJS)
+ if (!Platform.isJS())
{
System.setSecurityManager(null);
}
"CMD [-props " + usrPropsFile + "] executed successfully!");
}
+ if (!Platform.isJS())
/**
- * BH 2018 ignoring this section for JS
+ * Java only
*
- * @j2sNative
+ * @j2sIgnore
*/
{
if (aparser.contains("help") || aparser.contains("h"))
else
{
System.out.println("Executing setprop argument: " + defs);
- // DISABLED FOR SECURITY REASONS
- // TODO: add a property to allow properties to be overriden by cli args
- // Cache.setProperty(defs.substring(0,p), defs.substring(p+1));
+ if (Platform.isJS())
+ {
+ Cache.setProperty(defs.substring(0,p), defs.substring(p+1));
+ }
}
defs = aparser.getValue("setprop");
}
{
error.printStackTrace();
System.out.println("\nEssential logging libraries not found."
- + "\nUse: java -Djava.ext.dirs=$PATH_TO_LIB$ jalview.bin.Jalview");
+ + "\nUse: java -classpath \"$PATH_TO_LIB$/*:$PATH_TO_CLASSES$\" jalview.bin.Jalview");
System.exit(0);
}
System.err.println("Unexpected Look and Feel Exception");
ex.printStackTrace();
}
- if (Platform.isAMac())
+ if (Platform.isAMacAndNotJS())
{
LookAndFeel lookAndFeel = ch.randelshofer.quaqua.QuaquaManager
if (!headless)
{
- desktop = new Desktop();
+ desktop = new Desktop()
+// {
+// // BH testing
+// @Override
+// protected void processEvent(AWTEvent e) {
+// System.out.println("Jalview.java " + e);
+// super.processEvent(e);
+// }
+// }
+ ;
desktop.setInBatchMode(true); // indicate we are starting up
desktop.setVisible(true);
+ if (!Platform.isJS())
/**
- * BH 2018 JS bypass this section
- *
- * @j2sNative
+ * Java only
*
+ * @j2sIgnore
*/
{
desktop.startServiceDiscovery();
FileFormatI format = null;
DataSourceType protocol = null;
FileLoader fileLoader = new FileLoader(!headless);
- Vector<String> getFeatures = null; // vector of das source nicknames to
- // fetch
- // features from
- // loading is done.
+
String groovyscript = null; // script to execute after all loading is
// completed one way or another
// extract groovy argument and execute if necessary
}
System.out.println("CMD [-open " + file + "] executed successfully!");
- if (!isJS && !file.startsWith("http://"))
+ if (!Platform.isJS())
+ /**
+ * ignore in JavaScript -- can't just file existence - could load it?
+ *
+ * @j2sIgnore
+ */
{
- if (!(new File(file)).exists())
+ if (!file.startsWith("http://") && !file.startsWith("https://"))
+ // BH 2019 added https check for Java
{
- System.out.println("Can't find " + file);
- if (headless)
+ if (!(new File(file)).exists())
{
- System.exit(1);
+ System.out.println("Can't find " + file);
+ if (headless)
+ {
+ System.exit(1);
+ }
}
}
}
data.replaceAll("%20", " ");
ColourSchemeI cs = ColourSchemeProperty
- .getColourScheme(af.getViewport().getAlignment(), data);
+ .getColourScheme(af.getViewport(),
+ af.getViewport().getAlignment(), data);
if (cs != null)
{
// TODO - load PDB structure(s) to alignment JAL-629
// (associate with identical sequence in alignment, or a specified
// sequence)
-
- getFeatures = checkDasArguments(aparser);
- if (af != null && getFeatures != null)
- {
- FeatureFetcher ff = startFeatureFetching(getFeatures);
- if (ff != null)
- {
- while (!ff.allFinished() || af.operationInProgress())
- {
- // wait around until fetching is finished.
- try
- {
- Thread.sleep(100);
- } catch (Exception e)
- {
-
- }
- }
- }
- getFeatures = null; // have retrieved features - forget them now.
- }
if (groovyscript != null)
{
// Execute the groovy script after we've done all the rendering stuff
continue;
}
- if (af.saveAlignment(file, format))
+ af.saveAlignment(file, format);
+ if (af.isSaveAlignmentSuccessful())
{
System.out.println("Written alignment in " + format
+ " format to " + file);
// And the user
// ////////////////////
- if (/** @j2sNative false && */ // BH 2018
- !headless && file == null && vamsasImport == null
+ if (!Platform.isJS() && !headless && file == null
+ && vamsasImport == null
&& jalview.bin.Cache.getDefault("SHOW_STARTUP_FILE", true))
+ /**
+ * Java only
+ *
+ * @j2sIgnore
+ */
{
file = jalview.bin.Cache.getDefault("STARTUP_FILE",
jalview.bin.Cache.getDefault("www.jalview.org",
startUpAlframe = fileLoader.LoadFileWaitTillLoaded(file, protocol,
format);
- getFeatures = checkDasArguments(aparser);
// extract groovy arguments before anything else.
}
- // If the user has specified features to be retrieved,
- // or a groovy script to be executed, do them if they
- // haven't been done already
- // fetch features for the default alignment
- if (getFeatures != null)
- {
- if (startUpAlframe != null)
- {
- startFeatureFetching(getFeatures);
- }
- }
+
// Once all other stuff is done, execute any groovy scripts (in order)
if (groovyscript != null)
{
// (quote the 'PROPERTY=VALUE' pair to ensure spaces are
// passed in correctly)"
+ "-jabaws URL\tSpecify URL for Jabaws services (e.g. for a local installation).\n"
- + "-dasserver nickname=URL\tAdd and enable a das server with given nickname\n\t\t\t(alphanumeric or underscores only) for retrieval of features for all alignments.\n"
- + "\t\t\tSources that also support the sequence command may be specified by prepending the URL with sequence:\n"
- + "\t\t\t e.g. sequence:http://localdas.somewhere.org/das/source)\n"
+ "-fetchfrom nickname\tQuery nickname for features for the alignments and display them.\n"
// +
// "-vdoc vamsas-document\tImport vamsas document into new
}
}
- /**
- * Check commandline for any das server definitions or any fetchfrom switches
- *
- * @return vector of DAS source nicknames to retrieve from
- */
- private static Vector<String> checkDasArguments(ArgsParser aparser)
- {
- Vector<String> source = null;
- String data;
- String locsources = Cache.getProperty(Cache.DAS_LOCAL_SOURCE);
- while ((data = aparser.getValue("dasserver", true)) != null)
- {
- String nickname = null;
- String url = null;
- int pos = data.indexOf('=');
- // determine capabilities
- if (pos > 0)
- {
- nickname = data.substring(0, pos);
- }
- url = data.substring(pos + 1);
- if (url != null && (url.startsWith("http:")
- || url.startsWith("sequence:http:")))
- {
- if (nickname == null)
- {
- nickname = url;
- }
- if (locsources == null)
- {
- locsources = "";
- }
- else
- {
- locsources += "\t";
- }
- locsources = locsources + nickname + "|" + url;
- System.err.println(
- "NOTE! dasserver parameter not yet really supported (got args of "
- + nickname + "|" + url);
- if (source == null)
- {
- source = new Vector<>();
- }
- source.addElement(nickname);
- }
- System.out.println(
- "CMD [-dasserver " + data + "] executed successfully!");
- } // loop until no more server entries are found.
- if (locsources != null && locsources.indexOf('|') > -1)
- {
- Cache.log.debug("Setting local source list in properties file to:\n"
- + locsources);
- Cache.setProperty(Cache.DAS_LOCAL_SOURCE, locsources);
- }
- while ((data = aparser.getValue("fetchfrom", true)) != null)
- {
- System.out.println("adding source '" + data + "'");
- if (source == null)
- {
- source = new Vector<>();
- }
- source.addElement(data);
- }
- return source;
- }
-
- /**
- * start a feature fetcher for every alignment frame
- *
- * @param dasSources
- */
- private FeatureFetcher startFeatureFetching(
- final Vector<String> dasSources)
- {
- FeatureFetcher ff = new FeatureFetcher();
- AlignFrame afs[] = Desktop.getAlignFrames();
- if (afs == null || afs.length == 0)
- {
- return null;
- }
- for (int i = 0; i < afs.length; i++)
- {
- ff.addFetcher(afs[i], dasSources);
- }
- return ff;
- }
-
public static boolean isHeadlessMode()
{
String isheadless = System.getProperty("java.awt.headless");