From 0ed2c1124cf1b9e49a2ec1fa0126a8df09f9e758 Mon Sep 17 00:00:00 2001 From: Andrew Branson Date: Tue, 7 Oct 2014 09:18:11 +0200 Subject: Repackage to org.cristalise --- .../cristalise/kernel/process/AbstractMain.java | 178 +++++++++++++++++++++ 1 file changed, 178 insertions(+) create mode 100644 src/main/java/org/cristalise/kernel/process/AbstractMain.java (limited to 'src/main/java/org/cristalise/kernel/process/AbstractMain.java') diff --git a/src/main/java/org/cristalise/kernel/process/AbstractMain.java b/src/main/java/org/cristalise/kernel/process/AbstractMain.java new file mode 100644 index 0000000..5acfbef --- /dev/null +++ b/src/main/java/org/cristalise/kernel/process/AbstractMain.java @@ -0,0 +1,178 @@ +/** + * This file is part of the CRISTAL-iSE kernel. + * Copyright (c) 2001-2014 The CRISTAL Consortium. All rights reserved. + * + * This library 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 3 of the License, or (at + * your option) any later version. + * + * This library is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; with out 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 library; if not, write to the Free Software Foundation, + * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + * + * http://www.fsf.org/licensing/licenses/lgpl.html + */ +package org.cristalise.kernel.process; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.PrintStream; +import java.util.Enumeration; +import java.util.Properties; + +import org.cristalise.kernel.process.resource.BadArgumentsException; +import org.cristalise.kernel.utils.FileStringUtility; +import org.cristalise.kernel.utils.Logger; + + +/************************************************************************** + * + * @author $Author: abranson $ $Date: 2004/10/25 15:27:35 $ + * @version $Revision: 1.67 $ + **************************************************************************/ +abstract public class AbstractMain +{ + public static boolean isServer = false; + private static ShutdownHandler shutdownHandler; + + public static String MAIN_ARG_NONEWLOGSTREAM = "noNewLogStream"; + public static String MAIN_ARG_CONFIG = "config"; + public static String MAIN_ARG_LOGLEVEL = "logLevel"; + public static String MAIN_ARG_LOGFILE = "logFile"; + public static String MAIN_ARG_CONNECT = "connect"; + + + + /************************************************************************** + * reading and setting input paramaters + ************************************************************************** + * + * Known arguments : + * + * + * + * @param args + * @return + * @throws BadArgumentsException + */ + public static Properties readC2KArgs( String[] args ) throws BadArgumentsException { + Properties c2kProps; + Properties argProps = new Properties(); + int logLevel = 0; + PrintStream logStream = System.out; + + int i = 0; + while( i < args.length ) { + if (args[i].startsWith("-") && args[i].length()>1) { + String key = args[i].substring(1); + if (argProps.containsKey(key)) + throw new BadArgumentsException("Argument "+args[i]+" given twice"); + String value = ""; + if (!args[i+1].startsWith("-")) + value = args[++i]; + argProps.put(key, value); + i++; + } + else + throw new BadArgumentsException("Bad argument: "+args[i]); + + } + + if (argProps.containsKey("logFile")) + try { + logStream = new PrintStream(new FileOutputStream(argProps.getProperty("logFile"), true)); + } catch (FileNotFoundException e) { + e.printStackTrace(); + throw new BadArgumentsException("Logfile "+argProps.getProperty("logFile")+" cannot be created"); + } + + + // if the optional arg "noNewLogStream" isn't present => add a + // new LogStream + boolean wMustAddNewLogStream = !argProps.contains(MAIN_ARG_NONEWLOGSTREAM); + if (wMustAddNewLogStream) { + + // Set up log stream + if (argProps.containsKey("logLevel")) + logLevel = Integer.parseInt(argProps.getProperty("logLevel")); + + Logger.addLogStream(logStream, logLevel); + } + if (wMustAddNewLogStream) Logger.msg( + String.format("New logStream added at logLevel %d: %s", logLevel, logStream.getClass().getName())); + + + // Dump params if log high enough + + if (Logger.doLog(3)) for (Enumeration e = argProps.propertyNames(); e.hasMoreElements();) { + String next = (String)e.nextElement(); + System.out.println("AbstractMain: Param "+next+": "+argProps.getProperty(next)); + } + + String configPath = argProps.getProperty("config"); + if (configPath == null) + throw new BadArgumentsException("Config file not specified"); + + if (!new File(configPath).exists()) + throw new BadArgumentsException("Config file "+configPath+" not found"); + else + Logger.msg(0, "Config file: "+configPath); + + // Load config & connect files into c2kprops + c2kProps = FileStringUtility.loadConfigFile(argProps.getProperty("config") ); + c2kProps.putAll(argProps); // args overlap config + + String connectFile = c2kProps.getProperty("connect"); + if (connectFile == null) + throw new BadArgumentsException("Connect file not specified"); + + if (!new File(connectFile).exists()) + throw new BadArgumentsException("Connect file "+connectFile+" not found"); + else + Logger.msg(0, "Connect file: "+connectFile); + + FileStringUtility.appendConfigFile( c2kProps, connectFile); + + if (!c2kProps.containsKey("LocalCentre")) { + String connectFileName = new File(connectFile).getName(); + String centreId = connectFileName.substring(0, connectFileName.lastIndexOf(".clc")); + c2kProps.setProperty("LocalCentre", centreId); + } + + c2kProps.putAll(argProps); // args override connect file too + Logger.msg(7, "AbstractMain::standardSetUp() - readC2KArgs() DONE."); + + return c2kProps; + } + + public static void setShutdownHandler(ShutdownHandler handler) { + shutdownHandler = handler; + } + + public static void shutdown(int errCode) { + if (shutdownHandler!= null) + shutdownHandler.shutdown(errCode, isServer); + else + try { + Gateway.close(); + } catch (Exception ex) { + Logger.error(ex); + } + } +} -- cgit v1.2.3