IKommHelp:Impl. Programmierung

From Wiki

Jump to: navigation, search

2.Implementierung

2.3. Programmierung



Contents

1. HelpBrowser-Tool

geänderte Dateien:

de.unido.daffodil.gui PaddleDesktop.java -> Einbinden des Tools

neue Dateien:

de.izsoz.daffodil.tools.HelpBrowserTool.java

de.izsoz.daffodil.tools.HelpBrowserView.java

de.izsoz.daffodil.utils.WikiParser.java

Vorgehen:

HelpBrowserView.java & HeplBrowserTool.java

Die HelpBrowserView-Klasse ist eine relativ simple Klasse, die hauptsächlich die benötigten GUI-Elemente für das HelpTool bereitstellt: Rahmen, Menü, Vor- und Zurück Button. Der zentrale Bestandteil besteht in der jEditorPane zur Darstellung des HTML-Hilfe-Inhalts. Die Klasse implementiert das Interface ActionListener um auf Mausklicks im Menü zu reagieren. Die meiste eigentliche "Arbeit" findet in der WikiParser-Klasse statt. Außerdem wird im HelpBrowserTool noch das VideoScreen-Tool eingebunden.

Die HelpBrowserTool-Klasse beinhaltet keine von uns zusätzlich programmierten Funktionalitäten, da das HelpTool nicht komplex mit anderen Daffodil-Komponenten interagieren muss.

WikiParser.java

Der WikiParser dient dazu den eigentlichen Inhalt aus dem Wiki zu rauszuschneiden, ein wenig zu formatieren und an den HelpBrowser zu übergeben. Außerdem liefert er die nötigen Informationen zur Navigation im Menü. Ursprünglich hatten wir den Parser in PHP geschrieben, aber hatten uns dann doch dafür entschieden, ihn direkt in Daffodil in Java zu integrieren.

Die Schnittstellen zur HelpBrowserView-Klasse bilden die Methoden parseThis(), getNextPage(), getPrevPage() und getMenu(), welche in jener aufgerufen werden.

  • getMenu()

Diese Methode parst die Index-Seite der jeweiligen Sprache im Wiki (z.B. DaffodilHelpDe:Index) und baut aus der hierarchischen Liste von dieser Seite das Hilfemenü (JMenu) auf, welches sie am Ende zurückgibt. Als zu Grunde liegender XML-Parser wurde zuerst ein DOM-Parser benutzt, später allerdings aus Performance-Gründen auf SAX umgestellt.

  • getNextPage() & getPrevPage()

Während des Parsens des Indexes wird auch ein Vector mit allen Menüpunkten angelegt, der nun diesen beiden Methoden dient um den Namen der jeweils nächsten bzw. vorherigen Seite zu ermitteln. Diese werden für die Vor- und Zurück-Buttons benötigt.

  • parseThis()

Die parseThis()-Methode ruft eine Reihe weiterer Methoden auf um den Inhalt des Wikis für den HelpBrowser aufzubereiten. Zuerst wird über readWikiPage() die entsprechende Seite des Wikis aufgerufen und der HTML-Source eingelesen. Aus diesem wird dann mit Hilfe der cutOutContent()-Methode der eigentliche Inhalt der Seite (ohne Kopf, Menü, etc.) rausgeschnitten. Dies geschieht anhand der start- bzw. end-Kommentare im Quelltext. Danach folgen noch removeTags() und replaceThings() um ungewollte Teile im Source loszuwerden. Schließlich wird der nun fertige formatierte Content zurückgegeben und kann nun im HelpTool ausgegeben werden.

2. VideoScreen-"Tool"

Der "VideoScreen" ist kein eigenständiges Tool, wie zum Beispiel das ChatTool. Es ist eher als Erweiterung zum HelpBrowserTool zu sehen. Es bekommt den Webspeicherpfad (Link) eines Videos übergeben und zeigt diesen dann in einem eigenständigen Fenster an. Dieses verfügt neben der Videofläche auch noch über eine Navigationsleiste mit einfachen Steuerfunktionen (Play/Pause/Stop, Vorspringen/Zurückspringen, Zeitanzeige). Der VideoScreen besteht nur aus einer Datei (VideoScreen.java), die die Hauptklasse "VideoScreen" enthält. Diese verfügt über zwei Konstruktoren, einen ohne Parameter (Standardvideo wird angezeigt) und einen mit Stringübergabe. Die komplette URL des anzuzeigenden Videos muss im String stehen, damit dieses angezeigt werden kann. Das Video muss den Vorraussetzungen des JMF ensprechen, was die Wahl des Codex/Format angeht (Supported Formats). Der VideoScreen öffnet sich in einem von Daffodil unabhängigen Fenster. Dies hat eine feste Startgröße (derzeit 400x320 Pixel) die aber vom User durchaus verändert werden kann. Hierbei wird das Video aber ensprechend gezerrt! Das Fenster arbeitet zwar wie ein Popup, bleibt aber nicht "on top", der User kann also jederzeit die darunterliegende Daffodil-Anwendung erreichen. Der VideoScreen läuft in einem eigenen Threat, der User kann also nebenbei ganz normal mit Daffodil weiterarbeiten. Außerdem ist es möglich mehrere Videofenster zu öffnen und den Inhalt vorladen (cachen) zu lassen. Dieses Feature ist aber erst sinnvoll, wenn auch verschiedene Videoinhalte angeboten werden.


Um den VideoScreen aus anderen Programmteilen ansprechen zu können, sind folgende Codezeilen nötig:

 import de.izsoz.daffodil.tools.helpbrowser.VideoScreen;
 import javax.swing.SwingUtilities;
 
 SwingUtilities.invokeLater(new Runnable() {
    public void run() {
       VideoScreen myVideoScreen = new VideoScreen("URL");
       myVideoScreen.show();
    }
 });

Fehler beim Videoaufruf werden dem User in einer Messagebox mitgeteilt und zusätzlich auf der Console ausgegeben. In der Console finden sich auch alle Statusänderungen des Videos (z.B. Start oder Stop des Videos, aber auch Fortschritt den Caching) wieder.


Erweiterungen an Daffodil:

Das JMF wurde unter daffodil/Lib eingebunden und wird so zusammen mit Daffodil ausgeliefert. Das heißt der User, der Daffodil bei sich installiert, hat danach alle benötigten Resourcen um auch die integrierten Videos anzuzeigen.

geänderte Dateien:

de.izsoz.daffodil.tools HelpBrowserScreen.java

--> Zusätzlicher Button in der Navigation um das Video zu öffnen

--> ActionListener für den Button


neue Dateien:

de.izsoz.daffodil.tools.helpbrowser VideoScreen.java

--> stellt das Video in einem Fenster dar

--> bietet zusätzlich eine Navigationsleiste

3. Internationalisierung

geänderte Dateien:

--> resources/daffodil_language_en.properties Textdockument in englische Sprache


--> resources/daffodil_language_de.properties Textdokument in deutsche Sprache


--> Views-Dateien der verschiedenen Tools

  • Methode:
   private static ToolController tc = ToolController.getInstance()

um die Strings zu localisieren

  • Unbenennung der Strings in die folgende Form:
   String myString = tc.getLocalisedString("daffodil.tools.toolname.somestring");

neue Dateien:

resources/daffodil_language_es.properties

Text-Datei in spanische Sprache

Vorgehen:

Eine Intention von Daffodil ist es, eine möglichst variable Benutzeroberfläche zu bieten. Besonders wichtig im Hinblick auf internationale Nutzer war somit die Anpassung der Sprachoptionen, also das Nutzen des Programmes in mehreren Sprachen. Um dieses Ziel zu erreichen nutzen wir das Prinzip der Internationalisierung. Internationalisierung bedeutet in der Informatik bzw. in der Softwareentwicklung, ein Programm so zu gestalten, dass es leicht (ohne den Quellcode ändern zu müssen) an andere Sprachen und Kulturen angepasst werden kann

Da es viel zu aufwendig wäre, den gesamten Daffodil-Code jedesmal zu durchsuchen um entsprechende Änderungen für die Implementation einer neuen Sprachen zu machen, werden die einzelnen Strings externalisiert. Das bedeutet, dass wir die für den Benutzer sichtbaren Texte, z.B. die Tooltips, aus dem Quellcode herauskopieren und in eine speziell dafür angelegte Datei legen. Im Code selber bleibt nur eine Referenz zurück, wo die entsprechende Datei zu finden ist. Die geschieht in Java mit der Methode ToolController.

Da man nun alle Strings in einer Datei hat, muss man diese nur noch übersetzen. Eine Änderung des Quellcodes ist nicht mehr erforderlich.

Zu Beginn bestand unsere Aufgabe also darin, erstmal die verschiedenen Strings der Tools zu externalisieren. Eine weitere Aufgabe war die Übersetzung der Texte ins Spanische, darum kümmerte sich Palmira Puglianini-Guerra.

Der aktuelle Stand ist, dass weitgehend alle Texte externalisiert wurden, und auch schon ins Spanische übersetzt worden sind. Auch die Einbettung einer neuen Sprache sollte nun, mithilfe der ausgelagerten Strings, relativ einfach erfolgen.


Zur Gesamtübersicht: Abschlussbericht Praxisprojekt IKommHelp Wintersemester 2005/2006 Gruppe 1

Personal tools