L'exemple suivant utilise la méthode CqProvider.doGeDbSetList() pour obtenir une liste de tous les jeux de bases de données Rational ClearQuest connus du fournisseur (un jeu de bases de données est parfois appelé configuration ou schéma de référentiel). En accédant à chacun de ces jeux de bases de données, une liste complète des bases de données accessibles à l'utilisateur est obtenue.
Dans cet exemple, chaque base de données utilisateur est identifiée à l'aide d'une combinaison de son nom de jeu de bases de données (CqDbSet.DISPLAY_NAME) et de son nom de base de données utilisateur (CqUserDb.DISPLAY_NAME). Il s'agit de la méthode canonique pour identifier une base de données utilisateur dans l'API CM ClearQuest. La syntaxe d'emplacement complète pour une base de données utilisateur est cq.userdb:<jeu-bd>/<bd-utilisateur>.
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)); // Itère les jeux de bases de données connus du fournisseur for (CqDbSet set : provider.doGetDbSetList(DB_PROPS)) { // Ignore le jeu de bases de données si l'utilisateur ne dispose pas de l'accès if (set.getResourceError() != null) continue; // Identifie les bases de données utilisateur auxquelles l'utilisateur a souscrit 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); // pour mettre fin aux unités d'exécution Swing } } /** Propriétés à afficher pour les bases de données utilisateur souscrites */ 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; }
La seule interaction avec l'application ClearQuest a lieu lors de l'appel de la méthode CqProvider.doGetDbSetList au démarrage de la boucle externe. La demande de propriété imbriquée DB_PROPS utilisée dans cet appel force ClearQuest à connecter l'utilisateur à chaque ensemble de bases de données qu'il connaît et à obtenir de la base de données une liste des bases de données utilisateur auxquelles il a souscrit.
Au fur et à mesure que cette méthode s'exécute, l'objet Rappel donné au fournisseur sera appelé pour chaque jeu de bases de données afin d'obtenir l'identité de l'utilisateur et le mot de passe pour ce jeu de bases de données. Si l'utilisateur ne peut pas fournir des accréditations appropriées pour un jeu de bases de données spécifique, l'exception failed-login est stockée dans la zone resource-error du proxy renvoyé. Une valeur non nulle dans cette zone est la méthode standard permettant d'avertir le client qu'une ressource dans une liste de ressources était inaccessible pour satisfaire une demande de propriété.