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

Similar documents