JAL-3253 AppletParams class for processing applet-specific params
[jalview.git] / src / jalview / bin / AppletParams.java
1 package jalview.bin;
2
3 import java.util.HashMap;
4 import java.util.Map;
5
6 /**
7  * Collection of all known applet tags from JalviewLite
8  * 
9  * @author hansonr
10  *
11  */
12 @SuppressWarnings("serial")
13 public class AppletParams extends HashMap<String, String>
14 {
15
16   private final static String[] params = { "alignpdbfiles",
17       "ANNOTATIONCOLOUR_MAX", "ANNOTATIONCOLOUR_MIN", "annotations",
18       "APPLICATION_URL", "automaticScrolling", "centrecolumnlabels",
19       "debug", "defaultColour", "defaultColourNuc", "defaultColourProt",
20       "embedded", "enableSplitFrame", "externalstructureviewer", "features",
21       "file", "file2", "format", "heightScale", "hidefeaturegroups",
22       "jalviewhelpurl", "jnetfile", "jpredfile", "label", "linkLabel_",
23       "linkLabel_1", "linkURL_", "nojmol", "normaliseLogo",
24       "normaliseSequenceLogo", "oninit", "PDBFILE", "PDBSEQ",
25       "relaxedidmatch", "resolvetocodebase", "RGB", "scaleProteinAsCdna",
26       "scoreFile", "separator", "sequence", "showAnnotation", "showbutton",
27       "showConsensus", "showConsensusHistogram", "showConservation",
28       "showfeaturegroups", "showFeatureSettings", "showFullId",
29       "showGroupConsensus", "showGroupConservation", "showOccupancy",
30       "showQuality", "showSequenceLogo", "showTreeBootstraps",
31       "showTreeDistances", "showUnconserved", "showUnlinkedTreeNodes",
32       "sortBy", "sortByTree", "tree", "treeFile", "upperCase",
33       "userDefinedColour", "widthScale", "windowHeight", "windowWidth",
34       "wrap", };
35
36   public AppletParams(Map<String, String> info)
37   {
38     for (int i = params.length; --i >= 0;)
39     {
40       put(params[i], info.get(params[i]));
41     }
42   }
43
44   public String getParam(String param, String def)
45   {
46     String val = get(param);
47     return (val != null ? val : def);
48   }
49
50   // <applet
51   // code="jalview.bin.JalviewLite" width="140" height="35"
52   // archive="jalviewApplet.jar,JmolApplet-14.6.4_2016.10.26.jar,java-json.jar,json_simple-1.1.jar">
53   // <param name="permissions" value="sandbox"/>
54   // <param name="file" value="uniref50.fa"/>
55   // <param name="treeFile" value="ferredoxin.nw"/>
56   // <param name="userDefinedColour" value="C=yellow; R,K,H=FF5555;
57   // D,E=5555FF"/>
58   // <param name="sortByTree" value="True"/>
59   // <param name="showSequenceLogo" value="true"/>
60   // <param name="showGroupConsensus" value="true"/>
61   // <param name="showFullId" value="false"/>
62   // <param name="linkLabel_1" value="Uniprot"/>
63   // <param name="linkUrl_1"
64   // value="http://www.uniprot.org/uniprot/$SEQUENCE_ID$"/>
65   // <param name="linkLabel_2" value="EMBL-EBI Search"/>
66   // <param name="linkUrl_2"
67   // value="http://www.ebi.ac.uk/ebisearch/search.ebi?db=allebi&query=$SEQUENCE_ID$"/>
68   // <param name="APPLICATION_URL"
69   // value="http://www.jalview.org/services/launchApp"/>
70   // </applet>
71   //
72   public AppletParams(String outerHTML)
73   {
74     String[] tokens = outerHTML.split("<param");
75     outerHTML = tokens[0];
76     String code = getAttr(outerHTML, "code");
77     if (!code.equals("jalview.bin.JalviewLite"))
78     {
79       return;
80     }
81     for (int i = tokens.length; --i > 0;)
82     {
83       String param = tokens[i];
84       String key = getAttr(param, "name");
85       if (key != null)
86       {
87         String value = getAttr(param, "value");
88         System.out.println("AppletParams " + key + " = \"" + value + "\"");
89         put(key, value);
90       }
91     }
92     put("_width", getAttr(outerHTML, "width"));
93     put("_height", getAttr(outerHTML, "height"));
94     put("_id", getAttr(outerHTML, "id"));
95     put("_name", getAttr(outerHTML, "name"));
96     put("_archive", getAttr(outerHTML, "archive"));
97     put("_code", code);
98   }
99
100   /**
101    * Crude applet innerHTML parser
102    * 
103    * @param tag
104    * @param attr
105    * @return
106    */
107   private String getAttr(String tag, String attr)
108   {
109     int pt = tag.indexOf(attr + "=\"");
110     if (pt < 0)
111     {
112       System.out
113               .println("AppletParams did not read " + attr + " in " + tag);
114       return null;
115     }
116     // <param name="sortByTree" value="True"/>
117     int pt1 = pt + attr.length() + 2;
118     int pt2 = tag.indexOf("\"", pt1);
119     return (pt < 0 ? null : tag.substring(pt1, pt2));
120   }
121
122   public static void main(String[] args)
123   {
124     new AppletParams("<applet\r\n"
125             + "    code=\"jalview.bin.JalviewLite\" width=\"140\" height=\"35\"\r\n"
126             + "    archive=\"jalviewApplet.jar,JmolApplet-14.6.4_2016.10.26.jar,java-json.jar,json_simple-1.1.jar\">  \r\n"
127             + "  <param name=\"permissions\" value=\"sandbox\"/>\r\n"
128             + "  <param name=\"file\" value=\"uniref50.fa\"/>\r\n"
129             + "  <param name=\"treeFile\" value=\"ferredoxin.nw\"/>\r\n"
130             + "  <param name=\"userDefinedColour\" value=\"C=yellow; R,K,H=FF5555; D,E=5555FF\"/>\r\n"
131             + "  <param name=\"sortByTree\" value=\"True\"/>\r\n"
132             + "  <param name=\"showSequenceLogo\" value=\"true\"/>\r\n"
133             + "  <param name=\"showGroupConsensus\" value=\"true\"/>\r\n"
134             + "  <param name=\"showFullId\" value=\"false\"/>\r\n"
135             + "    <param name=\"linkLabel_1\" value=\"Uniprot\"/>\r\n"
136             + "    <param name=\"linkUrl_1\" value=\"http://www.uniprot.org/uniprot/$SEQUENCE_ID$\"/>\r\n"
137             + "    <param name=\"linkLabel_2\" value=\"EMBL-EBI Search\"/>\r\n"
138             + "    <param name=\"linkUrl_2\" value=\"http://www.ebi.ac.uk/ebisearch/search.ebi?db=allebi&query=$SEQUENCE_ID$\"/>\r\n"
139             + "    <param name=\"APPLICATION_URL\" value=\"http://www.jalview.org/services/launchApp\"/>\r\n"
140             + "     </applet>");
141   }
142
143 }