Im folgenden Beispiel wird die Methode CqProvider.doGeDbSetList() verwendet, um eine Liste aller Rational ClearQuest-Datenbankgruppen zu erhalten, die dem Provider bekannt sind. (Eine Datenbankgruppe wird manchmal auch als Konfigurations-Repository oder Schema-Repository bezeichnet.) Wenn Sie jede dieser Datenbankgruppen aufrufen, erhalten Sie eine vollständige Liste der für den Benutzer verfügbaren Datenbanken.
In diesem Beispiel wird jede Benutzerdatenbank über eine Kombination aus dem Namen der Datenbankgruppe (CqDbSet.DISPLAY_NAME) und dem Namen der Benutzerdatenbank (CqUserDb.DISPLAY_NAME) identifiziert. Dies ist die kanonische Vorgehensweise zur Angabe einer Benutzerdatenbank in der ClearQuest CM-API. Die vollständige Syntax für die Position einer Benutzerdatenbank lautet wie folgt: cq.userdb:<db-gruppe>/<benutzer-db>.
public static void main(String[] args) throws Exception { try { CqProvider provider = Utilities.getProvider().cqProvider(); System.out.println("CM API Library...\n" + provider.stpProductInfo(null)); System.out.println("ClearQuest Adaptor...\n" + provider.stpProductInfo(Domain.CLEAR_QUEST)); // Dies für die dem Provider bekannten Datenbankgruppen iterieren for (CqDbSet set : provider.doGetDbSetList(DB_PROPS)) { // Datenbankgruppe überspringen, wenn der Benutzer keinen Zugriff hat if (set.getResourceError() != null) continue; // Benutzerdatenbanken identifizieren, die der Benutzer subskribiert hat for (CqUserDb userDb: set.getCurrentUser().getSubscribedDatabases()) { CqProductInfo info = (CqProductInfo)userDb.getProductInfo(); System.out.println (userDb.getUserFriendlyLocation().getRepo() + ": " + info.getFullProductVersion() + " (" + info.getStageLabel()+ ", OMREV " + (info.getObjectModelVersionMajor()*100 + info.getObjectModelVersionMinor()) + ")"); } } } catch(Throwable ex) { ex.printStackTrace(); } finally { System.exit(0); // zum Beenden der Swing-Threads } } /** Eigenschaften, die für subskribierte Benutzerdatenbanken angezeigt werden sollen */ static final PropertyRequest DB_PROPS = new PropertyRequest(CqDbSet.CURRENT_USER .nest(CqUser.SUBSCRIBED_DATABASES .nest(CqUserDb.USER_FRIENDLY_LOCATION, CqUserDb.PRODUCT_INFO))); }
static ResourceList<CqUserDb> getUserDbList(CqProvider provider, PropertyRequest feedback) throws WvcmException { PropertyRequest wantedProps = new PropertyRequest(CqDbSet.CURRENT_USER .nest(CqUser.SUBSCRIBED_DATABASES.nest(feedback))); ResourceList<CqUserDb> result = provider.resourceList(); for (CqDbSet set : provider.doGetDbSetList(wantedProps)) { if (set.getResourceError() == null) result.addAll(set.getCurrentUser().getSubscribedDatabases()); } return result; }
Die einzige Interaktion mit der ClearQuest-Anwendung findet während des Aufrufs der Methode CqProvider.doGetDbSetList am Anfang der äußeren Schleife statt. Die verschachtelte Eigenschaftsanforderung DB_PROPS, die in diesem Aufruf verwendet wird, zwingt ClearQuest dazu, den Benutzer bei jeder Datenbankgruppe anzumelden, die ihm bekannt ist, und aus dieser Datenbankgruppe eine Liste der Benutzerdatenbanken abzurufen, die dieser Benutzer subskribiert hat.
Während diese Methode ausgeführt wird, wird das dem Provider bereitgestellte Callback-Objekt für jede Datenbankgruppe aufgerufen, um die Benutzeridentität und das Kennwort für diese Datenbankgruppe abzurufen. Wenn der Benutzer die erforderlichen Berechtigungsnachweise für eine bestimmte Datenbankgruppe nicht angeben kann, wird eine Ausnahme über die fehlgeschlagene Anmeldung ("failed-login") im Feld "resource-error" des zurückgegebenen Proxy gespeichert. Ein Wert ungleich Null in diesem Feld ist die Standardmethode, mit der dem Client angezeigt wird, dass eine Ressource in einer Liste von Ressourcen nicht aufgerufen werden konnte, um eine Eigenschaftsanforderung zu erfüllen.