< Anterior | Próximo >

Listar bancos de dados disponíveis do usuário

Nesta lição você aprende como usar o Rational CM API para descobrir os bancos de dados do Rational ClearQuest acessíveis a um certo usuário. Tal lista pode ser apresentada ao usuário antes de começar a trabalhar com os recursos do banco de dados como registros, campos e consultas.

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). Esta é a forma canônica de identificar um banco de dados do usuário no Rational 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)));
}
Para uso no resto deste tutorial, nós definimos o Utilities.getUserDbList. Ele usa a mesma técnica do exemplo anterior para computar o conjunto de bancos de dados acessíveis ao usuário, em que o proxy de resultado do banco de dados de cada usuário é preenchido com um conjunto de propriedades fornecidas como um argumento para o método.
    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.

Agora que você tem uma lista dos bancos de dados disponíveis do usuário, você pode se registrar em um banco de dados específico e, em seguida, começar a trabalhar com os recursos nele.

Ponto de verificação da lição

Agora você aprendeu como usar o Rational CM API para listar repositórios específicos do produto como bancos de dados do usuário.
Nesta lição você aprendeu o seguinte:
  • Como usar o Rational CM API para obter bancos de dados acessíveis do usuário.
  • Sobre objetos CqUserDb.
< Anterior | Próximo >

Feedback