1 | package gov.va.med.edp;
|
---|
2 |
|
---|
3 | import gov.va.med.edp.vistalink.VistaLinkTemplate;
|
---|
4 | import gov.va.med.edp.vistalink.locator.VistaLinkConnectorConfig;
|
---|
5 | import gov.va.med.edp.vistalink.locator.VistaLinkConnectorConfigConnectionFactoryLocator;
|
---|
6 | import gov.va.med.vistalink.adapter.cci.VistaLinkResourceException;
|
---|
7 | import joptsimple.OptionException;
|
---|
8 | import joptsimple.OptionParser;
|
---|
9 | import joptsimple.OptionSet;
|
---|
10 | import joptsimple.OptionSpec;
|
---|
11 | import org.springframework.dao.DataAccessResourceFailureException;
|
---|
12 |
|
---|
13 | import java.io.Console;
|
---|
14 | import java.io.IOException;
|
---|
15 | import java.util.ArrayList;
|
---|
16 | import java.util.Arrays;
|
---|
17 | import java.util.HashSet;
|
---|
18 | import java.util.List;
|
---|
19 |
|
---|
20 | import static java.util.Arrays.asList;
|
---|
21 |
|
---|
22 | public class VistaLinkTester {
|
---|
23 | public static void main(String[] args) throws IOException {
|
---|
24 | OptionParser parser = new OptionParser();
|
---|
25 | parser.acceptsAll(asList("?", "help"), "Print usage information");
|
---|
26 | OptionSpec<String> hostOption = parser.acceptsAll(asList("S", "server", "host"), "Hostname or IP where VistALink is listening").withRequiredArg().ofType(String.class);
|
---|
27 | OptionSpec<Integer> portOption = parser.acceptsAll(asList("P", "port"), "Port where VistALink is listening").withRequiredArg().ofType(Integer.class);
|
---|
28 | OptionSpec<String> divisionOption = parser.acceptsAll(asList("D", "division", "station-num"), "Station Number").withRequiredArg().ofType(String.class);
|
---|
29 | OptionSpec<String> duzOption = parser.acceptsAll(asList("U", "DUZ")).withRequiredArg().ofType(String.class);
|
---|
30 | OptionSpec<String> rpcContextOption = parser.acceptsAll(asList("C", "context", "rpc-context"), "RPC Context").withRequiredArg().ofType(String.class);
|
---|
31 | OptionSpec<String> rpcNameOption = parser.acceptsAll(asList("N", "name", "rpc-name"), "RPC Name").withRequiredArg().ofType(String.class);
|
---|
32 |
|
---|
33 | try {
|
---|
34 | OptionSet options = parser.parse(args);
|
---|
35 |
|
---|
36 | if (options.has("?") || options.has("help")) {
|
---|
37 | System.out.println("Usage:");
|
---|
38 | parser.printHelpOn(System.out);
|
---|
39 | System.exit(0);
|
---|
40 | }
|
---|
41 |
|
---|
42 | Console console = System.console();
|
---|
43 |
|
---|
44 | String host = options.has(hostOption) ? hostOption.value(options) : console.readLine("Host: ");
|
---|
45 | int port = options.has(portOption) ? portOption.value(options) : Integer.parseInt(console.readLine("Port: "));
|
---|
46 | String division = options.has(divisionOption) ? divisionOption.value(options) : console.readLine("Station Number: ");
|
---|
47 |
|
---|
48 | char[] accessCodeChars = console.readPassword("Access: ");
|
---|
49 | char[] verifyCodeChars = console.readPassword("Verify: ");
|
---|
50 |
|
---|
51 | String accessCode = new String(accessCodeChars);
|
---|
52 | String verifyCode = new String(verifyCodeChars);
|
---|
53 |
|
---|
54 | String duz = options.has(duzOption) ? duzOption.value(options) : console.readLine("DUZ: ");
|
---|
55 | String rpcContext = options.has(rpcContextOption) ? rpcContextOption.value(options) : console.readLine("RPC Context: ");
|
---|
56 | String rpcName = options.has(rpcNameOption) ? rpcNameOption.value(options) : console.readLine("RPC Name: ");
|
---|
57 |
|
---|
58 | if (rpcContext == null) rpcContext = "";
|
---|
59 |
|
---|
60 | VistaLinkTester tester = new VistaLinkTester(host, port, division, accessCode, verifyCode);
|
---|
61 |
|
---|
62 | System.out.println("Enter RPC Parameters (^ when finished)");
|
---|
63 |
|
---|
64 | List<String> params = new ArrayList<String>();
|
---|
65 | int i = 1;
|
---|
66 | boolean done = false;
|
---|
67 | while (!done) {
|
---|
68 | String param = console.readLine("RPC Param " + i + ": ");
|
---|
69 | if (param.equalsIgnoreCase("^")) {
|
---|
70 | done = true;
|
---|
71 | } else {
|
---|
72 | params.add(param);
|
---|
73 | i++;
|
---|
74 | }
|
---|
75 | }
|
---|
76 |
|
---|
77 | System.out.println("Executing vlink://" + division + "@" + host + ":" + port + "/" + rpcContext + "/" + rpcName + formatRpcParams(params));
|
---|
78 |
|
---|
79 | System.out.println(tester.execute(duz, rpcContext, rpcName, params));
|
---|
80 | } catch (OptionException e) {
|
---|
81 | System.out.println(e.getLocalizedMessage());
|
---|
82 | System.out.println("Usage:");
|
---|
83 | parser.printHelpOn(System.out);
|
---|
84 | System.exit(1);
|
---|
85 | } catch (gov.va.med.edp.vistalink.VistaLinkDataRetrievalFailureException e) {
|
---|
86 | System.out.println(e.getMessage());
|
---|
87 | } catch (Throwable t) {
|
---|
88 | t.printStackTrace();
|
---|
89 | }
|
---|
90 | }
|
---|
91 |
|
---|
92 | private static String formatRpcParams(List params) {
|
---|
93 | StringBuilder b = new StringBuilder();
|
---|
94 | if (!params.isEmpty()) b.append("?");
|
---|
95 | for (int i = 0; i < params.size(); i++) {
|
---|
96 | b.append("[");
|
---|
97 | b.append(i + 1);
|
---|
98 | b.append("]=");
|
---|
99 | b.append(params.get(i).toString());
|
---|
100 | if (i < params.size() - 1) {
|
---|
101 | b.append("&");
|
---|
102 | }
|
---|
103 | }
|
---|
104 | return b.toString();
|
---|
105 | }
|
---|
106 |
|
---|
107 | private String division;
|
---|
108 |
|
---|
109 | private VistaLinkTemplate t;
|
---|
110 |
|
---|
111 | public VistaLinkTester(String host, int port, String division, String accessCode, String verifyCode) {
|
---|
112 | this.division = division;
|
---|
113 |
|
---|
114 | HashSet connectors = new HashSet();
|
---|
115 | connectors.add(new VistaLinkConnectorConfig(division, "VISTALINK TESTER", host, port, accessCode, verifyCode));
|
---|
116 |
|
---|
117 | VistaLinkConnectorConfigConnectionFactoryLocator l = new VistaLinkConnectorConfigConnectionFactoryLocator();
|
---|
118 | l.setConnectors(connectors);
|
---|
119 |
|
---|
120 | t = new VistaLinkTemplate(l);
|
---|
121 | }
|
---|
122 |
|
---|
123 | public String execute(String duz, String rpcContext, String rpcName, List params) {
|
---|
124 | if (params.size() > 0)
|
---|
125 | return t.rpcAsUser(this.division, duz, rpcContext, rpcName, params);
|
---|
126 | else
|
---|
127 | return t.rpcAsUser(this.division, duz, rpcContext, rpcName);
|
---|
128 | }
|
---|
129 | }
|
---|