/*
* File : CmdReportServer.java
* Created : 16-jul-2001 20:23
* By : fbusquets
*
* JClic - Authoring and playing system for educational activities
*
* Copyright (C) 2000 - 2005 Francesc Busquets & Departament
* d'Educacio de la Generalitat de Catalunya
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details (see the LICENSE file).
*/
import edu.xtec.jclic.ReportServerConstants;
import edu.xtec.jclic.report.*;
import edu.xtec.util.Encryption;
import edu.xtec.util.Messages;
import edu.xtec.util.db.ConnectionBeanProvider;
import java.io.*;
import java.text.DateFormat;
import java.util.Date;
/**
*
* @author Francesc Busquets (fbusquets@xtec.cat)
* @version 13.09.09
*/
public class CmdReportServer implements ReportServerEventMaker.Listener, ReportServerConstants {
static String iDriver, iUrl, iUser, iPwd;
static int iHttpPort, iHttpTimeout;
static boolean iCreateTables;
static String iTablePrefix;
DateFormat dateFormat=DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.MEDIUM);
public CmdReportServer(String driver, String url, String user, String pwd, int httpPort, int httpTimeOut, boolean createTables, String tablePrefix) throws Exception{
showValidCommands();
//ReportServerJDBCBridge bridge=new ReportServerJDBCBridge(driver, url, user, pwd);
//ConnectionBeanProvider cbp=new PooledConnectionBeanProvider(driver, url, user, pwd, 2, 5, "JClicConnectionPool.log", 1.0);
//ConnectionBeanProvider cbp=new SingleConnectionBeanProvider(driver, url, user, pwd, true);
ConnectionBeanProvider cbp=ConnectionBeanProvider.getConnectionBeanProvider(true, driver, url, user, pwd, true);
ReportServerJDBCBridge bridge=new ReportServerJDBCBridge(cbp, createTables, tablePrefix);
reportEventPerformed(new ReportServerEvent(ReportServerEvent.SYSTEM, url, null, ReportServerEvent.CONNECT));
HTTPReportServer httpServer=new HTTPReportServer(new Messages(ReportServer.MSG_BUNDLE));
httpServer.addListener(this);
//httpServer.startServer(bridge, httpPort, timeOut);
httpServer.startServer(httpPort, httpTimeOut);
BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
boolean loop=true;
String s=null;
while(loop){
try{
s=in.readLine();
Thread.sleep(1000);
} catch(Exception ex){
loop=false;
}
if(s!=null){
if(s.equalsIgnoreCase("stop")){
httpServer.stopServer();
}
else if(s.equalsIgnoreCase("start")) {
httpServer.startServer(httpPort, httpTimeOut);
}
else if(s.equalsIgnoreCase("exit")){
if(httpServer.serverRunning())
httpServer.stopServer();
loop=false;
}
else{
showValidCommands();
}
}
}
bridge.end();
//bridge=null;
reportEventPerformed(new ReportServerEvent(ReportServerEvent.SYSTEM, url, null, ReportServerEvent.DISCONNECT));
}
public static void main(String[] args){
String propFile=CFG_FILE;
java.util.Properties prop;
int i=0;
if(args.length>0){
if(args[1].equals("-help")){
displayHelp();
return;
}
if(!args[0].startsWith("-")){
propFile=args[0];
i++;
}
}
prop=new java.util.Properties();
try{
prop.load(ReportServerConstants.class.getResourceAsStream(CFG_FILE));
if(!CFG_FILE.equals(propFile)){
prop.load(CmdReportServer.class.getResourceAsStream(propFile));
String pwd=prop.getProperty(ConnectionBeanProvider.DB_PASSWORD);
if(pwd!=null && pwd.length()>0)
prop.setProperty(ConnectionBeanProvider.DB_PASSWORD, Encryption.Decrypt(pwd));
}
} catch(Exception ex){
System.err.println("ERROR: Invalid properties file name\n"+ex);
displayHelp();
return;
}
iDriver=prop.getProperty(ConnectionBeanProvider.DB_DRIVER, edu.xtec.jclic.report.BasicJDBCBridge.DEFAULT_ODBC_BRIDGE);
iUrl=prop.getProperty(ConnectionBeanProvider.DB_SERVER, edu.xtec.jclic.report.BasicJDBCBridge.DEFAULT_DB);
iUser=prop.getProperty(ConnectionBeanProvider.DB_LOGIN, null);
iPwd=prop.getProperty(ConnectionBeanProvider.DB_PASSWORD, null);
iHttpPort=Integer.parseInt(prop.getProperty(HTTP_PORT, Integer.toString(HTTPReportServer.DEFAULT_PORT)));
iHttpTimeout=Integer.parseInt(prop.getProperty(HTTP_TIMEOUT, Integer.toString(HTTPReportServer.DEFAULT_TIMEOUT)));
iTablePrefix=prop.getProperty(BasicJDBCBridge.TABLE_PREFIX_KEY, null);
iCreateTables="true".equalsIgnoreCase((prop.getProperty(BasicJDBCBridge.CREATE_TABLES_KEY, "true")));
for(; i<args.length; i++){
boolean err=false;
if(i<args.length-1){
if(args[i].equals("-driver")) iDriver=args[++i];
else if(args[i].equals("-url")) iUrl=args[++i];
else if(args[i].equals("-user")) iUser=args[++i];
else if(args[i].equals("-pwd")) iPwd=args[++i];
else if(args[i].equals("-port")) iHttpPort=Integer.parseInt(args[++i]);
else if(args[i].equals("-timeout")) iHttpTimeout=Integer.parseInt(args[++i]);
else if(args[i].equals("-prefix")) iTablePrefix=args[++i];
else if(args[i].equals("-create")) iCreateTables="true".equalsIgnoreCase(args[++i]);
else err=true;
} else err=true;
if(err){
System.err.println("Syntax error!");
displayHelp();
return;
}
}
try{
new CmdReportServer(iDriver, iUrl, iUser, iPwd, iHttpPort, iHttpTimeout, iCreateTables, iTablePrefix);
System.err.println("Report Server closed");
} catch(Exception ex){
System.err.println("Unable to start!\n"+ex);
}
}
static void displayHelp(){
System.out.println("Syntax: java CmdReportServer [-help] [fileName] [-option value]..");
System.out.println("Switches:");
System.out.println(" -help displays this message");
System.out.println(" fileName get values from the specified fileName");
System.out.println(" if ommitted, default values will be read");
System.out.println(" from ReportServer.properties");
System.out.println("Option-Value pairs:");
System.out.println(" -driver name of the JDBC driver");
System.out.println(" -url JDBC path to the database");
System.out.println(" -user system user name");
System.out.println(" -pwd system user password");
System.out.println(" -port HTTP port for foreign connections (default: 9000)");
System.out.println(" -timeout maximum number of seconds of socket inactivity");
System.out.println(" -create [true|false] automatic creation of tables (default: true)");
System.out.println(" -prefix prefix used in table names");
}
public void reportEventPerformed(ReportServerEvent ev){
System.out.println(dateFormat.format(new Date())+" "+ev.toString());
}
void showValidCommands(){
System.out.println("-----------------------------------------------------");
System.out.println("Valid control commands:");
System.out.println("stop - Close all connections and stop server");
System.out.println("start - Start server");
System.out.println("exit - Close all connections, stop server and exit");
System.out.println("-----------------------------------------------------");
}
}