MokaByte Numero 28  -  Marzo 1999
 
Java Help
di 
Marangoni
Rosanna
Un nuovo strumento a disposizione per creare help in linea in applicazioni Java. Ma non solo..


La maggior parte delle applicazioni di una certa dimensione e complessità, solitamente richiede un sistema di help in linea che permetta all’utente di utilizzare le funzionalità che queste forniscono

 
Il problema si pone, innanzitutto, nella presentazione del programma stesso, poiché non sempre l’utente finale ha un’idea precisa di tutte le funzionalità a disposizione. Risulta quindi utile poter fornire un supporto valido, ed allo stesso tempo semplice, per l’utente che illustri le potenzialità dell’applicazione e il modo per ottenerle. Questo perché non risulta sempre chiaro, specialmente all’utente inesperto, "come" effettuare una certa procedura o come ottenere un certo risultato dal programma.In questo senso, JavaHelp è uno strumento molto utile per la creazione di help in linea, in modo particolare per applicazioni Java.
 

Cos’è JavaHelp?

JavaHelp è un insieme di API e, allo stesso tempo, anche un help system scritto interamente in Java e creato "su misura" per il linguaggio Java. Quest’ultima caratteristica di JavaHelp lo rende particolarmente interessante: il fatto di essere stato stato completamente progettato e realizzato secondo la "filosofia" di Java, gli permette di ereditarne i benefici, primo tra tutti la portabilità: infatti è possibile pensare di realizzare help e distribuirli tramite World Wide Web disinteressandoci completamente della piattaforma di destinazione, su qualsiasi ambiente che disponga di una JVM (Java Virtual Machine) o del JRE (Java Runtime Environment).
Il sistema JavaHelp permette la realizzazione di un help in linea con la capacità di navigare, cercare e visualizzare le informazioni rendendo più semplice, per l’utente finale, la comprensione dell’applicazione e delle sue funzionalità.
Il sistema di help utilizza un’intelligente combinazione di HTML 3.2 e XML per rendere "user friendly" l’accesso alle informazioni, e per creare Table Of Contents (TOC), indici, e modalità di ricerca di un argomento. 
Il sistema permette anche la ricerca sul client o sul server (in particolar modo per le applicazioni industriali nelle quali le informazioni sono residenti su in server di grandi dimensioni) e comprende sistemi avanzati quali custom viewers, navigators e motori di ricerca.
In aggiunta, vengono forniti anche strumenti per la realizzazione di help contenenti anche finestre di pop-up, collegamenti "see also", glossari, tabelle, immagini, suoni, animazioni e video. L’unico strumento non ancora disponibile sono le piccole finestre pop-up "what is this?".
 
 
 
 
 
 
 
 
 
 
 

A cosa può servire JavaHelp?

Il sistema JavaHelp fornisce, quindi, uno strumento in più agli sviluppatori Java per creare help in linea per:

  • Componenti JavaBean.
  • Applicazioni (attraverso il network oppure in locale).
  • Applet.
  • Desktops.
  • Pagine HTML.
E’ bene ricordare inoltre che JavaHelp può essere utile anche a chi sviluppa in linguaggi diversi (come il C++), tramite la creazione di un help server: JavaHelp è stato infatti studiato per supportare accessi remoti via network e, come vedremo più avanti, anche per essere utilizzato come help server. 
In tal modo si possono facilmente realizzare sistemi help distribuiti come se fossero semplici help in locale, caratteristica questa che non si riesce ad ottenere facilmente tramite l’utilizzo di sistemi di realizzazione di help in linea forniti con altri linguaggi.
JavaHelp è, quindi, utilizzabile in molteplici situazioni: dalla più semplice che si propone solamente di creare un punto informazioni slegato da un’applicazione, a soluzioni più complesse come applicazioni tramite network o help server.
 
 

Le Caratteristiche di JavaHelp.

Le caratteristiche principali di JavaHelp sono le seguenti:

  1. Help Viewer: una finestra che consiste in una toolbar, in un content pane e in un navigation pane. Il content pane utilizza HTML 3.2 come formato per la visualizzazione delle informazioni. In quest’area possono essere inoltre inclusi degli applet per aggiungere ulteriori funzionalità o animazioni. Il Navigator pane consiste di un’interfaccia grafica che permette all’utente di spostarsi dalla Table of contents, agli indici alla visualizzazione a tutto testo.
  2. Table of contents (TOC): consiste nella visualizzazione degli argomenti contenuti nell’help tramite una struttura gerarchica espandibile o collassabile. Supporta un numero illimitato di livelli gerarchici e fusioni (merging) di più TOCs. Segue gli standard World Wide Web Consortium (W3C).

  3.  

     
     
     


     

  4. Indici: supporta il merging di più indici. 
  5. Full-text-search: è studiato per essere flessibile e configurabile. Supporta una sintassi per le query in linguaggio naturale. Il motore di ricerca può risiedere o sul client o sul server.
  6. Compressione e incapsulamento: il sistema JavaHelp permette di comprimere e incapsulare l’intero sistema di help in un solo file JAR (Java ARchive).
  7. Embeddable help windows: le finestre di help (singole o in combinazione) possono essere incluse direttamente nell’interfaccia dell’applicazione.
  8. Customization: Le API di JavaHelp sono studiate per permettere la massima flessibilità nel migliorare ed estendere l’interfaccia utente e le funzionalità in base alle richieste. Le modalità più comuni con cui il sistema JavaHelp può essere esteso, includono custom navigator, motori di ricerca, e HTML viewer.
  9. Context Sensitive Help: è fornito con JavaHelp API tramite lo Swing Toolkit della JFC (Java Foundation Classes). Le JavaHelp API supportano anche l’ID mapping.
  10. Possibilità di merging: Le JavaHelp API forniscono un meccanismo di supporto che permette la fusione di diversi componenti che contengono le informazioni dell’help prima di essere presentate all’utente. Questo meccanismo può essere applicato ai TOC, agli indici ed ai database di ricerca.
  11. Aggiornamento automatico: il software JavaHelp permette l’aggiornamento dell’help in linea di un programma, dopo essere stato realizzato, rendendo possibile la sostituzione dell’intero sistema di help o soltanto di una parte di esso (se distribuito tramite diversi file).

 

La struttura di JavaHelp
La specifica JavaHelp utilizza i concetti Swing, è basata sulla piattaforma JDK 1.2 ed è distribuita come una standard extension. Il JDK 1.2 fornisce alcune caratteristiche utili per un help in linea quali un maggior set di API che include suoni e grafica 2D e 3D ed il protocollo jar: .
I componenti della GUI (Graphical User Interface) di JavaHelp, seguono le metodologie di progettazione Swing, che forniscono un architettura model-view-controller e il modello di delegazione ai componenti. Il controllo Swing, agisce come interfaccia principale per lo sviluppatore. Tutti i componenti dell’interfaccia grafica sono controllati da un oggetto JFC (Java Foundation Classes).
Quando un nuovo componente Swing è creato, questo richiede all’UIFactory di creare un oggetto ComponentUI. Uno Swing control, in seguito, delega i processi di rendering, sizing e le varie operazioni di input output al ComponentUI stesso.
I metodi installUI e deinstallUI aggiungono funzioni e strutture al singolo ComponentUI aggiungendo listeners, layout manager e la possibilità di ereditarietà.
 

Lo Swing è disponibile anche per JDK 1.1 per rendere possibile l’implementazione di JavaHelp 1.0 anche per la piattaforma JDK 1.1 .
Possiamo dire che, quando si crea un help in linea, si utilizzano le classi contenute nel package javax.javahelp e, in particolare, la classe HelpSet e l’interfaccia JavaHelp. HelpSet è un insieme di argomenti con le viste di navigazione e le informazioni di mapping. Un oggetto JavaHelp è un’astrazione della presentazione per uno o più HelpSet. Un’applicazione utilizza in oggetto JavaHelp per presentare le informazioni e gli argomenti all’utente.
Le informazioni di un dato HelpSet sono specificate in un Helpset file che contiene le referenze ai map file. I map file servono alle applicazioni per ritrovare i files di informazioni (scritti in formato HTML) tramite identificatore. Questo perché le applicazioni stesse non utilizzano URL per localizzare i files, ma identificatori mappati nei map file appunto.
Vi è un’altra classe molto importante: JHelpNavigator. Un Help Navigator è una sottoclasse di JHelpNavigator che permette l’implementazione di navigational view, ossia di presentazioni delle informazioni "navigabili" (definite anche meta-data perché descrivono le informazioni vere e proprie). Anche la classe JHelpNavigator è un componente Swing con la capacità di supportare la separazione delle presentazioni delle Interfacce Utente.
Per quanto riguarda le altre classi importanti di JavaHelp possiamo nominare javax.javahelp.TOC e javax.javahelp.TOC.format che riguardano le Table of Contents e il loro formato standard, javax.javahelp.Index e javax.javahelp.Index.format per gli indici e javax.javahelp.BasicSearch e javax.javahelp.BasicSearch.format per le ricerche standard.
E’ importante sottolineare che JavaHelp utilizza protocolli standard (file:, http:, ftp: ) quando sono specificati degli URL nei files Helpset e Map. In particolare è stato aggiunto il protocollo jar: per permettere l’accesso ai files contenuti in un file JAR dato che, come accennato in precedenza, una delle caratteristiche principali di JavaHelp è appunto l’incapsulamento dei files in un file JAR. A questo proposito nel prossimo paragrafo approfondiremo il meccanismo di incapsulamento utilizzato nei JAR files.
 
 
 

I JAR files (Java ARchive) e JavaHelp
Utilizzati già nel contesto dei Bean, i JAR files (molto simili ai files zip) sono stati pensati inizialmente per scaricare in un’unica transazione http i class file di un applet, immagini, suoni, files serializzati, etc. Ogni file JAR contiene un Manifesto che ne descrive i files contenuti che devono essere firmati digitalmente.
Nel caso di JavaHelp, i file JAR sono utilizzati per raggruppare ed allo stesso tempo comprimere i file e i dati dell’help tramite protocollo jar: .
 


 

I file JAR possono essere utilizzati in diversi modi: L’Helpset può essere fuori dal file JAR permettendo un aggiornamento più agile dell’Helpset file. 
La sintassi con il punto esclamativo "!", è utilizzata per specificare gli URL relativi al JAR file in cui è localizzato il map file.
Al contrario il JAR files potrebbe contenere, oltre ai map files ed ai content files, anche l’Helpset file. In questo caso si ottiene che tutti gli indirizzamenti interni sono riferiti all’unico URL dell’Helpset file. Al contrario, questa struttura comporta nuovamente la creazione del JAR file nel caso si debba modificare l’Helpset file. Questa configurazione è utile nel caso in cui l’help debba essere usato così come è stato scaricato, come nel caso degli applet.
E’ importante notare come i dati dell’help non debbano necessariamente essere organizzati in un singlo file JAR; l’applet può creare diversi HelpSets e presentarli contemporaneamente.
Qualche esempio di utilizzo di JavaHelp. 

  • un’applicazione in locale

Senza entrare troppo nel dettaglio, possiamo analizzare il caso di una semplice applicazione in locale che sfrutta JavaHelp per la creazione di un help in linea.
In questo caso l’applicazione richiede la creazione di un un’istanza di JavaHelp, carica su questa i dati riguardanti l’help e quindi interagisce con questa istanza o tramite la richiesta di informazioni da visualizzare o nascondere, oppure richiedendo la visualizzazione di un argomento specifico (identificato da un ID).
I dati e le informazioni contenute nell’help possono essere anche inserite direttamente nella finestra applicazione: in questo caso i componenti della JFC che implementano le specifiche di JavaHelp vengono direttamente inseriti nel Frame dell’applicazione.
L’applicazione, in questo caso può creare una presentazione personalizzata utilizzando i componenti di JFC.

  • Network Application

  •  

     
     
     


    Un caso molto simile al precedente consiste in un’applicazione che accede ad un help tramite la rete. La localizzazione dei dati è trasparente.

  • Component Help: una delle utilizzazioni più importanti di JavaHelp, considerata anche l’enorme spinta data da Java in questa direzione, è sicuramente nella riutilizzazione dei componenti Java (Bean). In questo caso, infatti, un componente software riutilizzabile quale è un JavaBean, può essere descritto non soltanto dal punto di vista della programmazione (tramite BeanInfo), ma anche dal punto di vista dell’utente che lo andrà ad utilizzare probabilmente collegato ad altri Bean.

  •  

     
     
     

    JavaHelp fornisce, in questo caso, la funzione di merge che permette la fusione dei differenti help collegati ai vari Bean. 
    Questa fusione può essere attuata in modi diversi: ad esempio la table of contents information di ogni componente può essere visualizzata una dopo l’altra per creare una nuova table of contents unificata dove le varie informazioni riguardanti i componenti sono riordinate tramite indici.

    Così come un HelpSet può essere caricato e scaricato da un’istanza JavaHelp, allo stesso modo le informazioni presenti richiedono di essere aggiornate. JavaHelp fornisce un meccanismo flessibile per unire queste informazioni.

  • Un Help Server: in alcuni casi, può essere necessario separare le applicazioni dal processo che presenta le informazioni dell’help. In questo caso il processo dell’applicazione può fare richiesta all’interno del processo di JavaHelp (help server) tramite un meccanismo RPC.

  •  

     
     
     

    Il modello di help server può essere utile per applicazioni non scritte in Java e che non includono una JVM. Può essere inoltre utile per molteplici applicazioni che possono condividere un help server comune.

  • Un applet: un altro utilizzo molto utile di JavaHelp, peculiare della filosofia Java, si può ritrovare nella realizzazione di help in linea per Applet. In questo caso l’applet di una pagina HTML crea un istanza di HelpSet quindi invoca HelpSet.createJavaHelp().
Se la piattaforma del browser contiene un’implementazione di JavaHelp, questa può essere stata fornita col browser, altrimenti può essere stata scaricata dal client nel CLASSPATH. L’implementazione deve utilizzare lo Swing HTML viewer oppure qualche HTML viewer fornito con il Web Browser.
E’ però possibile che un browser perfettamente conforme a JDK 1.2 non contenga JavaHelp nel proprio CLASSPATH. In questo caso, se la pagina fa riferimento all’implementazione standard di JavaHelp, questa può essere automaticamente scaricata ed eseguita.
 
 
 

Conclusioni
Come abbiamo visto in questo articolo, JavaHelp si impone come un valido strumento per la creazione di help in linea e di sistemi di gestione delle informazioni. La sua innata vocazione al network lo rende particolarmente utile ed interessante in tutti quei casi in cui si necessiti di informazioni centralizzate, costantemente aggiornate e distribuite in tempo reale. Sicuramente questo nuovo strumento contribuirà con decisione ad una diffusione ancora più capillare di Java e delle sue applicazioni soprattutto nell’ambito di architetture distribuite.
Inoltre è da sottolineare che i principali produttori di tools di sviluppo di sistemi help, hanno annunciato di supportare il nuovo standard. La lista include Blue Sky (RoboHELP), Quadralay (WebWorks), ForeFront (ForeHTML), Hyperact (eAuthor), and WexTech (DocToHelp), e molti altri. In questo senso si può concludere che gli sviluppatori che hanno scritto applicazioni di una certa dimensione e gli utenti che hanno incontrato dei problemi nel comprendere come utilizzarle, possono trarre vantaggio dall’utilizzo di JavaHelp per distribuire le informazioni di cui necessitano.
 
 

Bibliografia

[1] "The Java Language Environment. A White Paper", James Gosling, Henry McGilton.
[2] "Java Apps Get Help!", Eric Amnstrong, 27 Marzo 1998. (http://java.sun.com/products/javahelp/j1-98-help.html).
[3] "JAVAHELPTM SOFTWARE FAQ" (http://java.sun.com/products/javahelp/faq.html).
[4] "JavaHelp 0.33 - Introduction for the Reviewers", Copyright 1998 Sun Microsystems.
[5] "JavaHelpTM 0.33 – Overview", Copyright 1998 Sun Microsystems.
[6] "JavaHelpTM 0.33 – Scenarios", Copyright 1998 Sun Microsystems.
[7] "JavaHelpTM 0.33 – JavaHelp Class Structure ", Copyright 1998 Sun Microsystems.
[8] "STC 45th Annual Conference, May 1998: Slides from the JavaHelp presentation".
(http://java.sun.com/products/javahelp/events.html).


 
 
 

MokaByte Web  1999 
www.mokabyte.it

MokaByte ricerca nuovi collaboratori. 
Chi volesse mettersi in contatto con noi può farlo scrivendo a mokainfo@mokabyte.it