package org.jacorb.notification;
/*
* JacORB - a free Java ORB
*
* Copyright (C) 1997-2014 Gerald Brose / The JacORB Team.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 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; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library; if not, write to the Free
* Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
import java.util.Properties;
import java.util.StringTokenizer;
import org.jacorb.notification.conf.Attributes;
/**
* @author Alphonse Bendt
*/
public class ConsoleMain
{
public static void help()
{
System.out.println("valid arguments: [-printIOR] [-printCorbaloc] " + "[-writeIOR <filename>] "
+ "[-registerName <nameId>[.<nameKind>]] "
+ "[-port <oaPort>] [-channels <channels>] [-help]");
}
private static class CmdLineParser
{
private Properties props = new Properties();
public Properties getProps()
{
return props;
}
public CmdLineParser(String[] args)
{
perform(args);
}
private void perform(String[] args) throws IllegalArgumentException
{
try
{
// process arguments
for (int i = 0; i < args.length; i++)
{
if (args[i].equals("-printIOR"))
{
props.put(Attributes.PRINT_IOR, "on");
}
else if (args[i].equals("-printCorbaloc"))
{
props.put(Attributes.PRINT_CORBALOC, "on");
}
else if (args[i].equals("-help"))
{
// TODO exception is used as goto here.
throw new IllegalArgumentException("usage");
}
else if (args[i].equals("-port"))
{
props.put("OAPort", args[++i]);
}
else if (args[i].equals("-channels"))
{
props.put(Attributes.START_CHANNELS, args[++i]);
}
else if (args[i].equals("-writeIOR"))
{
props.put(Attributes.IOR_FILE, args[++i]);
}
else if (args[i].equals("-registerName"))
{
String name = args[++i];
addCOSNamingName(props, name);
}
else if (args[i].equals("-typed"))
{
props.put(Attributes.ENABLE_TYPED_CHANNEL, "on");
}
else
{
throw new IllegalArgumentException("unknown Argument: " + args[i]);
}
}
} catch (ArrayIndexOutOfBoundsException e)
{
throw new IllegalArgumentException("illegal number of arguments");
}
}
}
public static void addCOSNamingName(Properties props, String name)
{
if (name == null || name.length() == 0)
{
props.remove(Attributes.REGISTER_NAME_ID);
props.remove(Attributes.REGISTER_NAME_KIND);
return;
}
int index = name.indexOf(".");
if (name.lastIndexOf(".") != index)
{
throw new IllegalArgumentException(name
+ ": argument to -registerName should be "
+ "<nameId> or <nameId>.<nameKind>");
}
if (index != -1)
{
props.put(Attributes.REGISTER_NAME_ID, name.substring(0, index));
props.put(Attributes.REGISTER_NAME_KIND, name.substring(index + 1));
}
else
{
props.put(Attributes.REGISTER_NAME_ID, name);
}
}
public static AbstractChannelFactory newFactory(String[] args) throws Exception
{
Properties props = parseProperties(args);
return AbstractChannelFactory.newFactory(props);
}
public static Properties parseProperties(String[] args)
{
if (args == null)
{
return new Properties();
}
CmdLineParser _cmdLineParser = new CmdLineParser(args);
return _cmdLineParser.getProps();
}
public static String[] splitArgs(String argString)
{
if (argString == null)
{
return new String[0];
}
StringTokenizer tokenizer = new StringTokenizer(argString, " ");
String[] result = new String[tokenizer.countTokens()];
for (int i = 0; i < result.length; ++i)
{
result[i] = tokenizer.nextToken();
}
return result;
}
public static final void main(String[] args) throws Exception
{
try
{
newFactory(args);
}
catch (IllegalArgumentException e)
{
System.out.println(e.getMessage());
help();
}
}
}