Index: EDIS/trunk/java/vistalink-tester/src/main/java/gov/va/med/edp/VistaLinkTester.java
===================================================================
--- EDIS/trunk/java/vistalink-tester/src/main/java/gov/va/med/edp/VistaLinkTester.java	(revision 1261)
+++ EDIS/trunk/java/vistalink-tester/src/main/java/gov/va/med/edp/VistaLinkTester.java	(revision 1262)
@@ -4,12 +4,15 @@
 import gov.va.med.edp.vistalink.locator.VistaLinkConnectorConfig;
 import gov.va.med.edp.vistalink.locator.VistaLinkConnectorConfigConnectionFactoryLocator;
+import gov.va.med.vistalink.adapter.cci.VistaLinkResourceException;
 import joptsimple.OptionException;
 import joptsimple.OptionParser;
 import joptsimple.OptionSet;
 import joptsimple.OptionSpec;
+import org.springframework.dao.DataAccessResourceFailureException;
 
 import java.io.Console;
 import java.io.IOException;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.HashSet;
 import java.util.List;
@@ -20,12 +23,20 @@
     public static void main(String[] args) throws IOException {
         OptionParser parser = new OptionParser();
-        OptionSpec<String> hostOption = parser.acceptsAll(asList("S", "server", "host")).withRequiredArg().ofType(String.class);
-        OptionSpec<Integer> portOption = parser.acceptsAll(asList("P", "port")).withRequiredArg().ofType(Integer.class);
-        OptionSpec<String> divisionOption = parser.acceptsAll(asList("D", "division", "station-num")).withRequiredArg().ofType(String.class);
-        OptionSpec<String> rpcContextOption = parser.acceptsAll(asList("C", "context", "rpc-context")).withRequiredArg().ofType(String.class);
-        OptionSpec<String> rpcNameOption = parser.acceptsAll(asList("N", "name", "rpc-name")).withRequiredArg().ofType(String.class);
+        parser.acceptsAll(asList("?", "help"), "Print usage information");
+        OptionSpec<String> hostOption = parser.acceptsAll(asList("S", "server", "host"), "Hostname or IP where VistALink is listening").withRequiredArg().ofType(String.class);
+        OptionSpec<Integer> portOption = parser.acceptsAll(asList("P", "port"), "Port where VistALink is listening").withRequiredArg().ofType(Integer.class);
+        OptionSpec<String> divisionOption = parser.acceptsAll(asList("D", "division", "station-num"), "Station Number").withRequiredArg().ofType(String.class);
+        OptionSpec<String> duzOption = parser.acceptsAll(asList("U", "DUZ")).withRequiredArg().ofType(String.class);
+        OptionSpec<String> rpcContextOption = parser.acceptsAll(asList("C", "context", "rpc-context"), "RPC Context").withRequiredArg().ofType(String.class);
+        OptionSpec<String> rpcNameOption = parser.acceptsAll(asList("N", "name", "rpc-name"), "RPC Name").withRequiredArg().ofType(String.class);
 
         try {
             OptionSet options = parser.parse(args);
+
+            if (options.has("?") || options.has("help")) {
+                System.out.println("Usage:");
+                parser.printHelpOn(System.out);
+                System.exit(0);
+            }
 
             Console console = System.console();
@@ -33,16 +44,19 @@
             String host = options.has(hostOption) ? hostOption.value(options) : console.readLine("Host: ");
             int port = options.has(portOption) ? portOption.value(options) : Integer.parseInt(console.readLine("Port: "));
-            String division = options.has(divisionOption) ? divisionOption.value(options) : console.readLine("Division: ");
+            String division = options.has(divisionOption) ? divisionOption.value(options) : console.readLine("Station Number: ");
 
-            char[] accessCode = console.readPassword("Access: ");
-            char[] verifyCode = console.readPassword("Verify: ");
+            char[] accessCodeChars = console.readPassword("Access: ");
+            char[] verifyCodeChars = console.readPassword("Verify: ");
 
+            String accessCode = new String(accessCodeChars);
+            String verifyCode = new String(verifyCodeChars);
+
+            String duz = options.has(duzOption) ? duzOption.value(options) : console.readLine("DUZ: ");
             String rpcContext = options.has(rpcContextOption) ? rpcContextOption.value(options) : console.readLine("RPC Context: ");
             String rpcName = options.has(rpcNameOption) ? rpcNameOption.value(options) : console.readLine("RPC Name: ");
-            ;
 
             if (rpcContext == null) rpcContext = "";
 
-            VistaLinkTester tester = new VistaLinkTester(host, port, division, accessCode.toString(), verifyCode.toString());
+            VistaLinkTester tester = new VistaLinkTester(host, port, division, accessCode, verifyCode);
 
             System.out.println("Enter RPC Parameters (^ when finished)");
@@ -61,7 +75,7 @@
             }
 
-            System.out.println("Executing vlink://" + division + "@" + host + ":" + port + "/" + rpcContext + "/" + rpcName);
+            System.out.println("Executing vlink://" + division + "@" + host + ":" + port + "/" + rpcContext + "/" + rpcName + formatRpcParams(params));
 
-            System.out.println(tester.execute(rpcContext, rpcName, params));
+            System.out.println(tester.execute(duz, rpcContext, rpcName, params));
         } catch (OptionException e) {
             System.out.println(e.getLocalizedMessage());
@@ -69,9 +83,24 @@
             parser.printHelpOn(System.out);
             System.exit(1);
+        } catch (gov.va.med.edp.vistalink.VistaLinkDataRetrievalFailureException e) {
+            System.out.println(e.getMessage());
         } catch (Throwable t) {
             t.printStackTrace();
         }
-//        HashSet connectors = new HashSet();
-//        connectors.add(new VistaLinkConnectorConfig("500", "WORLDVISTA DEMO CLINIC", "66.206.177.84", 9310, "EDISUSER1", "VISTAIS#1"));
+    }
+
+    private static String formatRpcParams(List params) {
+        StringBuilder b = new StringBuilder();
+        if (!params.isEmpty()) b.append("?");
+        for (int i = 0; i < params.size(); i++) {
+            b.append("[");
+            b.append(i + 1);
+            b.append("]=");
+            b.append(params.get(i).toString());
+            if (i < params.size() - 1) {
+                b.append("&");
+            }
+        }
+        return b.toString();
     }
 
@@ -92,9 +121,9 @@
     }
 
-    public String execute(String rpcContext, String rpcName, List params) {
+    public String execute(String duz, String rpcContext, String rpcName, List params) {
         if (params.size() > 0)
-            return t.rpcAsApplication(this.division, "VISTALINK TESTER", rpcContext, rpcName, params);
+            return t.rpcAsUser(this.division, duz, rpcContext, rpcName, params);
         else
-            return t.rpcAsApplication(this.division, "VISTALINK TESTER", rpcContext, rpcName);
+            return t.rpcAsUser(this.division, duz, rpcContext, rpcName);
     }
 }
