KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > compiere > apps > OnlineHelp


1 /******************************************************************************
2  * The contents of this file are subject to the Compiere License Version 1.1
3  * ("License"); You may not use this file except in compliance with the License
4  * You may obtain a copy of the License at http://www.compiere.org/license.html
5  * Software distributed under the License is distributed on an "AS IS" basis,
6  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
7  * the specific language governing rights and limitations under the License.
8  * The Original Code is Compiere ERP & CRM Business Solution
9  * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc.
10  * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, parts
11  * created by ComPiere are Copyright (C) ComPiere, Inc.; All Rights Reserved.
12  * Contributor(s): ______________________________________.
13  *****************************************************************************/

14 package org.compiere.apps;
15
16 import java.io.*;
17 import java.net.*;
18 import java.awt.*;
19 import java.util.*;
20 import javax.swing.*;
21 import javax.swing.event.*;
22 import javax.swing.text.*;
23 import javax.swing.text.html.*;
24
25 //import org.compiere.util.*;
26
import org.compiere.plaf.*;
27
28 /**
29  * Online Help Browser & Link.
30  *
31  * @author Jorg Janke
32  * @version $Id: OnlineHelp.java,v 1.5 2003/08/10 05:31:15 jjanke Exp $
33  */

34 public class OnlineHelp extends JEditorPane implements HyperlinkListener
35 {
36     /**
37      * Default Constructor
38      */

39     public OnlineHelp()
40     {
41         super ();
42         setEditable (false);
43         setContentType ("text/html");
44         addHyperlinkListener (this);
45     } // OnlineHelp
46

47     /**
48      * Constructor
49      * @param url URL to load
50      */

51     public OnlineHelp (String JavaDoc url)
52     {
53         this();
54         try
55         {
56             if (url != null && url.length() > 0)
57                 setPage(url);
58         }
59         catch (Exception JavaDoc e)
60         {
61             System.err.println("OnlineHelp URL=" + url + " - " + e);
62         }
63     } // OnlineHelp
64

65     /**
66      * Constructor
67      * @param loadOnline load online URL
68      */

69     public OnlineHelp (boolean loadOnline)
70     {
71         this(loadOnline ? BASE_URL : null);
72     } // OnlineHelp
73

74     /** Base of Onlune Help System */
75     protected static final String JavaDoc BASE_URL = "http://www.compiere.org/help/";
76
77     /*************************************************************************/
78
79     /**
80      * Hyperlink Listener
81      * @param e event
82      */

83     public void hyperlinkUpdate (HyperlinkEvent e)
84     {
85     // System.out.println("OnlineHelp.hyperlinkUpdate - " + e.getDescription() + " " + e.getURL());
86
if (e.getEventType() != HyperlinkEvent.EventType.ACTIVATED)
87             return;
88
89         this.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
90         //
91
if (e instanceof HTMLFrameHyperlinkEvent)
92         {
93             HTMLFrameHyperlinkEvent evt = (HTMLFrameHyperlinkEvent)e;
94             HTMLDocument doc = (HTMLDocument)getDocument();
95             doc.processHTMLFrameHyperlinkEvent(evt);
96         }
97         else if (e.getURL() == null)
98             // remove # of the reference
99
scrollToReference(e.getDescription().substring(1));
100         else
101         {
102             try
103             {
104                 setPage(e.getURL());
105             }
106             catch (Throwable JavaDoc t)
107             {
108                 System.err.println("Help.hyperlinkUpdate - " + t.toString());
109                 displayError("Error", e.getURL(), t);
110             }
111         }
112         this.setCursor(Cursor.getDefaultCursor());
113     } // hyperlinkUpdate
114

115     /**
116      * Set Text
117      * @param text text
118      */

119     public void setText (String JavaDoc text)
120     {
121         setBackground (CompierePLAF.getInfoBackground());
122         super.setText(text);
123         setCaretPosition(0); // scroll to top
124
} // setText
125

126     /**
127      * Load URL async
128      * @param url url
129      */

130     public void setPage (final URL url)
131     {
132         setBackground (Color.white);
133         Runnable JavaDoc pgm = new Runnable JavaDoc()
134         {
135             public void run()
136             {
137                 loadPage(url);
138             }
139         };
140         new Thread JavaDoc(pgm).start();
141     } // setPage
142

143     /**
144      * Load Page Async
145      * @param url url
146      */

147     private void loadPage (URL url)
148     {
149         try
150         {
151             super.setPage(url);
152         }
153         catch (Exception JavaDoc e)
154         {
155             displayError("Error: URL not found", url, e);
156         }
157     } // loadPage
158

159     /**
160      * Display Error message
161      * @param header header
162      * @param url url
163      * @param exception exception
164      */

165     protected void displayError (String JavaDoc header, Object JavaDoc url, Object JavaDoc exception)
166     {
167         StringBuffer JavaDoc msg = new StringBuffer JavaDoc ("<HTML><BODY>");
168         msg.append("<H1>").append(header).append("</H1>")
169             .append("<H3>URL=").append(url).append("</H3>")
170             .append("<H3>Error=").append(exception).append("</H3>")
171             .append("<p>&copy;&nbsp;Compiere &nbsp; ")
172             .append("<A HREF=\"").append(BASE_URL).append ("\">Online Help</A></p>")
173             .append("</BODY></HTML>");
174         setText(msg.toString());
175     } // displayError
176

177     /*************************************************************************/
178
179     /** Online links.
180      * Key=AD_Window_ID (as String) - Value=URL
181      */

182     private static HashMap s_links = new HashMap();
183     static
184     {
185         new Worker (BASE_URL, s_links).start();
186     }
187
188     /**
189      * Is Online Help available.
190      * @return true if available
191      */

192     public static boolean isAvailable()
193     {
194         return s_links.size() != 0;
195     } // isAvailable
196

197 } // OnlineHelp
198

199 /**
200  * Online Help Worker
201  */

202 class Worker extends Thread JavaDoc
203 {
204     /**
205      * Worker Constructor
206      * @param urlString url
207      * @param links links
208      */

209     Worker (String JavaDoc urlString, HashMap links)
210     {
211         m_urlString = urlString;
212         m_links = links;
213         setPriority(Thread.MIN_PRIORITY);
214     } // Worker
215

216     private String JavaDoc m_urlString = null;
217     private HashMap m_links = null;
218
219     /**
220      * Worker: Read available Online Help Pages
221      */

222     public void run()
223     {
224         if (m_links == null)
225             return;
226         URL url = null;
227         try
228         {
229             url = new URL (m_urlString);
230         }
231         catch (Exception JavaDoc e)
232         {
233             System.err.println("OnlineHelp.Worker.run (url) - " + e);
234         }
235         if (url == null)
236             return;
237
238         // Read Reference Page
239
try
240         {
241             URLConnection conn = url.openConnection();
242             InputStream is = conn.getInputStream();
243             HTMLEditorKit kit = new HTMLEditorKit();
244             HTMLDocument doc = (HTMLDocument)kit.createDefaultDocument();
245             doc.putProperty("IgnoreCharsetDirective", new Boolean JavaDoc(true));
246             kit.read (new InputStreamReader(is), doc, 0);
247
248             // Get The Links to the Help Pages
249
HTMLDocument.Iterator it = doc.getIterator(HTML.Tag.A);
250             Object JavaDoc target = null;
251             Object JavaDoc href = null;
252             while (it != null && it.isValid())
253             {
254                 AttributeSet as = it.getAttributes();
255                 // ~ HREF=/help/100/index.html target=Online title=My Test
256
// System.out.println("~ " + as);
257

258                 // key keys
259
if (target == null || href == null)
260                 {
261                     Enumeration en = as.getAttributeNames();
262                     while (en.hasMoreElements())
263                     {
264                         Object JavaDoc o = en.nextElement();
265                         if (target == null && o.toString().equals("target"))
266                             target = o; // javax.swing.text.html.HTML$Attribute
267
else if (href == null && o.toString().equals("href"))
268                             href = o;
269                     }
270                 }
271
272                 if ("Online".equals(as.getAttribute(target)))
273                 {
274                     // Format: /help/<AD_Window_ID>/index.html
275
String JavaDoc hrefString = (String JavaDoc)as.getAttribute(href);
276                     if (hrefString != null)
277                     {
278                         try
279                         {
280                     // System.err.println(hrefString);
281
String JavaDoc AD_Window_ID = hrefString.substring(hrefString.indexOf('/',1), hrefString.lastIndexOf('/'));
282                             m_links.put(AD_Window_ID, hrefString);
283                         }
284                         catch (Exception JavaDoc e)
285                         {
286                             System.err.println("OnlineHelp.Worker.run (help) - " + e);
287                         }
288                     }
289                 }
290                 it.next();
291             }
292             is.close();
293         }
294         catch (ConnectException e)
295         {
296         // System.err.println("OnlineHelp.Worker.run URL=" + url + " - " + e);
297
}
298         catch (UnknownHostException uhe)
299         {
300         // System.err.println("OnlineHelp.Worker.run " + uhe);
301
}
302         catch (Exception JavaDoc e)
303         {
304             System.err.println("OnlineHelp.Worker.run (e) " + e);
305         // e.printStackTrace();
306
}
307         catch (Throwable JavaDoc t)
308         {
309             System.err.println("OnlineHelp.Worker.run (t) " + t);
310         // t.printStackTrace();
311
}
312     // System.out.println("OnlineHelp - Links=" + m_links.size());
313
} // run
314

315     /**
316      * Diagnostics
317      * @param doc html document
318      * @param tag html tag
319      */

320     private void dumpTags (HTMLDocument doc, HTML.Tag tag)
321     {
322         System.out.println("Doc=" + doc.getBase() + ", Tag=" + tag);
323         HTMLDocument.Iterator it = doc.getIterator(tag);
324         while (it != null && it.isValid())
325         {
326             AttributeSet as = it.getAttributes();
327             System.out.println("~ " + as);
328             it.next();
329         }
330     } // printTags
331

332 } // Worker
333
Popular Tags