package railo.cli;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.jsp.JspException;
import railo.loader.util.Util;
public class CLI {
private static boolean useRMI=false;
/**
* Config
*
* webroot - webroot directory
* servlet-name - name of the servlet (default:CFMLServlet)
* server-name - server name (default:localhost)
* uri - host/scriptname/query
* cookie - cookies (same pattern as query string)
* form - form (same pattern as query string)
*/
/**
* @param args
* @throws JspException
*/
public static void main(String[] args) throws ServletException, IOException, JspException {
Map<String,String> config=toMap(args);
System.setProperty("railo.cli.call", "true");
// webroot
String strWebroot=config.get("webroot");
if(Util.isEmpty(strWebroot,true)) throw new IOException("missing webroot configuration");
File root=new File(strWebroot);
root.mkdirs();
// servletNane
String servletName=config.get("servlet-name");
if(Util.isEmpty(servletName,true))servletName="CFMLServlet";
if(useRMI){
CLIFactory factory = new CLIFactory(root,servletName,config);
factory.setDaemon(false);
factory.start();
}
else {
CLIInvokerImpl invoker=new CLIInvokerImpl(root, servletName);
invoker.invoke(config);
}
//Map<String,Object> attributes=new HashMap<String, Object>();
//Map<String, String> initParameters=new HashMap<String, String>();
//initParameters.put("railo-server-directory", new File(root,"server").getAbsolutePath());
//ServletContextImpl servletContext = new ServletContextImpl(root, attributes, initParameters, 1, 0);
//ServletConfigImpl servletConfig = new ServletConfigImpl(servletContext, servletName);
//CFMLEngine engine = CFMLEngineFactory.getInstance(servletConfig);
//engine.cli(config,servletConfig);
}
// java railo-cli.jar -config=.../railo-web.xml.cfm -uri=/susi/index.cfm?test=1 -form=name=susi -cgi=user_agent=urs -output=.../test.txt ...
private static Map<String, String> toMap(String[] args) {
int index;
Map<String, String> config=new HashMap<String, String>();
String raw,key,value;
if(args!=null)for(int i=0;i<args.length;i++){
raw=args[i].trim();
if(Util.isEmpty(raw, true)) continue;
if(raw.startsWith("-"))raw=raw.substring(1).trim();
index=raw.indexOf('=');
if(index==-1) {
key=raw;
value="";
}
else {
key=raw.substring(0,index).trim();
value=raw.substring(index+1).trim();
}
config.put(key.toLowerCase(), value);
}
return config;
}
}