以下の例では、CqProvider.doGeDbSetList() メソッドを使用して、プロバイダに認識されているすべての 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));
// プロバイダに認識されているデータベース セットごとに繰り返します。
for (CqDbSet set : provider.doGetDbSetList(DB_PROPS)) {
// ユーザーがアクセス権を持っていない場合はそのデータベースをスキップします
if (set.getResourceError() != null)
continue;
// ユーザーが登録しているユーザー データベースを識別します。
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); // Swing のスレッドを終了します。
}
}
/** 登録されたユーザー データベースに関して表示されるプロパティ */
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;
}
ClearQuest アプリケーションとの唯一の対話が、外部ループが開始される時点の CqProvider.doGetDbSetList メソッドの呼び出し中に行われます。その呼び出しで使用される DB_PROPS ネスト プロパティ要求は、ClearQuest に、認識している各データベース セット内にユーザーをログインさせ、そのデータベース セットから、ユーザーが登録されているユーザー データベースのリストを取得させます。
このメソッドが実行されると、プロバイダに渡されたコールバック オブジェクトが、それぞれのデータベース セットごとに呼び出され、そのデータベース セットのユーザー ID およびパスワードが取得されます。 ユーザーが、指定されたデータベース セットのための適切な認証を提供できないと、戻されるプロキシのリソース エラー フィールド内にログイン失敗の例外が保管されます。このフィールド内の値が NULL 以外になることで、リソースのリストにあるリソースへのアクセスが失敗し、プロパティ要求を満たすことができなかったことがクライアントに通知されます。