001    /*
002     * file SimpleQuery.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.SimpleQuery
010     *
011     * © Copyright IBM Corporation 2004, 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    
016    package com.ibm.rational.stp.client.samples;
017    
018    import static javax.swing.JOptionPane.showInputDialog;
019    
020    import java.util.List;
021    
022    import javax.swing.JFrame;
023    import javax.swing.JOptionPane;
024    import javax.swing.JScrollPane;
025    import javax.swing.JTextArea;
026    import javax.wvcm.ProviderFactory;
027    import javax.wvcm.WvcmException;
028    
029    import com.ibm.rational.wvcm.stp.StpProvider;
030    import com.ibm.rational.wvcm.stp.StpProvider.Domain;
031    import com.ibm.rational.wvcm.stp.cc.CcProvider;
032    import com.ibm.rational.wvcm.stp.cq.CqProvider;
033    import com.ibm.rational.wvcm.stp.cq.CqQuery;
034    import com.ibm.rational.wvcm.stp.cq.CqResultSet;
035    
036    /**
037     * Sample CM API Application that executes a query named by the user and
038     * displays the results in a passive window.
039     */
040    public class SimpleQuery
041    {
042    
043        /**
044         * @param args
045         */
046        public static void main(String[] args) throws Exception
047        {
048            CqProvider provider = (CqProvider) 
049                ProviderFactory.createProvider(CqProvider.CQ_ONLY_PROVIDER_CLASS, g_callback);
050            CqQuery query = provider.buildProxy(CqQuery.class, 
051                                                showInputDialog("Enter Name of Query to Run (use indicated format)", 
052                                                                "<query-pathname>@<db-set>/<user-db>"));
053            CqResultSet results = query.doExecute(1, Integer.MAX_VALUE, null);
054            JTextArea text = new JTextArea(640, 480);
055            JFrame frame = new JFrame(query.location().toString());
056        
057            while (results.hasNext()) {
058                for (String r: results.next().getStrings()) text.append(r + "\t");
059                text.append("\n");
060            }
061            
062            provider.terminate();
063            frame.setContentPane(new JScrollPane(text));
064            frame.setBounds(500, 400, 600, 300);
065            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
066            frame.setVisible(true);
067        }
068    
069        static StpProvider.StpCallback g_callback = new StpProvider.StpCallback() {
070            public Authentication getAuthenticationEx(Domain domain,
071                                                      String realm,
072                                                      int retryCount,
073                                                      StpProvider provider,
074                                                      WvcmException failure) 
075            throws WvcmException
076            {
077                // Try to reuse last credentials on each new repository
078                if (m_unpw != null && retryCount == 0)
079                    return m_unpw;
080    
081                String title = "Enter " + domain + " Username '+' Password for " 
082                                + realm + " [" + retryCount + "]";
083                
084                if (failure != null)
085                    title = "Login failed: " + failure + "\n" + title;
086                
087                String unpw = JOptionPane.showInputDialog(title, "admin+");
088    
089                if (unpw == null || unpw.length() == 0)
090                    throw new IllegalAccessError("User canceled request");
091                
092                return m_unpw = unpw.equals("anonymous")? null: new UnPw(unpw);
093            }
094    
095            public Authentication getAuthentication(String r, int c)
096                {   return null; /* Will not be called */   }
097    
098            private UnPw m_unpw;
099        };
100    
101        /**
102         * A simple Authentication object in which the username and password
103         * obtained from the user is cached for use by the CM API.
104         */
105        static class UnPw implements CcProvider.CcAuthentication {
106            /**
107             * Constructs an Authentication object
108             * 
109             * @param unpw A String containing username+password.
110             */
111            UnPw(String unpw) {  m_data = unpw.split("\\+", -2); }
112    
113            public String loginName() { return m_data[0]; }
114            public String password() { return m_data.length > 1 ? m_data[1] : ""; };
115            public String getPrimaryGroupName() {  return m_data.length > 2 ? m_data[2] : ""; }
116    
117            /* (non-Javadoc)
118             * @see com.ibm.rational.wvcm.stp.cc.CcProvider.CcAuthentication#getGroupList()
119             */
120            public List<String> getGroupList()
121            {
122                return null;
123            }
124    
125            /** The cached credentials */
126            private String[] m_data;
127    
128        }
129    }