1 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.plaf.*; 27 28 34 public class OnlineHelp extends JEditorPane implements HyperlinkListener 35 { 36 39 public OnlineHelp() 40 { 41 super (); 42 setEditable (false); 43 setContentType ("text/html"); 44 addHyperlinkListener (this); 45 } 47 51 public OnlineHelp (String url) 52 { 53 this(); 54 try 55 { 56 if (url != null && url.length() > 0) 57 setPage(url); 58 } 59 catch (Exception e) 60 { 61 System.err.println("OnlineHelp URL=" + url + " - " + e); 62 } 63 } 65 69 public OnlineHelp (boolean loadOnline) 70 { 71 this(loadOnline ? BASE_URL : null); 72 } 74 75 protected static final String BASE_URL = "http://www.compiere.org/help/"; 76 77 78 79 83 public void hyperlinkUpdate (HyperlinkEvent e) 84 { 85 if (e.getEventType() != HyperlinkEvent.EventType.ACTIVATED) 87 return; 88 89 this.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); 90 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 scrollToReference(e.getDescription().substring(1)); 100 else 101 { 102 try 103 { 104 setPage(e.getURL()); 105 } 106 catch (Throwable t) 107 { 108 System.err.println("Help.hyperlinkUpdate - " + t.toString()); 109 displayError("Error", e.getURL(), t); 110 } 111 } 112 this.setCursor(Cursor.getDefaultCursor()); 113 } 115 119 public void setText (String text) 120 { 121 setBackground (CompierePLAF.getInfoBackground()); 122 super.setText(text); 123 setCaretPosition(0); } 126 130 public void setPage (final URL url) 131 { 132 setBackground (Color.white); 133 Runnable pgm = new Runnable () 134 { 135 public void run() 136 { 137 loadPage(url); 138 } 139 }; 140 new Thread (pgm).start(); 141 } 143 147 private void loadPage (URL url) 148 { 149 try 150 { 151 super.setPage(url); 152 } 153 catch (Exception e) 154 { 155 displayError("Error: URL not found", url, e); 156 } 157 } 159 165 protected void displayError (String header, Object url, Object exception) 166 { 167 StringBuffer msg = new StringBuffer ("<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>© Compiere ") 172 .append("<A HREF=\"").append(BASE_URL).append ("\">Online Help</A></p>") 173 .append("</BODY></HTML>"); 174 setText(msg.toString()); 175 } 177 178 179 182 private static HashMap s_links = new HashMap(); 183 static 184 { 185 new Worker (BASE_URL, s_links).start(); 186 } 187 188 192 public static boolean isAvailable() 193 { 194 return s_links.size() != 0; 195 } 197 } 199 202 class Worker extends Thread 203 { 204 209 Worker (String urlString, HashMap links) 210 { 211 m_urlString = urlString; 212 m_links = links; 213 setPriority(Thread.MIN_PRIORITY); 214 } 216 private String m_urlString = null; 217 private HashMap m_links = null; 218 219 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 e) 232 { 233 System.err.println("OnlineHelp.Worker.run (url) - " + e); 234 } 235 if (url == null) 236 return; 237 238 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 (true)); 246 kit.read (new InputStreamReader(is), doc, 0); 247 248 HTMLDocument.Iterator it = doc.getIterator(HTML.Tag.A); 250 Object target = null; 251 Object href = null; 252 while (it != null && it.isValid()) 253 { 254 AttributeSet as = it.getAttributes(); 255 258 if (target == null || href == null) 260 { 261 Enumeration en = as.getAttributeNames(); 262 while (en.hasMoreElements()) 263 { 264 Object o = en.nextElement(); 265 if (target == null && o.toString().equals("target")) 266 target = o; else if (href == null && o.toString().equals("href")) 268 href = o; 269 } 270 } 271 272 if ("Online".equals(as.getAttribute(target))) 273 { 274 String hrefString = (String )as.getAttribute(href); 276 if (hrefString != null) 277 { 278 try 279 { 280 String AD_Window_ID = hrefString.substring(hrefString.indexOf('/',1), hrefString.lastIndexOf('/')); 282 m_links.put(AD_Window_ID, hrefString); 283 } 284 catch (Exception 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 } 298 catch (UnknownHostException uhe) 299 { 300 } 302 catch (Exception e) 303 { 304 System.err.println("OnlineHelp.Worker.run (e) " + e); 305 } 307 catch (Throwable t) 308 { 309 System.err.println("OnlineHelp.Worker.run (t) " + t); 310 } 312 } 315 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 } 332 } | Popular Tags |