O exemplo a seguir usa o método CqProvider.doGeDbSetList() para obter uma lista de todos os conjuntos de banco de dados do Rational ClearQuest conhecidos para o provedor. (Um conjunto de banco de dados é, às vezes, chamado de uma configuração ou um repositório do esquema). Acessando cada um desses conjuntos de banco de dados, uma lista completa dos bancos de dados acessíveis ao usuário é obtida.
Neste exemplo, cada banco de dados do usuário é identificado por uma combinação de seu nome de configuração de banco de dados (CqDbSet.DISPLAY_NAME) e seu nome de banco de dados de usuário (CqUserDb.DISPLAY_NAME). Essa é a maneira canônica de identificar um banco de dados do usuário no ClearQuest CM API. A sintaxe completa do local para um banco de dados do usuário é 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)); // Reiterar nos conjuntos do banco de dados conhecido para o provedor para (CqDbSet set : provider.doGetDbSetList(DB_PROPS)) { // Ignorar o conjunto de banco de dados se o usuário não tiver acesso if (set.getResourceError() != null) continue; // Identificar os bancos de dados do usuário para o qual o usuário está inscrito 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 } } /** Propriedades a serem exibidas para bancos de dados do usuário inscrito */ 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; }
A única interação com o aplicativo ClearQuest ocorre durante a invocação do método CqProvider.doGetDbSetList no início do loop externo. O pedido de propriedade aninhado DB_PROPS usado nessa invocação força o ClearQuest a registrar o usuário em cada conjunto de banco de dados que ele conheça e a obter desse conjunto de banco de dados uma lista dos bancos de dados do usuário para o qual esse usuário esteja inscrito.
Conforme este método executa, o objeto de Retorno de Chamada dado ao provedor será invocado para cada conjunto de banco de dados para obter a identidade do usuário e a senha para esse conjunto de banco de dados. Se o usuário não puder fornecer as credenciais adequadas para um determinado conjunto de banco de dados, a exceção de login de falha é armazenada no campo de erro do recurso do proxy retornado. Um valor não nulo neste campo é a maneira padrão de informar o cliente que um recurso em uma lista de recursos não pôde ser acessado para satisfazer um pedido da propriedade.