X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=unused%2FJalviewJS.java;fp=unused%2FJalviewJS.java;h=1218c891eb0cf57259ac1027faf8e897e231f9ac;hb=65740880573a48adc758bec3939ece9d9ae104dd;hp=0000000000000000000000000000000000000000;hpb=71aa78b8a7d54e5aeb6b278310dfd735efb77477;p=jalview.git
diff --git a/unused/JalviewJS.java b/unused/JalviewJS.java
new file mode 100644
index 0000000..1218c89
--- /dev/null
+++ b/unused/JalviewJS.java
@@ -0,0 +1,324 @@
+package jalview.bin;
+
+import jalview.analysis.AlignmentUtils;
+import jalview.datamodel.AlignmentI;
+import jalview.gui.AlignFrame;
+import jalview.gui.SplitFrame;
+import jalview.io.DataSourceType;
+import jalview.io.FileFormatException;
+import jalview.io.FileFormatI;
+import jalview.io.FileLoader;
+import jalview.io.IdentifyFile;
+import jalview.structure.StructureSelectionManager;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.swing.JFrame;
+import javax.swing.JInternalFrame;
+
+/**
+ *
+ * early work -- deprecated
+ *
+ * Entry point for Jalview as Javascript. Expects parameter names as for the
+ * JalviewLite applet, formatted as for the Jalview application, for example
+ *
+ *
+ * JalviewJS file /examples/uniref50.fa features /examples/exampleFeatures.txt \
+ * PDBFile "/examples/pdb1.txt seq1"
+ *
+ *
+ * Note that (unlike the applet) parameter names are case sensitive
+ */
+// TODO or format as file=/examples/uniref50.fa (etc)?
+public class JalviewJS
+{
+
+ static
+ {
+ /**
+ * @j2sNative
+ *
+ * thisApplet.__Info.args =
+ * ["file","examples/uniref50.fa","features",
+ * "examples/exampleFeatures.txt",
+ * "props","/Users/gmcarstairs/.jalview_properties"];
+ */
+
+ }
+
+ private static final String PARAM_FILE = "file";
+
+ private static final String PARAM_FILE2 = "file2";
+
+ private static final String PARAM_TREE = "tree";
+
+ private static final String PARAM_FEATURES = "features";
+
+ private static final String PARAM_ANNOTATIONS = "annotations";
+
+ private static final String PARAM_SHOW_ANNOTATION = "showAnnotation";
+
+ private static final String PARAM_PDBFILE = "PDBFile";
+
+ private static final String PARAM_PROPS = "props";
+
+ private Map params;
+
+ private List pdbFileParams;
+
+ public static void main(String[] args) throws Exception
+ {
+ new JalviewJS().doMain(args);
+ }
+
+ /**
+ * Parses parameters and shows the frame and any loaded panels
+ *
+ * @throws FileFormatException
+ */
+ void doMain(String[] args) throws FileFormatException
+ {
+ loadParameters(args);
+ if (getParameter(PARAM_FILE) == null)
+ {
+ usage();
+ }
+ else
+ {
+ showFrame();
+ }
+ }
+
+ /**
+ * Answers the value of the given runtime parameter, or null if not provided
+ *
+ * @param paramName
+ * @return
+ */
+ private String getParameter(String paramName)
+ {
+ return params.get(paramName);
+ }
+
+ /**
+ * Prints a chastising, yet helpful, error message on syserr
+ */
+ private void usage()
+ {
+ System.err.println(
+ "Usage: JalviewJS file [features ]");
+ System.err.println("See documentation for full parameter list");
+ }
+
+ /**
+ * Parses any supplied parameters. Note that (unlike for the applet),
+ * parameter names are case sensitive.
+ *
+ * @param args
+ *
+ * @see http://www.jalview.org/examples/index.html#appletParameters
+ */
+ void loadParameters(String[] args)
+ {
+ ArgsParser parser = new ArgsParser(args);
+ params = new HashMap<>();
+
+ // TODO javascript-friendly source of properties
+ Cache.loadProperties(parser.getValue(PARAM_PROPS));
+ loadParameter(parser, PARAM_FILE);
+ loadParameter(parser, PARAM_FILE2);
+ loadParameter(parser, PARAM_TREE);
+ loadParameter(parser, PARAM_FEATURES);
+ loadParameter(parser, PARAM_ANNOTATIONS);
+ loadParameter(parser, PARAM_SHOW_ANNOTATION);
+ pdbFileParams = loadPdbParameters(parser);
+ }
+
+ /**
+ * Reads one command line parameter value and saves it against the parameter
+ * name. Note the saved value is null if the parameter is not present.
+ *
+ * @param parser
+ * @param param
+ */
+ protected void loadParameter(ArgsParser parser, String param)
+ {
+ params.put(param, parser.getValue(param));
+ }
+
+ /**
+ * Reads parameter PDBFile, PDBFile1, PDFile2, ... and saves the value(s) (if
+ * any)
+ *
+ * @param parser
+ * @return
+ */
+ List loadPdbParameters(ArgsParser parser)
+ {
+ List values = new ArrayList<>();
+ String value = parser.getValue(PARAM_PDBFILE);
+ if (value != null)
+ {
+ values.add(value);
+ }
+ int i = 1;
+ while (true)
+ {
+ value = parser.getValue(PARAM_PDBFILE + String.valueOf(i));
+ if (value != null)
+ {
+ values.add(value);
+ }
+ else
+ {
+ break;
+ }
+ }
+ return values;
+ }
+
+ /**
+ * Constructs and displays a JFrame containing an alignment panel (and any
+ * additional panels depending on parameters supplied)
+ *
+ * @throws FileFormatException
+ */
+ void showFrame() throws FileFormatException
+ {
+ JFrame frame = new JFrame(getParameter(PARAM_FILE));
+ frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+
+ /*
+ * construct an AlignFrame (optionally with features)
+ */
+ AlignFrame alignFrame = createAlignFrame(PARAM_FILE);
+ loadFeatures(alignFrame, getParameter(PARAM_FEATURES));
+
+ JInternalFrame internalFrame = alignFrame;
+
+ /*
+ * convert to SplitFrame if a valid file2 is supplied
+ */
+ AlignFrame alignFrame2 = createAlignFrame(PARAM_FILE2);
+ if (alignFrame2 != null)
+ {
+ SplitFrame splitFrame = loadSplitFrame(alignFrame, alignFrame2);
+ if (splitFrame != null)
+ {
+ internalFrame = splitFrame;
+ }
+ }
+
+ /*
+ * move AlignFrame (or SplitFrame) menu bar and content pane to our frame
+ * TODO there may be a less obscure way to do this
+ */
+ frame.setContentPane(internalFrame.getContentPane());
+ frame.setJMenuBar(internalFrame.getJMenuBar());
+
+ // fudge so that dialogs can be opened with this frame as parent
+ // todo JAL-3031 also override Desktop.addInternalFrame etc
+ // Desktop.parent = frame.getContentPane();
+
+ frame.pack();
+ frame.setSize(AlignFrame.DEFAULT_WIDTH, AlignFrame.DEFAULT_HEIGHT);
+ frame.setVisible(true);
+ }
+
+ /**
+ * Constructs a SplitFrame if cdna-protein mappings can be made between the
+ * given alignment frames, else returns null. Any mappings made are registered
+ * with StructureSelectionManager to enable broadcast to listeners.
+ *
+ * @param alignFrame
+ * @param alignFrame2
+ * @return
+ */
+ protected SplitFrame loadSplitFrame(AlignFrame alignFrame,
+ AlignFrame alignFrame2)
+ {
+ // code borrowed from AlignViewport.openLinkedAlignment
+ AlignmentI al1 = alignFrame.getViewport().getAlignment();
+ AlignmentI al2 = alignFrame2.getViewport().getAlignment();
+ boolean al1Nuc = al1.isNucleotide();
+ if (al1Nuc == al2.isNucleotide())
+ {
+ System.err.println("Can't make split frame as alignments are both "
+ + (al1Nuc ? "nucleotide" : "protein"));
+ return null;
+ }
+ AlignmentI protein = al1Nuc ? al2 : al1;
+ AlignmentI cdna = al1Nuc ? al1 : al2;
+ boolean mapped = AlignmentUtils.mapProteinAlignmentToCdna(protein,
+ cdna);
+ if (!mapped)
+ {
+ System.err.println("Can't make any mappings for split frame");
+ return null;
+ }
+
+ /*
+ * register sequence mappings
+ */
+ StructureSelectionManager ssm = StructureSelectionManager
+ .getStructureSelectionManager(null);
+ ssm.registerMappings(protein.getCodonFrames());
+
+ cdna.alignAs(protein);
+
+ SplitFrame splitFrame = new SplitFrame(
+ al1Nuc ? alignFrame : alignFrame2,
+ al1Nuc ? alignFrame2 : alignFrame);
+
+ return splitFrame;
+ }
+
+ /**
+ * Loads on a features file if one was specified as a parameter
+ *
+ * @param alignFrame
+ * @param featureFile
+ */
+ protected void loadFeatures(AlignFrame alignFrame, String featureFile)
+ {
+ if (featureFile != null)
+ {
+ // todo extract helper for protocol resolution from JalviewLite
+ DataSourceType sourceType = featureFile.startsWith("http")
+ ? DataSourceType.URL
+ : DataSourceType.RELATIVE_URL;
+ alignFrame.parseFeaturesFile(featureFile, sourceType);
+ }
+ }
+
+ /**
+ * Constructs and returns the frame containing the alignment and its
+ * annotations. Returns null if the specified parameter value is not set.
+ *
+ * @param fileParam
+ *
+ * @return
+ * @throws FileFormatException
+ */
+ AlignFrame createAlignFrame(String fileParam) throws FileFormatException
+ {
+ AlignFrame af = null;
+ String file = getParameter(fileParam);
+ if (file != null)
+ {
+ DataSourceType protocol = file.startsWith("http") ? DataSourceType.URL
+ : DataSourceType.RELATIVE_URL;
+ // DataSourceType protocol = AppletFormatAdapter.checkProtocol(file);
+ FileFormatI format = new IdentifyFile().identify(file, protocol);
+ FileLoader fileLoader = new FileLoader(false);
+ af = fileLoader.LoadFileWaitTillLoaded(file, protocol, format);
+ }
+
+ return af;
+ }
+
+}