Erweiterung von SECONDO
Transcription
Erweiterung von SECONDO
Erweiterung von SECONDO Holger Hennings Javagui Dokumentation Erweiterung von SECONDO UserInterfaces Erstellung eines neuen Viewers Beispiel Inquiry-Viewer Erweiterung des HoeseViewers Holger Hennings Objekte in Textdarstellung Graphische Objekte Graphische Objekte Raum-Zeitliche Objekte Label und Manipulation anderer Objekte Anzeige im TTY Fakultät für Mathematik und Informatik Datenbanksysteme für neue Anwendungen FernUniversität in Hagen 10. Oktober 2015 c 2015 FernUniversität in Hagen Erweiterung von SECONDO Holger Hennings Javagui Dokumentation Erstellung eines neuen Viewers Beispiel Inquiry-Viewer Erweiterung des HoeseViewers Objekte in Textdarstellung Graphische Objekte Graphische Objekte Raum-Zeitliche Objekte Label und Manipulation anderer Objekte Anzeige im TTY Basierend auf den Folien von Dr. Thomas Behr vom WS 2014/2015 Outline Erweiterung von SECONDO Holger Hennings 1 Javagui Dokumentation Erstellung eines neuen Viewers Beispiel - Inquiry-Viewer Beispiel Inquiry-Viewer Erweiterung des HoeseViewers Erweiterung des HoeseViewers Objekte in Textdarstellung Graphische Objekte Graphische Objekte Raum-Zeitliche Objekte Label und Manipulation anderer Objekte Objekte in Textdarstellung Graphische Objekte Graphische Objekte Raum-Zeitliche Objekte Label und Manipulation anderer Objekte Anzeige im TTY Javagui Dokumentation Erstellung eines neuen Viewers 2 Anzeige im TTY Erweiterung von SECONDO Holger Hennings Optimizer-Server Überblick Javagui Javagui Tools nested list ... Optimizer-Interface Erstellung eines neuen Viewers Beispiel Inquiry-Viewer Erweiterung des HoeseViewers Objekte in Textdarstellung Secondo-Server Dokumentation Command-Panel Secondo-Interface Object-Manager shp Import-Manager dbf nested list Graphische Objekte Graphische Objekte Raum-Zeitliche Objekte ViewerControl HoeseViewer StandardViewer ...... Label und Manipulation anderer Objekte Anzeige im TTY DsplClass-1 DsplClass-2 ...... Files Dokumentation Erweiterung von SECONDO Holger Hennings Javagui Dokumentation Erstellung eines neuen Viewers Beispiel Inquiry-Viewer Erweiterung des HoeseViewers Objekte in Textdarstellung Graphische Objekte Graphische Objekte Raum-Zeitliche Objekte Label und Manipulation anderer Objekte Anzeige im TTY im Javagui Verzeichnis make doc neues Verzeichnis doc enthält javadoc generierte HTML Seiten Registrieren eines Viewers: makefile.viewers im Verzeichnis Secondo/Javagui/viewer Erweiterung von SECONDO Holger Hennings Javagui Dokumentation Erstellung eines neuen Viewers Beispiel Inquiry-Viewer Erweiterung des HoeseViewers Objekte in Textdarstellung Graphische Objekte Graphische Objekte Raum-Zeitliche Objekte Label und Manipulation anderer Objekte Anzeige im TTY # add below new Viewer classes or subdirectories to compile VIEWER_CLASSES := StandardViewer.class VIEWER_CLASSES += FormattedViewer.class VIEWER_CLASSES += InquiryViewer.class VIEWER_CLASSES += QueryViewer.class VIEWER_CLASSES += RelViewer.class VIEWER_CLASSES += Viewer3D.class VIEWER_CLASSES += Fuzzy2D.class VIEWER_CLASSES += RelSplit.class VIEWER_CLASSES += HoeseViewer.class . . . VIEWER_DIRS := hoese VIEWER_DIRS += fuzzy2d VIEWER_DIRS += midi VIEWER_DIRS += relsplit . . Nützliche Klassen Erweiterung von SECONDO Holger Hennings Javagui Dokumentation Erstellung eines neuen Viewers Beispiel Inquiry-Viewer Erweiterung des HoeseViewers Objekte in Textdarstellung Graphische Objekte Graphische Objekte Raum-Zeitliche Objekte Label und Manipulation anderer Objekte Anzeige im TTY Mehr als 600 .java Dateien ID IDManager MenuVector ListExpr SecondoObject SecondoViewer Reporter ID und IDManager Erweiterung von SECONDO Holger Hennings Javagui Dokumentation Erstellung eines neuen Viewers Beispiel Inquiry-Viewer Erweiterung des HoeseViewers Objekte in Textdarstellung Graphische Objekte Graphische Objekte Raum-Zeitliche Objekte Label und Manipulation anderer Objekte Anzeige im TTY Paket gui.idmanager nur für Viewer, die Secondo-Objekte erzeugen interessant ID: eindeutige ID für Secondo-Objekte (mit gleichem Wert) IDManager: liefert noch nicht verwendete ID (getNextID Methode) MenuVector Erweiterung von SECONDO Holger Hennings Javagui Dokumentation Erstellung eines neuen Viewers Beispiel Inquiry-Viewer Erweiterung des HoeseViewers Objekte in Textdarstellung Graphische Objekte Graphische Objekte Raum-Zeitliche Objekte Label und Manipulation anderer Objekte Anzeige im TTY Paket viewer dient der Erweiterung des Hauptmenüs der Javagui bietet Funktionen zum Einfügen und Löschen von Menüeinträgen im Normalfall wird eine Instanz im Konstruktor erzeugt und gefüllt Der erstellte MenuVector wird in der getMenuVector Methode des Viewers zurückgeliefert ListExpr Erweiterung von SECONDO Holger Hennings Javagui Dokumentation Erstellung eines neuen Viewers Beispiel Inquiry-Viewer Erweiterung des HoeseViewers Objekte in Textdarstellung Graphische Objekte Graphische Objekte Raum-Zeitliche Objekte Label und Manipulation anderer Objekte Anzeige im TTY Paket sj.lang Java-Umsetzung von verschachtelten Listen bietet nahezu identische Funktionalität wie auf C++ Seite Methoden wie twoElemList(..), symbolValue(..), first() etc. SecondoObject Erweiterung von SECONDO Holger Hennings Javagui Dokumentation Erstellung eines neuen Viewers Beispiel Inquiry-Viewer Erweiterung des HoeseViewers Objekte in Textdarstellung Graphische Objekte Graphische Objekte Raum-Zeitliche Objekte Label und Manipulation anderer Objekte Anzeige im TTY Paket gui enthält ID, Name und Listendarstellung muss vom Viewer analysiert und ins eigene Format umgesetzt werden interessanteste Methode toListExpr() Rückgabe: Gibt den Wert des Objekts als nested list zurück Reporter Erweiterung von SECONDO Holger Hennings Javagui Dokumentation Erstellung eines neuen Viewers Beispiel Inquiry-Viewer Erweiterung des HoeseViewers Objekte in Textdarstellung Graphische Objekte Graphische Objekte Raum-Zeitliche Objekte Label und Manipulation anderer Objekte Anzeige im TTY Paket tools bietet Funktionen für Konsolenausgaben Pop-Up Fenster (Meldungen, einfache Fragen) Debug-Ausgaben soll stets verwendet werden (statt System.out und System.err) Beispiele: Reporter.showInfo(...) Reporter.debug(...) Debug-Infos ignoriert, wenn DEBUG_MODE=false Ausgaben von Fenstern im Testmodus auf Konsole umgeleitet SecondoViewer Erweiterung von SECONDO Holger Hennings Javagui Dokumentation Erstellung eines neuen Viewers Beispiel Inquiry-Viewer Erweiterung des HoeseViewers Objekte in Textdarstellung Graphische Objekte Graphische Objekte Raum-Zeitliche Objekte Label und Manipulation anderer Objekte Anzeige im TTY Paket viewer abgeleitet von JComponent Superklasse für alle Viewer von Javagui d.h jeder Viewer ist Subklasse von SecondoViewer abstrakte Klasse verschiedene Methoden können / müssen überschrieben werden abstrakte Methoden müssen überschrieben werden erlaubt teilweise Kontrolle der GUI Inquiry-Viewer Erweiterung von SECONDO Holger Hennings Javagui Dokumentation Erstellung eines neuen Viewers Beispiel Inquiry-Viewer Erweiterung des HoeseViewers Objekte in Textdarstellung Graphische Objekte Graphische Objekte Raum-Zeitliche Objekte Label und Manipulation anderer Objekte Anzeige im TTY Anzeige des Ergebnisses von: list databases, list objects, list algebras, list algebra RelationAlgebra usw. Tabelle mittels html Code formatiert InquiryViewer.class im viewer Verzeichnis über das Gui-Menu Viewers->Add Viewer in die Gui einbinden InquiryViewer in die Datei gui.cfg im Verzeichnis Javagui permanent eintragen Ergebnis von list Erweiterung von SECONDO Holger Hennings Javagui Dokumentation Erstellung eines neuen Viewers Beispiel Inquiry-Viewer Erweiterung des HoeseViewers Objekte in Textdarstellung Graphische Objekte Graphische Objekte Raum-Zeitliche Objekte Label und Manipulation anderer Objekte Anzeige im TTY algebra Relationalgebra Inquiry-Viewer Erweiterung von SECONDO Holger Hennings Javagui Dokumentation Erstellung eines neuen Viewers Beispiel Inquiry-Viewer Erweiterung des HoeseViewers Ergebnis der inquiry: Nested List mit 2 Elementen Zum Beispiel: (inquiry (databases (OPT DAST GEO))) Listenformat (Ausschnitt): (inquiry <value> ) Raum-Zeitliche Objekte < value > := ( <subtype> (<subvalue>)) <subtype> := databases, algebras, ... <subvalue> hängt von subtype ab databases, algebras : einfache Liste von Symbols Label und Manipulation anderer Objekte objects: Liste im Format Objekte in Textdarstellung Graphische Objekte Graphische Objekte Anzeige im TTY (inquiry (objects (OBJECTS <obj1> ... mit <obji> (OBJECT <name> <typename> <type>) ... constructors, types, operators <objn>))) Ergebnis im StandardViewer von list Erweiterung von SECONDO Holger Hennings Javagui Dokumentation Erstellung eines neuen Viewers Beispiel Inquiry-Viewer Erweiterung des HoeseViewers Objekte in Textdarstellung Graphische Objekte Graphische Objekte Raum-Zeitliche Objekte Label und Manipulation anderer Objekte Anzeige im TTY objects canDisplay Erweiterung von SECONDO Holger Hennings Javagui Dokumentation Erstellung eines neuen Viewers entsprechende abstrakte Methode in SecondoViewer.java ergibt true, wenn der Viewer das übergebene Objekt anzeigen kann normalerweise wird der Typ (in der NL) geprüft Beispiel Inquiry-Viewer Erweiterung des HoeseViewers Objekte in Textdarstellung Graphische Objekte Graphische Objekte Raum-Zeitliche Objekte Label und Manipulation anderer Objekte Anzeige im TTY public boolean canDisplay(SecondoObject o){ ListExpr LE = o.toListExpr(); if(LE.listLength()!=2) return false; if(LE.first().atomType()!=ListExpr.SYMBOL_ATOM || !LE.first().symbolValue().equals("inquiry")) return false; ListExpr VL = LE.second(); if(VL.listLength()!=2) return false; ListExpr SubTypeList = VL.first(); if(SubTypeList.atomType()!=ListExpr.SYMBOL_ATOM) return false; String SubType = SubTypeList.symbolValue(); if(SubType.equals("databases") || SubType.equals("objects") || ...) return true; return false; } getDisplayQuality Erweiterung von SECONDO Holger Hennings Javagui Dokumentation Erstellung eines neuen Viewers Beispiel Inquiry-Viewer Erweiterung des HoeseViewers Objekte in Textdarstellung Graphische Objekte Graphische Objekte Raum-Zeitliche Objekte keine abstrakte Methode in SecondoViewer.java optional gibt an, wie gut das Objekt durch den Viewer dargestellt wird Angabe erfolgt im Bereich von 0 (gar nicht) bis 1 (besonders gut) wird bei der Auswahl des (besten) Viewers berücksichtigt Label und Manipulation anderer Objekte Anzeige im TTY public double getDisplayQuality(SecondoObject SO){ if(canDisplay(SO)) return 0.9; else return 0; } Konstruktor Erweiterung von SECONDO Holger Hennings Javagui Dokumentation Erstellung eines neuen Viewers Initialisiert den Viewer fügt Komponenten + Listener hinzu darf keine Argumente besitzen konstruiert ggf. den MenuVector Beispiel Inquiry-Viewer Erweiterung des HoeseViewers Objekte in Textdarstellung Graphische Objekte Graphische Objekte Raum-Zeitliche Objekte Label und Manipulation anderer Objekte hat Komponenten um Secondo Objekte zu händeln SecondoObjects: Vektor der Secondo Objekte enthält Combobox: enthält Namen der SecondoObjects ObjectTexts: Vektor der HTML Code für SecondoObjects enthält Anzeige im TTY public InquiryViewer(){ /* gewoehnliche Verwendung von Java-Komponenten */ /* Aufbau des Menuevektors */ .. } addObject Erweiterung von SECONDO Holger Hennings Javagui Dokumentation Erstellung eines neuen Viewers Beispiel Inquiry-Viewer Erweiterung des HoeseViewers Objekte in Textdarstellung Graphische Objekte Graphische Objekte Raum-Zeitliche Objekte Label und Manipulation anderer Objekte Anzeige im TTY fügt dem Viewer ein Objekt hinzu (oder selektiert es, falls schon vorhanden) Umwandlung der Nested List des Objekt in anzeigbares Format Objekt wird angezeigt public boolean addObject(SecondoObject o){ if(!canDisplay(o)) return false; if (isDisplayed(o)) selectObject(o); else{ ListExpr VL = o.toListExpr().second(); ObjectTexts.add(getHTMLCode(VL)); ComboBox.addItem(o.getName()); SecondoObjects.add(o); try{ ComboBox.setSelectedIndex(ComboBox.getItemCount()-1); showObject(); } catch(Exception e){ Reporter.debug(e); } } return true; } sonstige Funktionen Erweiterung von SECONDO Holger Hennings Javagui Dokumentation Erstellung eines neuen Viewers Beispiel Inquiry-Viewer Erweiterung des HoeseViewers Objekte in Textdarstellung Graphische Objekte selectObject bringt ein vorhandenes Objekt zur Anzeige isDisplayed tested, ob geg. Objekt im Viewer vorhanden ist, d.h. in SecondoObjects enthalten ist showObject zeigt das zuvor selektierte Objekt an getName gibt den Viewernamen zurück Graphische Objekte Raum-Zeitliche Objekte Label und Manipulation anderer Objekte Anzeige im TTY removeObject entfernt ein gegebenes Objekt vom Viewer removeAll entfernt alle Objekte aus dem Viewer getMenuVector gibt die Menüerweiterung zurück Kontrolle der Javagui Erweiterung von SECONDO Holger Hennings Javagui Dokumentation Erstellung eines neuen Viewers Beispiel Inquiry-Viewer Erweiterung des HoeseViewers Objekte in Textdarstellung Graphische Objekte Graphische Objekte Raum-Zeitliche Objekte Label und Manipulation anderer Objekte Anzeige im TTY möglich durch Klassen-Member VC (ViewerControl) mit Vorsicht benutzen notwendig, wenn ein Viewer selbst Objekte erzeugt, z.B. HoeseViewer lädt neue Session bietet Möglichkeit, mit Secondo-Kern (via TCP/IP) zu kommunizieren Datei ViewerControl.java in Verzeichnis Javagui/gui Beispiele: VC.updateMenu() informiert GUI über Änderung des Hauptmenüs VC.execCommand(commandstring) sendet das entsprechende Kommando an den SecondoServer Der HoeseViewer Erweiterung von SECONDO Holger Hennings Javagui Dokumentation Erstellung eines neuen Viewers Beispiel Inquiry-Viewer Erweiterung des HoeseViewers Objekte in Textdarstellung Graphische Objekte Graphische Objekte Raum-Zeitliche Objekte Label und Manipulation anderer Objekte Anzeige im TTY stellt, textuelle, räumliche und zeitliche veränderbare Objekte dar verwendet Displayklassen für die darstellbaren Typen um einen neuen Objekt Typ hinzuzufügen muss eine neue Klasse in Javagui/viewer/hoese/algebras implementiert werden Namenskonvention der Displayklassen: Dspl<type>, mit <type> symbol value der den Typ repräsentiert Beispiel Typ: rel (tuple((...) Displayklasse: Dsplrel (...))) Displayklassen werden zur Laufzeit eingebunden Manipulation des Aussehens anderer Objekte Erzeugung von Objekten möglich Objekte in Textdarstellung Erweiterung von SECONDO Holger Hennings erweitern DsplGeneric Klasse Javagui Dokumentation Erstellung eines neuen Viewers Beispiel Inquiry-Viewer Erweiterung des HoeseViewers Objekte in Textdarstellung Graphische Objekte Graphische Objekte Raum-Zeitliche Objekte Label und Manipulation anderer Objekte Anzeige im TTY überschreiben / implementieren init-Methode Beispiel Display-Klasse für rationale Zahlen Listenformat (Vorzeichen optional): (rational (<sign> <intpart> <numDecimal> / <denomDecimal>)) Beispiel: (rational ( - 1 1/2 )) zur Darstellung von -1.5 Klasse Dsplrational im Paket viewer.hoese.algebras Dsplrational - Hilfsfunktion Erweiterung von SECONDO Holger Hennings Javagui Dokumentation Erstellung eines neuen Viewers Beispiel Inquiry-Viewer Erweiterung des HoeseViewers Objekte in Textdarstellung Graphische Objekte Graphische Objekte Raum-Zeitliche Objekte Label und Manipulation anderer Objekte Anzeige im TTY private String getValueString(ListExpr value){ int len = value.listLength(); if(len!=4 && len !=5) return "ERROR"; String result=""; if(len==5){ // with sign ListExpr SignList = value.first(); if(SignList.atomType()!=ListExpr.SYMBOL_ATOM) return "ERROR"; String sign = SignList.symbolValue(); if(sign.equals("-")) // ignore other values result += sign +" "; value = value.rest(); // skip the signum } // check the types if( value.first().atomType()!=ListExpr.INT_ATOM || value.second().atomType()!=ListExpr.INT_ATOM || value.fourth().atomType()!=ListExpr.INT_ATOM) return "ERROR"; int intPart = value.first().intValue(); int numDecimal = value.second().intValue(); int denomDecimal = value.fourth().intValue(); result += ""+(denomDecimal*intPart+numDecimal) + " / " + denomDecimal; return result; } Dsplrational - Init-Funktionen Erweiterung von SECONDO Holger Hennings Javagui Dokumentation Erstellung eines neuen Viewers Beispiel Inquiry-Viewer Erweiterung des HoeseViewers Objekte in Textdarstellung Graphische Objekte Graphische Objekte Raum-Zeitliche Objekte Label und Manipulation anderer Objekte Anzeige im TTY public void init (String name, int nameWidth, int indent, ListExpr type, ListExpr value, QueryResult qr) { String T = name; String V = getValueString(value); T=extendString(T,nameWidth, indent); qr.addEntry(T + " : " + V); return; } Erweiterung von SECONDO Holger Hennings Javagui Dokumentation Erstellung eines neuen Viewers Beispiel Inquiry-Viewer Erweiterung des HoeseViewers Objekte in Textdarstellung Graphische Objekte Graphische Objekte Raum-Zeitliche Objekte Label und Manipulation anderer Objekte Anzeige im TTY Graphische Objekte Erweiterung von SECONDO Holger Hennings Javagui Dokumentation Erstellung eines neuen Viewers Beispiel Inquiry-Viewer Erweiterung des HoeseViewers Objekte in Textdarstellung Graphische Objekte Graphische Objekte Raum-Zeitliche Objekte Label und Manipulation anderer Objekte Anzeige im TTY erweitern die DisplayGraph Klasse Idee: Erzeugen eine Menge (oft Größe 1) von java.awt.Shape Objekten aus der gegebenener Nested List (init Methode) verwenden Projektionen zur Darstellung geographischer Objekte Graphische Objekte Erweiterung von SECONDO Holger Hennings Javagui Dokumentation Erstellung eines neuen Viewers Beispiel Inquiry-Viewer Erweiterung des HoeseViewers Objekte in Textdarstellung Graphische Objekte Graphische Objekte Raum-Zeitliche Objekte Label und Manipulation anderer Objekte Anzeige im TTY Zunächst: Nested List Format für Rechtecke (rect ( <x1> <x2> <y1> <y2>)) mit numerischen Werten xi und yi Beispiel: Displayklasse für Rechtecke (Dsplrect) auf den nächsten Folien Methoden: init, ScanValue, getRenderObject, numberOfShapes Rectangle2D.Double rect zum Speichern der internen Darstellung (Class java.awt.geom.Rectangle2D.Double) Hilfsfunktion zur Analyse der Liste Erweiterung von SECONDO Holger Hennings Javagui Dokumentation Erstellung eines neuen Viewers Beispiel Inquiry-Viewer Erweiterung des HoeseViewers Objekte in Textdarstellung Graphische Objekte Graphische Objekte Raum-Zeitliche Objekte Label und Manipulation anderer Objekte Anzeige im TTY private void ScanValue (ListExpr v) { if (v.listLength() != 4) { Reporter.writeError("Error: 4 elements needed"); err = true; return; } Double X1 = LEUtils.readNumeric(v.first()); ... if(X1==null || X2==null || Y1==null | Y2==null){ Reporter.writeError("Error: not a numeric"); err =true; return; } try{ double tx1 = X1.doubleValue(); ... if(!ProjectionManager.project(tx1,ty1,aPoint)){ err = true; } else{ double x1 = aPoint.x; double y1 = aPoint.y; if(!ProjectionManager.project(tx2,ty2,aPoint)){ err=true; } else{ double x2 = aPoint.x; double y2 = aPoint.y; double x = Math.min(x1,x2); double w = Math.abs(x2-x1); double y = Math.min(y1,y2); double h = Math.abs(y2-y1); rect = new Rectangle2D.Double(x,y,w,h); } } }catch(Exception e){ err = true; } } Init-Funktion Erweiterung von SECONDO Holger Hennings Javagui public void init (String name, int nameWidth, int indent, ListExpr type, ListExpr value, QueryResult qr) { AttrName = extendString(name, nameWidth, indent); ScanValue(value); if (err) { Reporter.writeError("Error in ListExpr :parsing aborted"); qr.addEntry(new String("(" + AttrName + ": GA(rectangle))")); return; } else qr.addEntry(this); Dokumentation Erstellung eines neuen Viewers Beispiel Inquiry-Viewer Erweiterung des HoeseViewers Objekte in Textdarstellung Graphische Objekte Graphische Objekte Raum-Zeitliche Objekte Label und Manipulation anderer Objekte Anzeige im TTY } numOfShapes und getRenderObject Erweiterung von SECONDO Holger Hennings Javagui Dokumentation Erstellung eines neuen Viewers public int numberOfShapes(){ return 1; } Beispiel Inquiry-Viewer Erweiterung des HoeseViewers Objekte in Textdarstellung Graphische Objekte Graphische Objekte Raum-Zeitliche Objekte Label und Manipulation anderer Objekte Anzeige im TTY /** Returns the rectangle to display **/ public Shape getRenderObject(int num, AffineTransform at){ if(num<1){ return rect; } else{ return null; } } Raum-Zeitliche Objekte Erweiterung von SECONDO Holger Hennings Javagui stellen zeitliche Veränderungen von geometrischen Objekten dar Dokumentation Erstellung eines neuen Viewers Beispiel Inquiry-Viewer Erweiterung des HoeseViewers Objekte in Textdarstellung Graphische Objekte Graphische Objekte Raum-Zeitliche Objekte Label und Manipulation anderer Objekte Anzeige im TTY berechnen ihre Darstellung oft neu erweitern DisplayTimeGraph Klasse Beispiel: Dsplmovingpoint für moving point DisplayTimeGraph erweitert DisplayGraph Beispiel: Moving Point Listendarstellung mit einer Unit (mpoint(((“2007-01-01-10:02:01” “2007-01-01-10:02:03” TRUE TRUE) (8209.0 8769.0 8293.0 8768.0))) Raum-Zeitliche Objekte Erweiterung von SECONDO Holger Hennings Javagui Dokumentation Erstellung eines neuen Viewers Beispiel Inquiry-Viewer Erweiterung des HoeseViewers Objekte in Textdarstellung Graphische Objekte Graphische Objekte Raum-Zeitliche Objekte Label und Manipulation anderer Objekte Anzeige im TTY getRenderObject prüft ob der moving point zu einer gegebenen Zeitinstanz existiert Mit anderen Worten: Es gibt eine unit mit passendem Intervall Label und Manipulation anderer Objekte Erweiterung von SECONDO Holger Hennings Javagui Dokumentation Erstellung eines neuen Viewers Beispiel Inquiry-Viewer Erweiterung des HoeseViewers Objekte in Textdarstellung Graphische Objekte Graphische Objekte Raum-Zeitliche Objekte Label und Manipulation anderer Objekte Anzeige im TTY Ein Objekt kann als ein Label für ein anderes Objekt benutzt werden Entprechende Display Klasse muss LabelAttribute implementieren Interface LabelAttribute Einzige Methode: String getLabel(double Time) Time nur wichtig, wenn Objekt Zustand sich zeitlich ändert gibt Label in Form eines string zurück Erweiterung von SECONDO Holger Hennings Javagui Dokumentation Erstellung eines neuen Viewers Beispiel Inquiry-Viewer Erweiterung des HoeseViewers Objekte in Textdarstellung Graphische Objekte Graphische Objekte Raum-Zeitliche Objekte Label und Manipulation anderer Objekte Anzeige im TTY Erweiterung von SECONDO Holger Hennings Javagui Dokumentation Erstellung eines neuen Viewers Beispiel Inquiry-Viewer Erweiterung des HoeseViewers Objekte in Textdarstellung Graphische Objekte Graphische Objekte Raum-Zeitliche Objekte Label und Manipulation anderer Objekte Anzeige im TTY Erweiterung von SECONDO Holger Hennings Javagui Dokumentation Erstellung eines neuen Viewers Beispiel Inquiry-Viewer Erweiterung des HoeseViewers Objekte in Textdarstellung Graphische Objekte Im Hoese Viewer können Objekte bestimmte Eigenschaften von graphischen Objekten manipulieren (z.B. Farbe etc.) Entsprechende Display Klasse muss RenderAttribute implementieren Interface RenderAttribute Graphische Objekte Raum-Zeitliche Objekte Label und Manipulation anderer Objekte Anzeige im TTY boolean mayBeDefined() boolean isDefined(double time) double getMaxRenderValue() double getMinRenderValue() double getRenderValue(double time) Auszug aus Dsplint.java Erweiterung von SECONDO Holger Hennings Javagui Dokumentation Erstellung eines neuen Viewers Beispiel Inquiry-Viewer Erweiterung des HoeseViewers Objekte in Textdarstellung Graphische Objekte Graphische Objekte Raum-Zeitliche Objekte Label und Manipulation anderer Objekte Anzeige im TTY ** * A displayclass for the int-type, alphanumeric only */ public class Dsplint extends DsplGeneric implements RenderAttribute, LabelAttribute { /** the value of this integer **/ int value; . /** flag for defined state **/ boolean defined; . . /** returns the maximum value **/ public double getMaxRenderValue(){ return value; } /** returns the minimum value **/ public double getMinRenderValue(){ return value; } /** returns the current value **/ public double getRenderValue(double time){ return value; . . Auszug aus Dsplint.java Erweiterung von SECONDO Holger Hennings Javagui Dokumentation . . Erstellung eines neuen Viewers } Beispiel Inquiry-Viewer Erweiterung des HoeseViewers Objekte in Textdarstellung Graphische Objekte Graphische Objekte Raum-Zeitliche Objekte Label und Manipulation anderer Objekte Anzeige im TTY /** returns true if this int is defined **/ public boolean mayBeDefined(){ return defined; } /** returns tre if this integer is defined **/ public boolean isDefined(double time){ return defined; } /** returns the label **/ public String getLabel(double time){ return defined?""+value:"undefined"; Erweiterung von SECONDO Holger Hennings Javagui Dokumentation Erstellung eines neuen Viewers Beispiel Inquiry-Viewer Erweiterung des HoeseViewers Objekte in Textdarstellung Graphische Objekte Graphische Objekte Raum-Zeitliche Objekte Label und Manipulation anderer Objekte Anzeige im TTY Erweiterung von SECONDO Holger Hennings Javagui Dokumentation Erstellung eines neuen Viewers Beispiel Inquiry-Viewer Erweiterung des HoeseViewers Objekte in Textdarstellung Graphische Objekte Graphische Objekte Raum-Zeitliche Objekte Label und Manipulation anderer Objekte Anzeige im TTY Anzeige im SecondoTTY(CS) Erweiterung von SECONDO Holger Hennings Javagui Dokumentation Erstellung eines neuen Viewers Beispiel Inquiry-Viewer Erweiterung des HoeseViewers Objekte in Textdarstellung Graphische Objekte Graphische Objekte Raum-Zeitliche Objekte Label und Manipulation anderer Objekte Anzeige im TTY Allgemeines: Anzeige als Liste oft schlecht lesbar wünschenswert: formatierte Darstellung möglich durch Displayklassen DisplayTTY.cpp (Implementierung, Registrierung) in Secondo/UserInterfaces für einfache und zusammengesetzte Typen möglich Die Displayklasse (struct) Erweiterung von SECONDO Holger Hennings Javagui Dokumentation Erstellung eines neuen Viewers Beispiel Inquiry-Viewer Erweiterung des HoeseViewers Objekte in Textdarstellung Graphische Objekte Graphische Objekte Raum-Zeitliche Objekte Label und Manipulation anderer Objekte Anzeige im TTY wird abgeleitet von DisplayFunction Display-funktion wird überschrieben Display( ListExpr type, ListExpr numType, ListExpr value) type: gewöhnliche Listendarstellung numType: gleicher Inhalt, jedoch Typen kodiert durch Algebranummer und Nummer des Typkonstruktors, für zusammengesetzte Typen benötigt value: darzustellendes Objekt Erweiterung von SECONDO Holger Hennings Javagui Dokumentation Erstellung eines neuen Viewers Beispiel Inquiry-Viewer Vorgehen für einfache Typen Erweiterung des HoeseViewers Objekte in Textdarstellung Graphische Objekte Graphische Objekte Raum-Zeitliche Objekte Label und Manipulation anderer Objekte Anzeige im TTY Value des Objekts−→ Analyse −→ Herausziehen der Komponenten −→output stream Erweiterung von SECONDO Holger Hennings Javagui Dokumentation Erstellung eines neuen Viewers Beispiel Inquiry-Viewer Erweiterung des HoeseViewers Objekte in Textdarstellung Graphische Objekte Graphische Objekte Raum-Zeitliche Objekte Label und Manipulation anderer Objekte Anzeige im TTY struct DisplayPoint : DisplayFunction { virtual void Display( ListExpr type, ListExpr numType, ListExpr value) { if( nl->IsAtom( value ) && nl->AtomType( value ) == SymbolType && nl->SymbolValue( value ) == Symbol::UNDEFINED() ) { cout << Symbol::UNDEFINED(); } else if(nl->ListLength(value)!=2) throw runtime_error(stdErrMsg); else{ bool err; double x = GetNumeric(nl->First(value),err); if(err){ throw runtime_error(stdErrMsg); } double y = GetNumeric(nl->Second(value),err); if(err){ throw runtime_error(stdErrMsg); } cout << "point: (" << x << "," << y << ")"; } } }; Erweiterung von SECONDO Holger Hennings Javagui Vorgehen für zusammengesetze Typen Sukzessiver Aufruf der Funktion callDisplayFunction auf eingebettete Typen Dokumentation Erstellung eines neuen Viewers Beispiel Inquiry-Viewer Erweiterung des HoeseViewers Objekte in Textdarstellung Graphische Objekte Graphische Objekte Raum-Zeitliche Objekte Label und Manipulation anderer Objekte Anzeige im TTY void DisplayFunction::CallDisplayFunction( const ListExpr idPair, ListExpr type, ListExpr numType, ListExpr value ) idPair besteht aus 2-elementigen Liste (AlgebraId, typeId); die passende Display Funktion wird gefunden Die Argumente *typeArg* and *valueArg* werden der entsprechenden Display Funktion übergeben type: Enthält type description numtyp: Codierte Version der type description Beispiel: (array <arraytype>) Erweiterung von SECONDO Holger Hennings Javagui Dokumentation Erstellung eines neuen Viewers Beispiel Inquiry-Viewer Erweiterung des HoeseViewers Objekte in Textdarstellung struct DisplayArray : DisplayFunction { virtual void Display( ListExpr type, ListExpr numType, ListExpr value) { if(nl->ListLength(value)==0) cout << "an empty array"; else{ ListExpr AType = nl->Second(type); ListExpr ANumType = nl->Second(numType); // find the idpair ListExpr idpair = ANumType; while(nl->AtomType(nl->First(idpair))!=IntType) idpair = nl->First(idpair); int No = 0; cout << "*************** BEGIN ARRAY ***************" << endl; while( !nl->IsEmpty(value)){ cout << "--------------- Field No: "; cout << No++ << " ---------------" << endl; CallDisplayFunction( idpair, AType, ANumType, nl->First(value) ); cout << endl; value = nl->Rest(value); } cout << "*************** END ARRAY ***************"; Graphische Objekte Graphische Objekte Raum-Zeitliche Objekte Label und Manipulation anderer Objekte Anzeige im TTY } } }; Registrierung Erweiterung von SECONDO Holger Hennings Javagui Dokumentation Erstellung eines neuen Viewers Beispiel Inquiry-Viewer Erweiterung des HoeseViewers Objekte in Textdarstellung Graphische Objekte Graphische Objekte Raum-Zeitliche Objekte Label und Manipulation anderer Objekte Anzeige im TTY innerhalb der Initialize Funktion in DisplayTTY.cpp d.insert( ¨typname¨, new Displayclass()); Erweiterung von SECONDO Holger Hennings Javagui Dokumentation Erstellung eines neuen Viewers Beispiel Inquiry-Viewer Erweiterung des HoeseViewers Objekte in Textdarstellung Graphische Objekte Graphische Objekte Raum-Zeitliche Objekte Label und Manipulation anderer Objekte Anzeige im TTY Danke für die Aufmerksamkeit