source: main/trunk/greenstone3/src/java/org/greenstone/gsdl3/LibraryCommandline.java@ 26496

Last change on this file since 26496 was 26496, checked in by ak19, 11 years ago

More descriptive name for Library 2, as it can be run from the commandline, taking the CGI params in a Greenstone url as input

  • Property svn:keywords set to Author Date Id Revision
File size: 6.6 KB
Line 
1/*
2 * Library2.java
3 * Copyright (C) 2002 New Zealand Digital Library, http://www.nzdl.org
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
18 */
19package org.greenstone.gsdl3;
20
21import org.greenstone.gsdl3.core.*;
22import org.greenstone.gsdl3.util.*;
23import org.greenstone.util.GlobalProperties;
24
25import org.w3c.dom.Document;
26import org.w3c.dom.Element;
27import org.w3c.dom.Node;
28
29import java.io.BufferedReader;
30import java.io.InputStreamReader;
31import java.io.File;
32import java.io.IOException;
33import java.util.HashMap;
34import java.util.Set;
35import java.util.Iterator;
36
37/**
38 * A program to take cgi args from the command line and return html
39 *
40 * @author Katherine Don
41 * @version $Revision: 26496 $
42 */
43
44final public class Library2
45{
46
47 protected XMLConverter converter = null;
48 protected Document doc = null;
49
50 protected HashMap<String, String> saved_args = null;
51 protected GSParams params = null;
52 protected DefaultReceptionist recept = null;
53
54 public Library2()
55 {
56 this.converter = new XMLConverter();
57 this.doc = converter.newDOM();
58 this.saved_args = new HashMap<String, String>();
59 this.params = new GSParams();
60 this.recept = new DefaultReceptionist();
61 }
62
63 public void configure(String site_name, String interface_name)
64 {
65
66 HashMap<String, Comparable> config_params = new HashMap<String, Comparable>();
67 //config_params.put(GSConstants.GSDL3_HOME, gsdl_home);
68 config_params.put(GSConstants.SITE_NAME, site_name);
69 config_params.put(GSConstants.INTERFACE_NAME, interface_name);
70 config_params.put(GSConstants.ALLOW_CLIENT_SIDE_XSLT, false);
71
72 // new message router - create it and pass a handle to recept.
73 // the servlet wont use this directly
74 MessageRouter message_router = new MessageRouter();
75
76 message_router.setSiteName(site_name);
77 message_router.configure();
78 // new receptionist
79 recept.setConfigParams(config_params);
80 recept.setMessageRouter(message_router);
81 recept.setParams(params);
82 recept.configure();
83 }
84
85 /*
86 * On Linux, run as:
87 * GS3> java -classpath "web/WEB-INF/lib/*":"lib/jni/*" org.greenstone.gsdl3.Library2 localsite default
88 * Press enter to accept the default cgi-args to pass in.
89 *
90 * For how to include all jars in a folder into the classpath to run a java program, see
91 * http://stackoverflow.com/questions/219585/setting-multiple-jars-in-java-classpath
92 * http://stackoverflow.com/questions/6780678/run-class-in-jar-file
93 */
94 public static void main(String args[])
95 {
96
97 if (System.getenv("GSDL3SRCHOME") == null) {
98 System.out.println("Before calling this script, run: source gs3-setup.sh");
99 System.exit(1);
100 }
101
102 if (args.length != 2)
103 {
104 System.out.println("Usage: Library2 <site name> <interface name>");
105 System.exit(1);
106 }
107
108 // force GlobalProperties to default GSDL3HOME to GSDL3SRCHOME/web if not already set
109 GlobalProperties.loadGlobalProperties("");
110
111 Library2 library = new Library2();
112 library.configure(args[0], args[1]);
113
114 BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
115 String query = null;
116 String result = null;
117 while (true)
118 {
119 System.out.println("Please enter the cgi args (all on one line), or 'exit' to quit (default a=p&sa=home)");
120 try
121 {
122 query = br.readLine();
123 }
124 catch (Exception e)
125 {
126 System.err.println("Library2 exception:" + e.getMessage());
127 }
128 if (query.startsWith("exit"))
129 {
130 System.exit(1);
131 }
132
133 result = library.process(query);
134
135 System.out.println(result);
136
137 }
138
139 }
140
141 protected String process(String query)
142 {
143 Element xml_message = generateRequest(query);
144 System.out.println("*********************");
145 System.out.println(converter.getPrettyString(xml_message));
146 Node xml_result = recept.process(xml_message);
147 return this.converter.getPrettyString(xml_result);
148 }
149
150 protected Element generateRequest(String cgiargs)
151 {
152
153 Element xml_message = this.doc.createElement(GSXML.MESSAGE_ELEM);
154 Element xml_request = GSXML.createBasicRequest(this.doc, GSXML.REQUEST_TYPE_PAGE, "", new UserContext());
155 xml_message.appendChild(xml_request);
156 Element xml_param_list = this.doc.createElement(GSXML.PARAM_ELEM + GSXML.LIST_MODIFIER);
157 xml_request.appendChild(xml_param_list);
158
159 // the defaults
160 String action = "p";
161 String subaction = "home";
162 String lang = saved_args.get(GSParams.LANGUAGE);
163 if (lang == null)
164 {
165 lang = "en";
166 }
167 String output = "html";
168
169 String args[] = cgiargs.split("&");
170 for (int i = 0; i < args.length; i++)
171 {
172 String arg = args[i];
173 int pos = arg.indexOf('=');
174 if (pos == -1)
175 continue;
176 String name = arg.substring(0, pos);
177 String value = arg.substring(pos + 1);
178 if (name.equals(GSParams.ACTION))
179 {
180 action = value;
181 }
182 else if (name.equals(GSParams.SUBACTION))
183 {
184 subaction = (value);
185 }
186 else if (name.equals(GSParams.LANGUAGE))
187 {
188 lang = value;
189 saved_args.put(name, value);
190 }
191 else if (name.equals(GSParams.OUTPUT))
192 {
193 output = value;
194 }
195 else if (params.shouldSave(name))
196 {
197 saved_args.put(name, value);
198 }
199 else
200 {
201 // make a param now
202 Element param = doc.createElement(GSXML.PARAM_ELEM);
203 param.setAttribute(GSXML.NAME_ATT, name);
204 param.setAttribute(GSXML.VALUE_ATT, GSXML.xmlSafe(value));
205 xml_param_list.appendChild(param);
206 }
207 }
208
209 xml_request.setAttribute(GSXML.OUTPUT_ATT, output);
210 xml_request.setAttribute(GSXML.ACTION_ATT, action);
211 xml_request.setAttribute(GSXML.SUBACTION_ATT, subaction);
212 xml_request.setAttribute(GSXML.LANG_ATT, lang);
213
214 // put in all the params from the session cache
215 Set<String> params = saved_args.keySet();
216 Iterator<String> i = params.iterator();
217 while (i.hasNext())
218 {
219 String name = i.next();
220 if (name.equals(GSParams.LANGUAGE))
221 continue;
222 Element param = this.doc.createElement(GSXML.PARAM_ELEM);
223 param.setAttribute(GSXML.NAME_ATT, name);
224 param.setAttribute(GSXML.VALUE_ATT, GSXML.xmlSafe(saved_args.get(name)));
225 xml_param_list.appendChild(param);
226 }
227
228 return xml_message;
229 }
230}
Note: See TracBrowser for help on using the repository browser.