Die ResolverRegistry

Alle Arten von Resolvern können mittels resolvers Modul in Jython oder Groovy Skripten implementiert werden wie in Kapitel Abschnitt 52.1 beschrieben. Dies sollte für den normalen Gebrauch ausreichen. Nur wenn Sie im Detail verstehen wollen, wie die ResolverRegistry selbst funktioniert, oder wenn Sie Resolver in Java implementieren wollen, sollten Sie auch die folgenden Abschnitte lesen.

Das vorliegende Kapitel beschreibt, wie Sie Resolver direkt durch Java-Klassen implementieren. Diese Methode führt allerdings dazu, dass ein Teil Ihrer Applikation von den QF-Test Klassen abhängig wird. Auch aus diesem Grund ist es vorzuziehen, die Resolver Interfaces in Jython oder Groovy zu implementieren. Dadurch kann der gesamte Mechanismus strikt vom SUT getrennt bleiben und hat keinerlei Einfluss auf dessen Entwicklungsprozess.

Zusätzlich zu der hier beschriebenen Registrierung der Resolver müssen die entsprechenden Resolver Interfaces implementiert werden. Diese sind ab Abschnitt 52.1.7 ff beschrieben.

Auf Java-Ebene werden Resolver dadurch kompliziert, dass die Methoden als Interface definiert und von einer Klasse implementiert werden müssen. Von dieser Klasse muss eine Instanz erzeugt und bei QF-Test registriert werden. Wenn es nicht auf Anhieb funktioniert, muss die Instanz deregistriert werden, bevor eine neue Klasse erstellt und eine Instanz davon registriert werden kann. Andernfalls könnte es zu Konflikten zwischen den beiden Versionen des Resolvers kommen. Dazu kommt noch Code für die Fehlerbehandlung, insgesamt also ein vielfaches an Ballast im Vergleich zur eigentlichen Substanz.

Ebenso wie für das resolvers Modul gilt, dass alle Exceptions, die während der Ausführung eines Resolvers auftreten, von der ResolverRegistry abgefangen werden. Es wird allerdings nur eine kurze Meldung und kein Stacktrace ausgegeben, weil insbesondere globale Resolver sehr oft aufgerufen werden können. Somit würde ein Resolver, der einen Bug hat, durch die Ausgabe von Stacktraces für jeden Fehler das Client Terminal überfluten. Daher sollten Resolver ihre eigenen Fehlerbehandlungsroutinen enthalten. Dabei können zwar immer noch extrem viele Ausgaben erzeugt werden, aber speziell für Skripte sind diese hilfreicher als Java-Stacktraces.

Auch das in Abschnitt 52.1.1 und Abschnitt 52.1.2 Gesagte gilt für die ResolverRegistry, sofern es nicht spezifisch ist für Skripte oder das resolvers Modul.

Die Singleton Klasse de.qfs.apps.qftest.extensions.ResolverRegistry ist die zentrale Agentur für die Registrierung und das Entfernen von Resolvern.

Das API der ResolverRegistry enthält keine großen Überraschungen:

 
 
static String getElementName(Object element)
Diese statische Methode sollte an Stelle von com.getName() bzw. widget.getData() von Resolvern verwendet werden, die abhängig von bestehenden Namen von Komponenten operieren, mit Ausnahme des NameResolver2, der diesen Namen übergeben bekommt. Diese Methode behandelt triviale oder für AWT/Swing spezielle Namen gesondert.
Parameter
element Das GUI Element dessen Name ermittelt werden soll.
Rückgabewert Der Name der Komponente oder null, falls ein trivialer oder spezieller Name unterdrückt wird.
 
static ResolverRegistry instance()
Es gibt immer nur ein einziges ResolverRegistry Objekt und diese Methode ist der einzige Weg, Zugriff auf diese Singleton Instanz erlangen.
RückgabewertDie ResolverRegistry Singleton Instanz.
 
static boolean isInstance(Object object, String className)
Diese statische Methode sollte anstelle von instanceof (oder isinstance() in Jython) verwendet werden. Sie prüft, ob ein Objekt eine Instanz der gegebenen Klasse ist. Diese Prüfung wird nicht wie üblich über Reflection, sondern auf der Basis von Klassennamen durchgeführt. Dadurch werden Probleme mit verschiedenen ClassLoadern vermieden und die Klasse muss gar nicht erst importiert werden.
Parameter
objectDas zu prüfende Objekt.
classNameDer Name der Klasse auf die getestet wird.
Rückgabewert True falls das Objekt eine Instanz der Klasse ist.
 
void registerExtraFeatureResolver(ExtraFeatureResolver resolver)
Registriert einen globalen ExtraFeatureResolver.
Parameter
resolver Der zu registrierende Resolver.
 
void registerExtraFeatureResolver(Object element, ExtraFeatureResolver resolver)
Registriert einen ExtraFeatureResolver für eine spezifische Komponente. Der Resolver beeinträchtigt nicht die Garbage-Collection und wird automatisch entfernt, wenn die Komponente nicht mehr erreichbar ist.
Parameter
element Das GUI Element für das registriert wird.
resolver Der zu registrierende Resolver.
 
void registerExtraFeatureResolver(String clazz, ExtraFeatureResolver resolver)
Registriert einen ExtraFeatureResolver für eine spezifische Komponenten Klasse.
Parameter
clazz Der Name der Klasse für die registriert wird.
resolver Der zu registrierende Resolver.
 
void registerFeatureResolver2(FeatureResolver2 resolver)
Registriert einen globalen FeatureResolver2.
Parameter
resolver Der zu registrierende Resolver.
 
void registerFeatureResolver2(Object element, FeatureResolver2 resolver)
Registriert einen FeatureResolver2 für eine spezifische Komponente. Der Resolver beeinträchtigt nicht die Garbage-Collection und wird automatisch entfernt, wenn die Komponente nicht mehr erreichbar ist.
Parameter
element Das GUI Element für das registriert wird.
resolver Der zu registrierende Resolver.
 
void registerFeatureResolver2(String clazz, FeatureResolver2 resolver)
Registriert einen FeatureResolver2 für eine spezifische Komponenten Klasse.
Parameter
clazz Der Name der Klasse für die registriert wird.
resolver Der zu registrierende Resolver.
 
void registerIdResolver(IdResolver resolver)
Registriert einen globalen IdResolver.
Parameter
resolver Der zu registrierende Resolver.
 
void registerIdResolver(Object element, IdResolver resolver)
Registriert einen IdResolver für eine spezifische Komponente. Der Resolver beeinträchtigt nicht die Garbage-Collection und wird automatisch entfernt, wenn die Komponente nicht mehr erreichbar ist.
Parameter
element Das GUI Element für das registriert wird.
resolver Der zu registrierende Resolver.
 
void registerIdResolver(String clazz, IdResolver resolver)
Registriert einen IdResolver für eine spezifische Komponenten Klasse.
Parameter
clazz Der Name der Klasse für die registriert wird.
resolver Der zu registrierende Resolver.
 
void registerNameResolver2(NameResolver2 resolver)
Registriert einen globalen NameResolver2.
Parameter
resolver Der zu registrierende Resolver.
 
void registerNameResolver2(Object element, NameResolver2 resolver)
Registriert einen NameResolver2 für eine spezifische Komponente. Der Resolver beeinträchtigt nicht die Garbage-Collection und wird automatisch entfernt, wenn die Komponente nicht mehr erreichbar ist.
Parameter
element Das GUI Element für das registriert wird.
resolver Der zu registrierende Resolver.
 
void registerNameResolver2(String clazz, NameResolver2 resolver)
Registriert einen NameResolver2 für eine spezifische Komponenten Klasse.
Parameter
clazz Der Name der Klasse für die registriert wird.
resolver Der zu registrierende Resolver.
 
void registerTreeTableResolver(TreeTableResolver resolver)
Registriert einen globalen TreeTableResolver.
Parameter
resolver Der zu registrierende Resolver.
 
void registerTreeTableResolver(Object com, TreeTableResolver resolver)
Registriert einen TreeTableResolver für eine spezifische Komponente. Der Resolver beeinträchtigt nicht die Garbage-Collection und wird automatisch entfernt, wenn die Komponente nicht mehr erreichbar ist.
Parameter
com Das GUI Element für das registriert wird.
resolver Der zu registrierende Resolver.
 
void registerTreeTableResolver(String clazz, TreeTableResolver resolver)
Registriert einen TreeTableResolver für eine spezifische Komponenten Klasse.
Parameter
clazz Der Name der Klasse für die registriert wird.
resolver Der zu registrierende Resolver.
 
void unregisterExtraFeatureResolver(ExtraFeatureResolver resolver)
Entfernt einen globalen ExtraFeatureResolver.
Parameter
resolver Der zu entfernende Resolver.
 
void unregisterExtraFeatureResolver(Object element, ExtraFeatureResolver resolver)
Entfernt einen ExtraFeatureResolver für eine spezifische Komponente.
Parameter
element Das GUI Element für das entfernt wird.
resolver Der zu entfernende Resolver.
 
void unregisterExtraFeatureResolver(String clazz, ExtraFeatureResolver resolver)
Entfernt einen ExtraFeatureResolver für eine spezifische Komponenten Klasse.
Parameter
clazz Der Name der Klasse für die entfernt wird.
resolver Der zu entfernende Resolver.
 
void unregisterFeatureResolver2(FeatureResolver2 resolver)
Entfernt einen globalen FeatureResolver2.
Parameter
resolver Der zu entfernende Resolver.
 
void unregisterFeatureResolver2(Object element, FeatureResolver2 resolver)
Entfernt einen FeatureResolver2 für eine spezifische Komponente.
Parameter
element Das GUI Element für das entfernt wird.
resolver Der zu entfernende Resolver.
 
void unregisterFeatureResolver2(String clazz, FeatureResolver2 resolver)
Entfernt einen FeatureResolver2 für eine spezifische Komponenten Klasse.
Parameter
clazz Der Name der Klasse für die entfernt wird.
resolver Der zu entfernende Resolver.
 
void unregisterIdResolver(IdResolver resolver)
Entfernt einen globalen IdResolver.
Parameter
resolver Der zu entfernende Resolver.
 
void unregisterIdResolver(Object element, IdResolver resolver)
Entfernt einen IdResolver für eine spezifische Komponente.
Parameter
element Das GUI Element für das entfernt wird.
resolver Der zu entfernende Resolver.
 
void unregisterIdResolver(String clazz, IdResolver resolver)
Entfernt einen IdResolver für eine spezifische Komponenten Klasse.
Parameter
clazz Der Name der Klasse für die entfernt wird.
resolver Der zu entfernende Resolver.
 
void unregisterNameResolver2(NameResolver2 resolver)
Entfernt einen globalen NameResolver2.
Parameter
resolver Der zu entfernende Resolver.
 
void unregisterNameResolver2(Object element, NameResolver2 resolver)
Entfernt einen NameResolver2 für eine spezifische Komponente.
Parameter
element Das GUI Element für das entfernt wird.
resolver Der zu entfernende Resolver.
 
void unregisterNameResolver2(String clazz, NameResolver2 resolver)
Entfernt einen NameResolver2 für eine spezifische Komponenten Klasse.
Parameter
clazz Der Name der Klasse für die entfernt wird.
resolver Der zu entfernende Resolver.
 
void unregisterResolvers(Object element)
Entfernt alle Resolver für eine spezifische Komponente.
Parameter
element Das GUI Element für das entfernt wird.
 
void unregisterResolvers(String clazz)
Entfernt alle Resolver für eine Komponenten-Klasse.
Parameter
clazz Der Name der Klasse für die entfernt wird.
 
void unregisterTreeTableResolver(TreeTableResolver resolver)
Entfernt einen globalen TreeTableResolver.
Parameter
resolver Der zu entfernende Resolver.
 
void unregisterTreeTableResolver(Object com, TreeTableResolver resolver)
Entfernt einen TreeTableResolver für eine spezifische Komponente.
Parameter
com Das GUI Element für das entfernt wird.
resolver Der zu entfernende Resolver.
 
void unregisterTreeTableResolver(String clazz, TreeTableResolver resolver)
Entfernt einen TreeTableResolver für eine spezifische Komponenten Klasse.
Parameter
clazz Der Name der Klasse für die entfernt wird.
resolver Der zu entfernende Resolver.