240 likes | 392 Views
Projektarbeit EchoBinding. Entwurf und Implementierung eines Data Binding Layer für das Echo Web Framework. Philipp Mpalampanis. Aufgabensteller: Prof. Dr. Martin Wirsing Betreuer: Axel Rauschmayer. Übersicht. Echo Data Binding EchoBinding. Echo Web Framework.
E N D
ProjektarbeitEchoBinding Entwurf und Implementierung eines Data Binding Layer für das Echo Web Framework Philipp Mpalampanis Aufgabensteller: Prof. Dr. Martin Wirsing Betreuer: Axel Rauschmayer
Übersicht • Echo • Data Binding • EchoBinding LMU München, Institut für Informatik, LFE Programmierung und Softwaretechnik
Echo Web Framework • Echo ermöglicht einfache Entwicklung von sog. Rich Internet Applications(RIA) • Echo Applikationen werden zu 100% in Java programmiert • Framework erzeugt notwendiges HTML und JavaScript LMU München, Institut für Informatik, LFE Programmierung und Softwaretechnik
Echo Web Framework • Client-Server-Architektur: server-seitig Java Servlets, client-seitig HTML+JavaScript • Kommunikation zwischen Client und Server erfolgt über XmlHttpRequests (Ajax) LMU München, Institut für Informatik, LFE Programmierung und Softwaretechnik
Echo Web Framework • Echo adaptiert Java Swing Programmiermodell • Echo ist komponentenbasiert: jedes GUI Element ist eine Komponente (Window, Panel, TextField, SelectField, Table usw.) • Echo ist ereignisgesteuert: Anwendung wird durch Events gesteuert (Benutzerinteraktionen, Benachrichtigungen) LMU München, Institut für Informatik, LFE Programmierung und Softwaretechnik
Echo - Beispiel final Label helloLabel = new Label("Hello!"); mainPane.add(helloLabel); mainPane.add(new Label("What's your name?")); final TextField tfYourName = new TextField(); Button submitButton = new Button("Submit"); submitButton.addActionListener(new ActionListener() { publicvoid actionPerformed(ActionEvent arg0) { helloLabel.setText("Hello "+tfYourName.getText()+"!"); } }); ... LMU München, Institut für Informatik, LFE Programmierung und Softwaretechnik
Übersicht • Echo • Data Binding • EchoBinding LMU München, Institut für Informatik, LFE Programmierung und Softwaretechnik
Motivation: Album Manager LMU München, Institut für Informatik, LFE Programmierung und Softwaretechnik
Motivation: Synchronisation I • publicclass AlbumManagerView extends Column { • TextField tfArtist; • TextField tfTitle; • CheckBox cbClassical; • TextField tfComposer; • Album album; • ... • } tfArtist.setText( album.getArtist() ); tfTitle.setText( album.getTitle() ); cbClassical.setSelected( ... ); ... Model View LMU München, Institut für Informatik, LFE Programmierung und Softwaretechnik
Motivation: Synchronisation II • Speichern der modifzierten Daten • Benutzer drückt „Apply“-Button album.setArtist( tfArtist.getText() ); album.setTitle( tfTitle.getText() ); album.setClassical( cbClassical.is ... Model View LMU München, Institut für Informatik, LFE Programmierung und Softwaretechnik
Motivation: Album Manager Extended • Zusätzliches Feld „Erscheinungsdatum“ tfRelease.setText( album.getReleaseDate() ); Konvertierung notwendig! album.setReleaseDate( tfRelease.getText() ); DateFormat format = new SimpleDateFormat(...); album.setReleaseDate(format.parse( tfRelease.getText() ); Validierung notwendig! LMU München, Institut für Informatik, LFE Programmierung und Softwaretechnik
Data Binding: Aufgaben • Synchronisation von Model und View • Automatische Typ-Konvertierung • Eingabevalidierung (Plausibiltätsprüfung) LMU München, Institut für Informatik, LFE Programmierung und Softwaretechnik
Data Binding: Voraussetzung • Verknüpfung von Elementen der Benutzer-schnittstelle mit Attributen aus Domänenmodell LMU München, Institut für Informatik, LFE Programmierung und Softwaretechnik
Übersicht • Echo • Data Binding • EchoBinding LMU München, Institut für Informatik, LFE Programmierung und Softwaretechnik
EchoBinding: PropertyAdapter • Repräsentiert eine bestimmte Bean-Eigenschaft • Zugriff auf Wert der Eigenschaft: • getValue(Object bean) • setValue(Object bean, Object value) • An keinen Typ gebunden • Eigenschaft wird z.B. durch Expression Language-Ausdruck spezifiziert Bean sollte in PA spezifizierte Eigenschaft besitzen LMU München, Institut für Informatik, LFE Programmierung und Softwaretechnik
EchoBinding: Beispiel OgnlPropertyAdapter • Verwendet Object Graph Navigation Language (OGNL) zur Beschreibung der Bean-Eigenschaft PropertyAdapter street = new OgnlPropertyAdapter("address.street"); Customer customer = ...; street.getValue( customer ); // := customer.getAddress().getStreet(); street.setValue( customer, "Oettingenstr." ); // := customer.getAddress().setStreet( "Oettingenstr." ); OGNL-Ausdruck LMU München, Institut für Informatik, LFE Programmierung und Softwaretechnik
EchoBinding: BindingContext • Daten-Kontext für View (mehrere Models möglich) • View greift über BindingContext auf Model zu • PropertyAdapter werden im BindingContext zusammen mit Alias in Adapter-Tabelle abgelegt default LMU München, Institut für Informatik, LFE Programmierung und Softwaretechnik
EchoBinding: Beispiel OgnlBindingContext OgnlBindingContext ctx = new OgnlBindingContext(); ctx.setModel( customer ); // default model ctx.addModel( "album", album ); //additional model ctx.add( "customerName", new OgnlPropertyAdapter(„name") ); ctx.getValue( "customerName" ); // := ctx.getAdapter( "customerName" ).getValue( customer ); // := customer.getName(); ctx.getValue( "#album.artist" ); // Ad-Hoc-Binding // := album.getArtist(); LMU München, Institut für Informatik, LFE Programmierung und Softwaretechnik
EchoBinding: BoundControls • BoundControls sind Subklassen von Echo-Komponenten • Für jede Echo- Komponenten existiert entspr. BoundControl (TextField, Radio-Button, ... ) • Zugriff auf Model erfolgt über BindingContext • Durch Adapter-Alias an ein bestimmten PropertyAdapter gebunden • BindingContext kann BoundControls „steuern“: • ctx.update(): lädt Daten aus Model in Controls • ctx.synchronize(): überträgt Werte in das Model • ctx.validate(): überprüft Gültigkeit der Eingaben LMU München, Institut für Informatik, LFE Programmierung und Softwaretechnik
EchoBinding: BoundControls Schnittstellen LMU München, Institut für Informatik, LFE Programmierung und Softwaretechnik
EchoBinding: Album Manager Konfiguration BindingContext OgnlBindingContext ctx=newOgnlBindingContext(); OgnlPropertyAdapter releaseDate = newOgnlPropertyAdapter("realeaseDate"); releaseDate.setFormat( newDateFormat("MM/yyyy") ); releaseDate.addValidator( new RegexValidator("[0-9]...") ); ctx.add( "releaseDate", releaseDate ); Offline Online ctx.setModel( album ); LMU München, Institut für Informatik, LFE Programmierung und Softwaretechnik
EchoBinding: Album Manager View publicclassAlbumManagerViewextendsColumn { publicAlbumManagerView(BindingContext ctx) { add( new TextField("artist", ctx) ); ... add( new CheckBox("classical", ctx) ); add( new TextField("releaseDate", ctx) ); ... } } BoundControls ctx.update(); View Model ctx.synchronize(); LMU München, Institut für Informatik, LFE Programmierung und Softwaretechnik
Fragen? EchoBinding LMU München, Institut für Informatik, LFE Programmierung und Softwaretechnik
Danke. EchoBinding LMU München, Institut für Informatik, LFE Programmierung und Softwaretechnik