JAL-2814 JAL-3032 targeted help URL links for JalviewJS
[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             return;
102         }
103         
104     ClassLoader cl = Desktop.class.getClassLoader();
105     URL url = HelpSet.findHelpSet(cl, "help/help"); // $NON-NLS-$
106     HelpSet hs = new HelpSet(cl, url);
107
108     if (hb == null)
109     {
110       /*
111        * create help broker first time (only)
112        */
113       hb = hs.createHelpBroker();
114     }
115
116     try
117     {
118       hb.setCurrentID(id.getId());
119     } catch (BadIDException bad)
120     {
121       System.out.println("Bad help link: " + id.getId()
122               + ": must match a target in help.jhm");
123       throw bad;
124     }
125
126     /*
127      * set Help visible - at its current location if it is already shown,
128      * else at a location as determined by the window manager
129      */
130     Point p = hb.getLocation();
131     hb.setLocation(p);
132     hb.setDisplayed(true);
133   }
134
135   /**
136    * Show the Help window at the root entry
137    * 
138    * @throws HelpSetException
139    */
140   public static void showHelpWindow() throws HelpSetException
141   {
142     showHelpWindow(HelpId.Home);
143   }
144 }