/* The contents of this file are subject to the license and copyright terms * detailed in the license directory at the root of the source tree (also * available online at http://fedora-commons.org/license/). */ package fedora.server.journal.readerwriter.multicast.rmi; import java.io.File; import org.apache.log4j.lf5.LogLevel; import org.apache.log4j.lf5.LogLevelFormatException; /** * <p> * RmiJournalReceiverArguments.java * </p> * <p> * Parses and encapsulates the command line arguments that are provided to the * {@link RmiJournalReceiver}. * </p> * * @author jblake * @version $Id: RmiJournalReceiverArguments.java,v 1.1 2007/03/07 19:30:42 * jblake Exp $ */ public class RmiJournalReceiverArguments { private static final int DEFAULT_REGISTRY_PORT_NUMBER = 1099; private static final int DEFAULT_SERVER_PORT_NUMBER = 1100; private final File directoryPath; private final int registryPortNumber; private final int serverPortNumber; private final LogLevel logLevel; public RmiJournalReceiverArguments(String[] args) { if (args.length < 1) { throw new IllegalArgumentException("usage: RmiJournalReceiver [fullDirectoryPath] {registryPort} {serverPort} {logLevel}"); } directoryPath = parseDirectoryPath(args); registryPortNumber = parseRegistryPortNumber(args); serverPortNumber = parseServerPortNumber(args); logLevel = parseLogLevel(args); } private File parseDirectoryPath(String[] args) { File path = new File(args[0]); if (!path.exists()) { throw new IllegalArgumentException("'" + path.getAbsolutePath() + "' does not exist."); } if (!path.isDirectory()) { throw new IllegalArgumentException("'" + path.getAbsolutePath() + "' is not a directory."); } if (!path.canWrite()) { throw new IllegalArgumentException("Cannot write to '" + path.getAbsolutePath() + "'."); } return path; } private int parseRegistryPortNumber(String[] args) { if (args.length < 2) { return DEFAULT_REGISTRY_PORT_NUMBER; } else { try { return Integer.parseInt(args[1]); } catch (NumberFormatException e) { throw new IllegalArgumentException("'" + args[1] + "' is not a valid integer."); } } } private int parseServerPortNumber(String[] args) { if (args.length < 3) { return DEFAULT_SERVER_PORT_NUMBER; } else { try { return Integer.parseInt(args[2]); } catch (NumberFormatException e) { throw new IllegalArgumentException("'" + args[2] + "' is not a valid integer."); } } } private LogLevel parseLogLevel(String[] args) { if (args.length < 4) { return LogLevel.WARN; } else { try { return LogLevel.valueOf(args[3]); } catch (LogLevelFormatException e) { throw new IllegalArgumentException("'" + args[3] + "' is not a valid log level."); } } } public File getDirectoryPath() { return directoryPath; } public int getRegistryPortNumber() { return registryPortNumber; } public int getServerPortNumber() { return serverPortNumber; } public LogLevel getLogLevel() { return logLevel; } }