Menu

Seite41B9

Anonymous

4.2.5.9 Helper-Klassen

HelperMain.xpt

In der Client-seitigen Anwendung werden eine Reihe von Behelfs-Klassen verwendet. Diese Klassen enthalten in der Regel nur statische Methoden und werden somit zu reinen Methoden-Containern.

«IMPORT ecore»

«DEFINE helperMain FOR EPackage»

   «EXPAND AddHelper::addHelper FOR this»
   «EXPAND EntityHelper::entityHelper FOR this»
   «EXPAND Filter::filter FOR this»
   «EXPAND TableSortHelper::tableSortHelper FOR this»

«ENDDEFINE»

Die meisten Helper sind unabhängig vom Datenmodell und benötigen deshalb bis auf das Package keine Parametrisierung. Mit den Methoden der Klasse AddHelper.java wird die Liste der hinzufügbaren Objekte zu einer Relation im Bearbeitungsdialog bestimmt (d.h. Objekte, die bereits zugewiesen sind, werden aus der Liste herausgefiltert). EntityHelper.java bekommt eine statische Methode, mit der eine Menge ungetypter POJOs typisiert wird. Mit TableSortHelper kann bei Verwendung von Java6 ein initialisierter RowSorter zur Verwendung für eine JTable geholt werden. Da auf Grund von Problemen mit Java6 im Projekt (JBoss ClassLoader) wieder auf Java5 gewechselt wurde, ist die statische Methode des TableSortHelpers auskommentiert.

Filter.xpt

Allgemein

Mit den Methoden der Hilfsklasse Filter.java wird eine Instanz der Klasse Restriction auf Grundlage der im View getroffenen Auswahl von Attribut, Operation und Vorgabewert erstellt. Für den Vorgabewert muss dabei geprüft werden, ob der Eingabe-String in den Datentyp des Attributs überführt werden kann. Falls das nicht der Fall, wird eine Ausnahme ausgelöst statt die mit der Restriction die getByCriteria-Methode aufzurufen. Die dafür zu vergleichenden Datentypen werden von den im Datenmodell überhaupt verwendeten Datentypen abgeleitet. Wenn also im Modell kein Attribut mit dem Typ EBoolean existiert, wird auch in der if-else-Verzweigung nicht auf Booleab.class verglichen.

Template

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

«DEFINE filter FOR EPackage»
   «FILE getPackageName().getAsPath() + "/client/helper/Filter.java"»
      package «getPackageName()».client.helper;

      ...

      public class Filter {

         ...

         private static Object getTypedValue(Object typedValue, Class clazz)
                 throws ValidationException, NoSuchFieldException {
            JTextField valueTextField = tableForm.getTextField("valueTextField");
            String value = valueTextField.getText();
            Object dataType = ModelHelper.getField(clazz, column).getType();
            «REM»added ELongObject as attribute id always is in use«ENDREM»
            «FOREACH getAllDataTypeNames().add("ELongObject").toSet() AS dataTypeName ITERATOR counter»
               «IF counter.firstIteration»
                  if
               «ELSE»
                  } else if
               «ENDIF»
                  (dataType.equals(«dataTypeName.getJavaType()».class)) {
               «IF getAllStringDataTypeNames().contains(dataTypeName)»
                     typedValue = Formatter.getStringValue(value);
               «ELSEIF dataTypeName.matches("EDate")»
                     typedValue = Validator.getDateValue(column, value);
               «ELSEIF getAllBooleanDataTypeNames().contains(dataTypeName)»
                     // nothing to do
               «ELSE»
                     typedValue = Validator.
                             get«dataTypeName.getJavaType().getNameWithOutPackage()»Value(column, value);
               «ENDIF»
               «IF counter.lastIteration»
                  }// if - else
               «ENDIF»
            «ENDFOREACH»
            return typedValue;
         }// getTypedValue
      }// class
   «ENDFILE»
«ENDDEFINE»

Generat

In Kombination mit dem Datenmodell ergibt sich im Generat beispielhaft folgender Code:

    ...
    private static Object getTypedValue(Object typedValue, Class clazz)
        throws ValidationException, NoSuchFieldException {
        JTextField valueTextField = tableForm.getTextField("valueTextField");
        String value = valueTextField.getText();
        Object dataType = ModelHelper.getField(clazz, column).getType();

        if (dataType.equals(java.util.Date.class)) {
            typedValue = Validator.getDateValue(column, value);
        } else if (dataType.equals(Integer.class)) {
            typedValue = Validator.getIntegerValue(column, value);
        } else if (dataType.equals(Long.class)) {
            typedValue = Validator.getLongValue(column, value);
        } else if (dataType.equals(Boolean.class)) {
            // nothing to do
        } else if (dataType.equals(String.class)) {
            typedValue = Formatter.getStringValue(value);
        } else if (dataType.equals(Double.class)) {
            typedValue = Validator.getDoubleValue(column, value);
        } // if - else

        return typedValue;
    } // getTypedValue
    ...

weiter zu 4.2.5.10 View
zurück zu 4.2.5.8 Formatierung
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: Seite41B8
Documentation: Seite41BA
Documentation: Seite420