New Java Help Browser for Scilab.
[scilab.git] / scilab / modules / gui / src / java / org / scilab / modules / gui / bridge / helpbrowser / SwingScilabHelpBrowser.java
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) 2008 - INRIA - Vincent Couvert
4  * 
5  * This file must be used under the terms of the CeCILL.
6  * This source file is licensed as described in the file COPYING, which
7  * you should have received as part of this distribution.  The terms
8  * are also available at    
9  * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
10  *
11  */
12 package org.scilab.modules.gui.bridge.helpbrowser;
13
14 import java.io.File;
15 import java.net.MalformedURLException;
16 import java.net.URI;
17 import java.net.URL;
18
19 import javax.help.BadIDException;
20 import javax.help.DefaultHelpModel;
21 import javax.help.HelpSet;
22 import javax.help.HelpSetException;
23 import javax.help.JHelp;
24
25 import org.scilab.modules.gui.helpbrowser.SimpleHelpBrowser;
26
27 /**
28  * Scilab Help Browser in GUIs
29  * @author Vincent COUVERT
30  */
31 public class SwingScilabHelpBrowser extends JHelp implements SimpleHelpBrowser {
32         
33         private static final long serialVersionUID = 5306766011092074961L;
34
35     private HelpSet helpSet;
36
37     /**
38          * Constructor
39          */
40         public SwingScilabHelpBrowser() {
41                 super();
42
43         File[] jarFiles = new File[1];
44         jarFiles[0] = new File(System.getenv("SCI") + "/thirdparty/scilab_help.jar");
45         for (int i = 0; i < jarFiles.length; ++i) {
46             URI jarURI = jarFiles[i].toURI();
47
48             StringBuilder buffer = new StringBuilder("jar:");
49             buffer.append(jarURI);
50             buffer.append("!/");
51             buffer.append(rootName(jarURI));
52             buffer.append("/jhelpset.hs");
53
54             URL helpSetURL = null;
55             try {
56                 helpSetURL = new URL(buffer.toString());
57             } catch (MalformedURLException cannotHappen) {
58                 cannotHappen.printStackTrace();
59                 continue;
60             }
61
62             try {
63                                 helpSet = new HelpSet(/*classLoader*/ null, helpSetURL);
64                         } catch (HelpSetException e) {
65                                 // TODO Auto-generated catch block
66                                 e.printStackTrace();
67                         }
68             this.setModel(new DefaultHelpModel(helpSet));
69         }
70         }
71         
72         /**
73          * Display the Help Browser
74          */
75         public void display() {
76                 
77         }
78         
79         /**
80          * Display the matching items for a specified keyword
81          * @param keyword the keyword
82          * @return true if the keyword exists
83          */
84         public boolean searchKeywork(String keyword) {
85                 try {
86                         setCurrentID(keyword);
87                         return true;
88                 } catch (BadIDException e) {
89                         return false;
90                 }
91         }
92         
93         /**
94          * Close the HelpBrowser
95          */
96         public void close() {
97                 
98         }
99
100         
101     /**
102      * Get teh root name of an URI
103      * @param uri the URI
104      * @return the root name
105      */
106     private static String rootName(URI uri) {
107         String path = uri.toString();
108
109         String baseName;
110         int pos = path.lastIndexOf('/');
111         if (pos < 0) {
112             baseName = path;
113         } else {
114             baseName = path.substring(pos + 1);
115         }
116         String rootName;
117         pos = baseName.lastIndexOf('.');
118         if (pos < 0) {
119             rootName = baseName;
120         } else {
121             rootName = baseName.substring(0, pos);
122         }
123
124         return rootName;
125     }
126
127 }