Menu

Seite41BA

Anonymous

4.2.5.10 View

ViewMain.xpt

ViewMain.xpt koordiniert die Generierung der View-spezifischen Klassen. Dazu gehören

  • das Startfenster (Übersicht über alle Entitäten -> EntityView)
  • die Übersicht über alle Objekte einer Entität (mit Filter- und Löschfunktion -> ResultTableView)
  • das Bearbeitungsformular (zum Anzeigen, Bearbeiten und Neu-Anlegen eines Objekts für eine Entität -> AddNewObjectView(XYZEditModel))
  • Auswahlliste bestehender Objekte (zum Hinzufügen zu einer Relation -> AddObjectView)

sowie einige Hilfsklassen für den View wie

  • EntityDesktopPane (wird von EntityView verwendet)
  • EntityViewManager (wird vom EntityController verwendet und koordiniert die Navigation zwischen den einzelnen Views (ResultTableView -> AddNewObjectView (Entität1.Objekt1) -> AddNewObjectView(Entität2.Objekt3) ...)
  • HelpView (über den Menüeintrag im Hilfemenü aufrufbares Fenster, im die die kurze Anleitung des Programms erscheint)
  • IconRenderer (zur Darstellung des Löschen-Icons in der letzten Spalte der Tabellen)
  • JTab (eigener Typ, der für die Component steht, die über den Index vom JTabbedPane geholt wird)
  • ViewHelper (enthält statische Methoden für den Wechsel des Mouse-Cursor-Icons beim Zeigen des Cursor auf den Löschen-Button in der Tabelle auf das Hand-Symbol)

    «IMPORT ecore»

    «DEFINE viewMain FOR EPackage»

    «EXPAND AddNewObjectView::addNewObjectView FOR this»
    «EXPAND AddObjectView::addObjectView FOR this»
    «EXPAND EntityDesktopPane::entityDesktopPane FOR this»
    «EXPAND EntityView::entityView FOR this»
    «EXPAND EntityViewManager::entityViewManager FOR this»
    «EXPAND HelpView::helpView FOR this»
    «EXPAND IconRenderer::iconRenderer FOR this»
    «EXPAND JTab::jTab FOR this»
    «EXPAND ResultTableView::resultTableView FOR this»
    «EXPAND ViewHelper::viewHelper FOR this»
    «EXPAND forms::FormsMain::formsMain FOR this»

    «ENDDEFINE»

Bis auf EntityView und EntityViewManager sind die View-Klassen nicht vom Datenmodell abhängig und sind nur hinsichtlich der Package-Namen-Vorgabe parametrisiert. Der Generierung der Abeille Forms, die über den Aufruf des Templates FormsMain angstoßen wird, werden eigene Kapitel gewidmet.

EntityView.xpt

Allgemein

Im EntityView werden die Symbole vorbereitet, die im Startfenster angezeigt werden. Die Symbole repräsentieren die in der Anwendung vorkommenden Domänenobjekte und sind wie auf einem Desktop frei bewegbar. Über einen Doppelklick auf ihnen öffnet sich ein Fenster, in dem alle existierenden Objekte für diese Entität angezeigt werden. Über das Kontextmenü der Symbole lässt sich neben diesem Fenster auch der Dialog zum Anlegen eines neuen Objekts für diese Entität öffnen.

Template

Im Template werden alle im Datenmodell als abstrakt definierten Entitäten herausgefiltert, so dass nur für konkrete Entitäten Symbole im Startfenster angelegt werden.

«IMPORT ecore»
«EXTENSION de::uni_leipzig::dreirad::generator::templates::common::Common»

«DEFINE entityView FOR EPackage»
   «FILE getPackageName().getAsPath() + "/client/view/EntityView.java"»
      package «getPackageName()».client.view;

      ...

      public class EntityView extends JFrame {

         ...

         public EntityView(Object[] entities) {
            ...
            int length = entities.length;
            String name, label;

            for (int i = 0; i

Generat

Im Beispieldatenmodell wurde die Entität Person als abstrakt definiert. Das Literal aus der die Entitäten repräsentierenden Enumeration wird daher beim Anlegen der Symbole nicht verarbeitet.

    ...
    public EntityView(Object[] entities) {
        ...
        int length = entities.length;
        String name;
        String label;

        for (int i = 0; i

EntityViewManager.xpt

Allgemein

Wie bereits oben kurz beschrieben, soll der EntityViewManager die Navigation zwischen den einzelnen Views koordinieren. Er soll zudem die Klasse sein, über die die Controller mit dem View kommunizieren. Einer ihrer Aufgaben besteht darin, im Bearbeitungsformular (=AddNewObjectView) die Buttons für das Hinzufügen oder Neu-Anlegen von Objekten in eine Relation aus dem FormPanel (Schnittstelle zu den AbeilleForms) zu holen und ihren Zustand zu setzen. Der Name, über den die Buttons aus dem FormPanel geholt werden können, leitet sich dabei vom Namen der Referenz ab. Darum wird im Template über alle nicht-abstrakten Entitäten iteriert und für jede ihrer Referenzen die Buttons und TableModels geholt und deren Zustände gesetzt.

Template

«IMPORT ecore»
«EXTENSION de::uni_leipzig::dreirad::generator::templates::common::Common»

«DEFINE entityViewManager FOR EPackage»
   «FILE getPackageName().getAsPath() + "/client/view/EntityViewManager.java"»
      package «getPackageName()».client.view;
      «EXPAND importDefinition FOR this»

      ...

      public class EntityViewManager extends JFrame {

         ...

         public void setAddButtons(List <EntityTableModel> models) {

            FormPanel form = getCurrentCard();
            JButton addExistingButton;
            JButton addNewButton;
            String choice = form.getName();
            EntityTableModel entityTableModel;

            «FOREACH this.eClassifiers.typeSelect(EClass).select(e|e.abstract == false) AS entity ITERATOR counter»
               «IF counter.firstIteration»
                  if
               «ELSE»
                  } else if
               «ENDIF»
                  (choice.contains("«entity.getInstanceName()»")) {
                     for (int i = 0; i

Generat

Aus obigen Template-Code wird in Kombination mit einem Datenmodell beispielhaft folgender Code generiert:

   ...
   public void setAddButtons(List<EntityTableModel> models) {
        FormPanel form = getCurrentCard();
        JButton addExistingButton;
        JButton addNewButton;
        String choice = form.getName();
        EntityTableModel entityTableModel;

        if (choice.contains("customer")) {
            for (int i = 0; i

weiter zu 4.2.5.11 Abeille Forms
zurück zu 4.2.5.9 Helper-Klassen
zurück zu 4.2.5 Templatierung der Präsentationsschicht
zurück zu 4.2 Implementierung des Generators
zurück zu 4 Implementierung
zurück zu [FrontPage]


Related

Documentation: FrontPage
Documentation: Seite000
Documentation: Seite400
Documentation: Seite41B
Documentation: Seite41B9
Documentation: Seite41BB
Documentation: Seite420