//$Header: /cvsroot-fuse/mec-as2/39/mendelson/comm/as2/AS2.java,v 1.1 2012/04/18 14:10:16 heller Exp $
package de.mendelson.comm.as2;
import java.awt.Color;
import java.awt.Font;
import java.awt.geom.AffineTransform;
import java.io.File;
import java.io.IOException;
import java.util.Locale;
import java.util.logging.Logger;
import javax.swing.JOptionPane;
import org.apache.commons.io.FileUtils;
import de.mendelson.comm.as2.client.AS2Gui;
import de.mendelson.comm.as2.preferences.PreferencesAS2;
import de.mendelson.comm.as2.server.AS2Agent;
import de.mendelson.comm.as2.server.AS2Server;
import de.mendelson.comm.as2.server.UpgradeRequiredException;
import de.mendelson.util.Splash;
import de.mendelson.util.security.BCCryptoHelper;
/*
* Copyright (C) mendelson-e-commerce GmbH Berlin Germany
*
* This software is subject to the license agreement set forth in the license.
* Please read and agree to all terms before using this software.
* Other product and brand names are trademarks of their respective owners.
*/
/**
* Start the AS2 server and the configuration GUI
* @author S.Heller
* @version $Revision: 1.1 $
*/
public class AS2 {
/**Displays a usage of how to use this class
*/
public static void printUsage() {
System.out.println("java " + AS2.class.getName() + " <options>");
System.out.println("Start up a " + AS2ServerVersion.getProductNameShortcut() + " server ");
System.out.println("Options are:");
System.out.println("-lang <String>: Language to use for the server, nonpersistent. Possible values are \"en\", \"fr\" and \"de\".");
System.out.println("-nohttpserver: Do not start the integrated HTTP server, only useful if you are integrating the product into an other web container");
System.out.println("-allowallclients: Allows client connections from every host. Without this setting client connections are allowed from localhost only");
}
public static void cleanup() {
// RJC: Runtime creates database, lock, and log artifacts. During
// development time this is very annoying. Temporarily cleaning
// up these artifacts...
// TODO better solution at some point (need persistent state)
String RUNTIME_ARTIFACTS[] = new String[] {
"AS2_DB_CONFIG.log",
"AS2_DB_CONFIG.script",
"AS2_DB_RUNTIME.log",
"AS2_DB_RUNTIME.script",
"client_server_session0.logd",
"client_server_session1.logd",
"client_server_session2.logd",
"AS2_DB_CONFIG.properties",
"AS2_DB_CONFIG.tmp",
"AS2_DB_RUNTIME.properties",
"AS2_DB_RUNTIME.tmp",
"client_server_session0.log.lck",
"client_server_session1.log.lck",
"client_server_session2.log.lck",
"mendelson_opensource_AS2.lock",
"messages",
"AS2_DB_CONFIG.properties",
"AS2_DB_CONFIG.script",
"AS2_DB_RUNTIME.properties",
"AS2_DB_RUNTIME.script",
"client_server_session0.log.lck",
"client_server_session0.log"
};
for (String s : RUNTIME_ARTIFACTS) {
File f = new File(s);
if (f.isFile()) {
f.delete();
} else {
if (f.isDirectory()) {
try {
FileUtils.deleteDirectory(f);
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
/**Method to start the server on from the command line*/
public static void main(String args[]) {
// TODO remove
cleanup();
String language = null;
boolean startHTTP = true;
boolean allowAllClients = false;
int optind;
for (optind = 0; optind < args.length; optind++) {
if (args[optind].toLowerCase().equals("-lang")) {
language = args[++optind];
} else if (args[optind].toLowerCase().equals("-nohttpserver")) {
startHTTP = false;
} else if (args[optind].toLowerCase().equals("-allowallclients")) {
allowAllClients = true;
} else if (args[optind].toLowerCase().equals("-?")) {
AS2.printUsage();
System.exit(1);
} else if (args[optind].toLowerCase().equals("-h")) {
AS2.printUsage();
System.exit(1);
} else if (args[optind].toLowerCase().equals("-help")) {
AS2.printUsage();
System.exit(1);
}
}
//load language from preferences
if (language == null) {
PreferencesAS2 preferences = new PreferencesAS2();
language = preferences.get(PreferencesAS2.LANGUAGE);
}
if (language != null) {
if (language.toLowerCase().equals("en")) {
Locale.setDefault(Locale.ENGLISH);
} else if (language.toLowerCase().equals("de")) {
Locale.setDefault(Locale.GERMAN);
} else if (language.toLowerCase().equals("fr")) {
Locale.setDefault(Locale.FRENCH);
} else {
AS2.printUsage();
System.out.println();
System.out.println("Language " + language + " is not supported.");
System.exit(1);
}
}
Splash splash = new Splash("/de/mendelson/comm/as2/client/Splash.jpg");
AffineTransform transform = new AffineTransform();
splash.setTextAntiAliasing(false);
transform.setToScale(1.0, 1.0);
splash.addDisplayString(new Font("Verdana", Font.BOLD, 11),
7, 262, AS2ServerVersion.getFullProductName(),
new Color(0x65, 0xB1, 0x80), transform);
splash.setVisible(true);
splash.toFront();
//start server
try {
//register the database drivers for the VM
Class.forName("org.hsqldb.jdbcDriver");
//initialize the security provider
BCCryptoHelper helper = new BCCryptoHelper();
helper.initialize();
AS2Server as2Server = new AS2Server(startHTTP, allowAllClients);
AS2Agent agent = new AS2Agent(as2Server);
} catch (UpgradeRequiredException e) {
//an upgrade to HSQLDB 2.x is required, delete the lock file
Logger.getLogger(AS2Server.SERVER_LOGGER_NAME).warning(e.getMessage());
JOptionPane.showMessageDialog(null, e.getClass().getName() + ": " + e.getMessage());
AS2Server.deleteLockFile();
System.exit(1);
} catch (Throwable e) {
if (splash != null) {
splash.destroy();
}
JOptionPane.showMessageDialog(null, e.getMessage());
System.exit(1);
}
//start client
AS2Gui gui = new AS2Gui(splash, "localhost");
gui.setVisible(true);
splash.destroy();
splash.dispose();
}
}