En el ejemplo siguiente se utiliza el método CqProvider.doGeDbSetList() para obtener una lista de todos los conjuntos de bases de datos de Rational ClearQuest conocidos en el proveedor. (Algunas veces el conjunto de bases de datos recibe el nombre de depósito de esquemas o configuración). Al acceder a cada uno de estos conjuntos de bases de datos, se obtiene una lista de las bases de datos accesibles para el usuario.
En este ejemplo, cada base de datos de usuario se identifica mediante una combinación del nombre del conjunto de bases de datos (CqDbSet.DISPLAY_NAME) y el nombre de la base de datos de usuarios (CqUserDb.DISPLAY_NAME). Es el modo canónico de identificar una base de datos de usuarios en la API CM de Rational. La sintaxis completa de la ubicación de una base de datos de usuario es cq.userdb:<conjunto-bd>/<bd-usuario>.
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)); // Iterate over the database sets known to the provider for (CqDbSet set : provider.doGetDbSetList(DB_PROPS)) { // Skip database set if user doesn't have access if (set.getResourceError() != null) continue; // Identify the user databases to which the user is subscribed 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); // to terminate Swing threads } } /** Properties to be displayed for subscribed user databases */ 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 única interacción con la aplicación ClearQuest se produce durante la invocación del método CqProvider.doGetDbSetList al principio del bucle externo. La solicitud de propiedad anidada DB_PROPS utilizada en dicha invocación obliga a ClearQuest a conectar cada usuario con cada conjunto de bases de datos que conoce y obtener de dicho conjunto de bases de datos una lista de bases de datos de usuarios a las que está suscrito dicho usuario.
A medida que se ejecuta este método, el objeto Callback que se suministra al proveedor seguirá invocándose para cada conjunto de bases de datos con el fin de obtener la identidad y la contraseña de usuario para dicho conjunto de bases de datos. Si el usuario no puede facilitar las credenciales adecuadas para un conjunto de bases de datos determinadas, la excepción de inicio de sesión anómalo se almacena en el campo de errores de recursos del proxy devuelto. Un valor no nulo de este campo es la forma estándar de informar al cliente que no se ha podido acceder a una lista de recursos para atender una solicitud de propiedad.