以下示例使用 CqProvider.doGeDbSetList() 方法来获取 Provider 已知的所有 Rational ClearQuest 数据库集的列表。(数据库集有时称为配置或模式存储库。)通过访问每个数据库集,就可以获取用户可访问数据库的完整列表。
在这个示例中,每个用户数据库都通过数据库集名称(CqDbSet.DISPLAY_NAME)及其用户数据库名称(CqUserDb.DISPLAY_NAME)的组合进行标识。 这是 Rational CM API 中标识用户数据库的规范方式。用户数据库的完整位置语法为 cq.userdb:<db-set>/<user-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)); // 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; }
只有在外层循环一开始调用 CqProvider.doGetDbSetList 方法期间,才会发生与 ClearQuest 应用程序的交互。调用过程中使用的 DB_PROPS 嵌套式属性请求强制 ClearQuest 让用户登录自己知道的每个数据库集,并从数据库集获取此用户预订的用户数据库集列表。
在执行此方法时,针对每个数据库集,都会调用 Provider 的 Callback 对象,以获取数据库集的用户标识和密码。如果用户无法提供给定数据库集的正确凭证,那么登录失败这个异常会存储在返回代理的 ResourceError 字段中。一般情况下,该字段会用一个非空值来通知客户机无法访问资源列表中的资源来满足属性请求。