001/*
002 * file FindDatabases.java
003 *
004 * Licensed Materials - Property of IBM
005 * Restricted Materials of IBM - you are allowed to copy, modify and 
006 * redistribute this file as part of any program that interfaces with 
007 * IBM Rational CM API.
008 *
009 * com.ibm.rational.stp.client.samples.FindDatabases
010 *
011 * (C) Copyright IBM Corporation 2005, 2008.  All Rights Reserved.
012 * Note to U.S. Government Users Restricted Rights:  Use, duplication or 
013 * disclosure restricted by GSA ADP  Schedule Contract with IBM Corp.
014 */
015package com.ibm.rational.stp.client.samples;
016
017import javax.wvcm.ResourceList;
018import javax.wvcm.PropertyRequestItem.PropertyRequest;
019
020import com.ibm.rational.wvcm.stp.StpProvider.Domain;
021import com.ibm.rational.wvcm.stp.cq.CqDbSet;
022import com.ibm.rational.wvcm.stp.cq.CqProvider;
023import com.ibm.rational.wvcm.stp.cq.CqUser;
024import com.ibm.rational.wvcm.stp.cq.CqUserDb;
025import com.ibm.rational.wvcm.stp.cq.CqProvider.CqProductInfo;
026
027/**
028 * List the user databases visible in the current context
029 */
030public class FindDatabases {
031
032    /**
033     * The main program, which instantiates a CM API provider and requests all
034     * known ClearQuest database sets and, for each the user databases to which
035     * the user is subscribed.
036     * 
037     * @param args Specify a server URL here if databases on the server are to
038     *            be included in the report (future feature).
039     * @throws Exception if no database can be contacted.
040     */
041    public static void main(String[] args) throws Exception
042    {
043        try {
044            CqProvider provider = Utilities.getProvider().cqProvider();
045            
046            if (args.length > 0)
047                provider.setServerUrl(args[0]);
048            
049            System.out.println("CM API Library...\n" 
050                                 + provider.stpProductInfo(null));
051            System.out.println("ClearQuest Adaptor...\n" 
052                                 + provider.stpProductInfo(Domain.CLEAR_QUEST));
053            
054            // Iterate over the database sets known to the provider
055            for (CqDbSet set : provider.doGetDbSetList(DB_PROPS)) {
056                // Skip database set if user doesn't have access
057                if (set.getResourceError() != null)
058                    continue;
059                
060                // Identify the user databases to which the user is subscribed
061                for (CqUserDb userDb: set.getCurrentUser().getSubscribedDatabases()) {
062                    CqProductInfo info = (CqProductInfo)userDb.getProductInfo();
063                    System.out.println (userDb.getUserFriendlyLocation().getRepo()
064                                        + ": " + info.getFullProductVersion() +
065                                        " (" + info.getStageLabel()+ ", OMREV " 
066                                        + (info.getObjectModelVersionMajor()*100
067                                        + info.getObjectModelVersionMinor()) + ")");
068                }
069            }
070        } catch(Throwable ex) {
071            ex.printStackTrace();
072        } finally {
073            System.exit(0);
074        }
075    }
076    
077    /** Properties to be displayed for subscribed user databases */
078    static final PropertyRequest DB_PROPS =
079                new PropertyRequest(CqDbSet.CURRENT_USER
080                    .nest(CqUser.SUBSCRIBED_DATABASES
081                          .nest(CqUserDb.USER_FRIENDLY_LOCATION,
082                                CqUserDb.PRODUCT_INFO)));
083}