Il seguente esempio utilizza il metodo CqProvider.doGeDbSetList() per ottenere un elenco di tutte le serie di database Rational ClearQuest note al provider. (Una serie di database viene a volte denominata configurazione o repository di schemi.) Accedendo a ognuna di queste serie di database, si ottiene un elenco completo di database a cui l'utente può accedere.
In questo esempio, ciascun database utente viene identificato da una combinazione del relativo nome serie di database (CqDbSet.DISPLAY_NAME) e del relativo nome database utente (CqUserDb.DISPLAY_NAME). Si tratta del modo canonico di identificazione di un database utente in Rational CM API. La sintassi dell'ubicazione completa per un database utente è 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)); // Eseguire una ripetizione nelle serie di database note al provider for (CqDbSet set : provider.doGetDbSetList(DB_PROPS)) { // Tralasciare la serie di database se l'utente non dispone dell'accesso if (set.getResourceError() != null) continue; // Identificare i database utente ai quali l'utente è sottoscritto 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); // per terminare i thread Swing } } /** Proprietà da visualizzare per i database utente sottoscritti */ 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; }
L'unica interazione con l'applicazione ClearQuest si verifica durante la chiamata del metodo CqProvider.doGetDbSetList all'avvio del loop esterno. La richiesta della proprietà nidificata DB_PROPS utilizzata in tale chiamata forza ClearQuest a far accedere l'utente in ciascuna serie di database nota e a ottenere, da tale serie di database, un elenco di database utente a cui l'utente è sottoscritto.
Durante l'esecuzione di questo metodo, l'oggetto Callback fornito al provider verrà richiamato per ciascuna serie di database al fine di ottenere l'identità utente e la password per tale serie di database. Se l'utente non è in grado di fornire le credenziali appropriate per una determinata serie di database, l'eccezione di accesso non riuscito viene memorizzata nel campo di errore delle risorse del proxy restituito. Un valore non nullo in questo campo rappresenta il modo standard per informare il client che non è stato possibile accedere a una risorsa in un elenco di risorse per soddisfare una richiesta di proprietà.