/*
* JBoss, Home of Professional Open Source
* Copyright 2011, Red Hat, Inc. and individual contributors
* by the @authors tag. See the copyright.txt in the distribution for a
* full listing of individual contributors.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.mobicents.protocols.ss7.tools.traceparser.bootstrap;
import java.awt.EventQueue;
import java.beans.XMLDecoder;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.Properties;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
import org.apache.log4j.xml.DOMConfigurator;
import org.mobicents.protocols.ss7.tools.traceparser.MainGui;
import org.mobicents.protocols.ss7.tools.traceparser.Ss7ParseParameters;
/**
* @author <a href="mailto:amit.bhayani@jboss.com">amit bhayani</a>
*/
public class Main {
// private static final String APP_NAME = "SS7 Trace Parser";
private static final String HOME_DIR = "TRACE_PARSER_HOME";
private static final String LOG4J_URL = "/conf/log4j.properties";
private static final String LOG4J_URL_XML = "/conf/log4j.xml";
public static final String TRACE_PARSER_HOME = "traceparser.home.dir";
public static final String TRACE_PARSER_DATA = "traceparser.data.dir";
private static int index = 0;
private static Logger logger = Logger.getLogger(Main.class);
// private String command = null;
// private String appName = "main";
// private int rmiPort = -1;
// private int httpPort = -1;
public static void main(String[] args) throws Throwable {
String homeDir = getHomeDir(args);
System.setProperty(TRACE_PARSER_HOME, homeDir);
String dataDir = homeDir + File.separator + "data" + File.separator;
System.setProperty(TRACE_PARSER_DATA, dataDir);
if (!initLOG4JProperties(homeDir) && !initLOG4JXml(homeDir)) {
logger.error("Failed to initialize loggin, no configuration. Defaults are used.");
}
logger.info("log4j configured");
Ss7ParseParameters par = null;
String persistDir = homeDir + File.separator + "data";
try {
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(persistDir + File.separator + "Ss7ParseParameters.xml"));
XMLDecoder d = new XMLDecoder(bis);
par = (Ss7ParseParameters) d.readObject();
d.close();
} catch (Exception e) {
// we ignore exceptions
}
Main main = new Main();
// main.processCommandLine(args);
main.boot(persistDir, par);
}
// private void processCommandLine(String[] args) {
//
// String programName = System.getProperty("program.name", APP_NAME);
//
// int c;
// String arg;
// LongOpt[] longopts = new LongOpt[5];
// longopts[0] = new LongOpt("help", LongOpt.NO_ARGUMENT, null, 'h');
// longopts[1] = new LongOpt("name", LongOpt.REQUIRED_ARGUMENT, null, 'n');
// longopts[2] = new LongOpt("http", LongOpt.REQUIRED_ARGUMENT, null, 't');
// longopts[3] = new LongOpt("rmi", LongOpt.REQUIRED_ARGUMENT, null, 'r');
// longopts[4] = new LongOpt("core", LongOpt.NO_ARGUMENT, null, 0);
//
// Getopt g = new Getopt(APP_NAME, args, "-:n:t:r:h", longopts);
// g.setOpterr(false); // We'll do our own error handling
// //
// while ((c = g.getopt()) != -1) {
// switch (c) {
//
// case 't':
// // http port
// arg = g.getOptarg();
// this.httpPort = Integer.parseInt(arg);
// if (this.httpPort < 0 || this.httpPort > 65000) {
// System.err.println("Http port should be in range 0 to 65000");
// System.exit(0);
// }
// break;
// case 'r':
// // rmi port
// arg = g.getOptarg();
// this.rmiPort = Integer.parseInt(arg);
// if (this.rmiPort < 0 || this.rmiPort > 65000) {
// System.err.println("RMI port should be in range 0 to 65000");
// System.exit(0);
// }
// break;
// case 'n':
// // name
// arg = g.getOptarg();
// this.appName = arg;
// break;
//
// case 'h':
// this.genericHelp();
// break;
//
// case ':':
// System.out.println("You need an argument for option " + (char) g.getOptopt());
// System.exit(0);
// break;
// case '?':
// System.out.println("The option '" + (char) g.getOptopt() + "' is not valid");
// System.exit(0);
// break;
// case 1:
// String optArg = g.getOptarg();
// if (optArg.equals("core")) {
// this.command = "core";
// } else if (optArg.equals("gui")) {
// this.command = "gui";
// } else if (optArg.equals("help")) {
// if (this.command == null) {
// this.genericHelp();
// } else if (this.command.equals("core")) {
// this.coreHelp();
// } else if (this.command.equals("gui")) {
// this.guiHelp();
// } else {
// System.out.println("Invalid command " + optArg);
// this.genericHelp();
// }
// } else {
// System.out.println("Invalid command " + optArg);
// this.genericHelp();
// }
// break;
//
// default:
// this.genericHelp();
// break;
// }
// }
//
// }
//
// private void genericHelp() {
// System.out.println("usage: " + APP_NAME + "<command> [options]");
// System.out.println();
// System.out.println("command:");
// System.out.println(" core Start the SS7 Trace Parser core");
// System.out.println(" gui Start the SS7 Trace Parser gui");
// System.out.println();
// System.out.println("see 'run <command> help' for more information on a specific command:");
// System.out.println();
// System.exit(0);
// }
//
// private void coreHelp() {
// System.out.println("core: Starts the Trace Parser core");
// System.out.println();
// System.out.println("usage: " + APP_NAME + " core [options]");
// System.out.println();
// System.out.println("options:");
// System.out.println(" -n, --name=<Trace Parser name> Trace Parser name. If not passed default is main");
// System.out.println(" -t, --http=<http port> Http port for core");
// System.out.println(" -r, --rmi=<rmi port> RMI port for core");
// System.out.println();
// System.exit(0);
// }
//
// private void guiHelp() {
// System.out.println("gui: Starts the Trace Parser gui");
// System.out.println();
// System.out.println("usage: " + APP_NAME + " gui [options]");
// System.out.println();
// System.out.println("options:");
// System.out.println(" -n, --name=<Trace Parser name> Trace Parser name. If not passed default is main");
// System.out.println();
// System.exit(0);
// }
private static boolean initLOG4JProperties(String homeDir) {
String Log4jURL = homeDir + LOG4J_URL;
try {
URL log4jurl = getURL(Log4jURL);
InputStream inStreamLog4j = log4jurl.openStream();
Properties propertiesLog4j = new Properties();
try {
propertiesLog4j.load(inStreamLog4j);
PropertyConfigurator.configure(propertiesLog4j);
} catch (IOException e) {
e.printStackTrace();
}
} catch (Exception e) {
// e.printStackTrace();
logger.info("Failed to initialize LOG4J with properties file.");
return false;
}
return true;
}
private static boolean initLOG4JXml(String homeDir) {
String Log4jURL = homeDir + LOG4J_URL_XML;
try {
URL log4jurl = getURL(Log4jURL);
DOMConfigurator.configure(log4jurl);
} catch (Exception e) {
// e.printStackTrace();
logger.info("Failed to initialize LOG4J with xml file.");
return false;
}
return true;
}
/**
* Gets the Media Server Home directory.
*
* @param args the command line arguments
* @return the path to the home directory.
*/
private static String getHomeDir(String[] args) {
if (System.getenv(HOME_DIR) == null) {
if (args.length > index) {
return args[index++];
} else {
return ".";
}
} else {
return System.getenv(HOME_DIR);
}
}
protected void boot(String persistDir, Ss7ParseParameters par) throws Throwable {
// if (this.command == null) {
// System.out.println("No command passed");
// this.genericHelp();
// } else if (this.command.equals("gui")) {
// EventQueue.invokeLater(new MainGui(appName));
// } else if (this.command.equals("core")) {
// MainCore mainCore = new MainCore();
// mainCore.start(appName, httpPort, rmiPort);
// }
MainGui mainGui = new MainGui(persistDir, par);
EventQueue.invokeLater(mainGui);
}
public static URL getURL(String url) throws Exception {
File file = new File(url);
if (file.exists() == false) {
throw new IllegalArgumentException("No such file: " + url);
}
return file.toURI().toURL();
}
// protected void registerShutdownThread() {
// Runtime.getRuntime().addShutdownHook(new Thread(new ShutdownThread()));
// }
//
// private class ShutdownThread implements Runnable {
//
// public void run() {
// System.out.println("Shutting down");
//
// }
// }
}