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     */
015    package com.ibm.rational.stp.client.samples;
016    
017    import javax.wvcm.ResourceList;
018    import javax.wvcm.PropertyRequestItem.PropertyRequest;
019    
020    import com.ibm.rational.wvcm.stp.StpProvider.Domain;
021    import com.ibm.rational.wvcm.stp.cq.CqDbSet;
022    import com.ibm.rational.wvcm.stp.cq.CqProvider;
023    import com.ibm.rational.wvcm.stp.cq.CqUser;
024    import com.ibm.rational.wvcm.stp.cq.CqUserDb;
025    import com.ibm.rational.wvcm.stp.cq.CqProvider.CqProductInfo;
026    
027    /**
028     * List the user databases visible in the current context
029     */
030    public 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    }