8bd01ea42916fa907c0249ae3426b932663588be
[jalview.git] / src / jalview / gui / Help.java
1 /*
2  * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
3  * Copyright (C) $$Year-Rel$$ The Jalview Authors
4  * 
5  * This file is part of Jalview.
6  * 
7  * Jalview is free software: you can redistribute it and/or
8  * modify it under the terms of the GNU General Public License 
9  * as published by the Free Software Foundation, either version 3
10  * of the License, or (at your option) any later version.
11  *  
12  * Jalview is distributed in the hope that it will be useful, but 
13  * WITHOUT ANY WARRANTY; without even the implied warranty 
14  * of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
15  * PURPOSE.  See the GNU General Public License for more details.
16  * 
17  * You should have received a copy of the GNU General Public License
18  * along with Jalview.  If not, see <http://www.gnu.org/licenses/>.
19  * The Jalview Authors are detailed in the 'AUTHORS' file.
20  */
21 package jalview.gui;
22
23 import jalview.util.BrowserLauncher;
24 import jalview.util.Platform;
25
26 import java.awt.Point;
27 import java.io.IOException;
28 import java.net.URL;
29
30 import javax.help.BadIDException;
31 import javax.help.HelpBroker;
32 import javax.help.HelpSet;
33 import javax.help.HelpSetException;
34
35 /**
36  * Utility class to show the help documentation window
37  * 
38  * @author gmcarstairs
39  */
40 public class Help
41 {
42   private static final String HELP_PAGE_ROOT = "http://www.jalview.org/help/";
43
44   /**
45    * Defines selected help targets with links to inbuilt (Java) help page target,
46    * and externally hosted help page. Will need to be maintained manually if help
47    * pages are reorganised in future.
48    */
49   public enum HelpId
50   {
51     Home("home", "help.html"), SequenceFeatureSettings("seqfeatures.settings", "html/features/featuresettings.html"),
52     StructureViewer("viewingpdbs", "html/features/viewingpdbs.html"), PdbFts("pdbfts", "html/features/pdbsequencefetcher.html#pdbfts"),
53     UniprotFts("uniprotfts", "html/features/uniprotsequencefetcher.html#uniprotfts");
54
55     private String id;
56     
57     private String path;
58
59     private HelpId(String hepLoc, String htmlPath)
60     {
61       this.id = hepLoc;
62       this.path = htmlPath;
63     }
64
65     String getId()
66     {
67       return this.id;
68     }
69
70     String getPath()
71     {
72       return this.path;
73     }
74   }
75
76   private static HelpBroker hb;
77
78   /**
79    * Not instantiable
80    */
81   private Help()
82   {
83
84   }
85
86   /**
87    * Shows the help window, at the entry specified by the given helpId
88    * 
89    * @param id
90    * 
91    * @throws HelpSetException
92    */
93   public static void showHelpWindow(HelpId id) throws HelpSetException
94   {
95     if (Platform.isJS())
96     {
97       try
98       {
99         BrowserLauncher.openURL(HELP_PAGE_ROOT + id.getPath());
100       } catch (IOException e)
101       {
102       }
103     }
104     else
105     /**
106      * Java only
107      * 
108      * @j2sIgnore
109      */
110     {
111
112       ClassLoader cl = Desktop.class.getClassLoader();
113       URL url = HelpSet.findHelpSet(cl, "help/help"); // $NON-NLS-$
114       HelpSet hs = new HelpSet(cl, url);
115
116       if (hb == null)
117       {
118         /*
119          * create help broker first time (only)
120          */
121         hb = hs.createHelpBroker();
122       }
123
124       try
125       {
126         hb.setCurrentID(id.getId());
127       } catch (BadIDException bad)
128       {
129         System.out.println("Bad help link: " + id.getId()
130                 + ": must match a target in help.jhm");
131         throw bad;
132       }
133
134       /*
135        * set Help visible - at its current location if it is already shown,
136        * else at a location as determined by the window manager
137        */
138       Point p = hb.getLocation();
139       hb.setLocation(p);
140       hb.setDisplayed(true);
141     }
142   }
143
144   /**
145    * Show the Help window at the root entry
146    * 
147    * @throws HelpSetException
148    */
149   public static void showHelpWindow() throws HelpSetException
150   {
151     showHelpWindow(HelpId.Home);
152   }
153 }