X-Git-Url: http://source.jalview.org/gitweb/?p=jalview.git;a=blobdiff_plain;f=unused%2FJalviewJS.java;fp=unused%2FJalviewJS.java;h=1218c891eb0cf57259ac1027faf8e897e231f9ac;hp=0000000000000000000000000000000000000000;hb=65740880573a48adc758bec3939ece9d9ae104dd;hpb=71aa78b8a7d54e5aeb6b278310dfd735efb77477 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; + } + +}