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 * (C) 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
016package com.ibm.rational.stp.client.samples;
017
018import static javax.swing.JOptionPane.showInputDialog;
019
020import java.util.List;
021
022import javax.swing.JFrame;
023import javax.swing.JOptionPane;
024import javax.swing.JScrollPane;
025import javax.swing.JTextArea;
026import javax.wvcm.ProviderFactory;
027import javax.wvcm.WvcmException;
028
029import com.ibm.rational.wvcm.stp.StpProvider;
030import com.ibm.rational.wvcm.stp.StpProvider.Domain;
031import com.ibm.rational.wvcm.stp.cc.CcProvider;
032import com.ibm.rational.wvcm.stp.cq.CqProvider;
033import com.ibm.rational.wvcm.stp.cq.CqQuery;
034import 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 */
040public 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}