[Japi-cvs] SF.net SVN: japi: [211] libs/argparser/trunk/src/net/sf/japi/io/args
Status: Beta
Brought to you by:
christianhujer
From: <chr...@us...> - 2006-11-26 15:40:26
|
Revision: 211 http://svn.sourceforge.net/japi/?rev=211&view=rev Author: christianhujer Date: 2006-11-26 07:40:25 -0800 (Sun, 26 Nov 2006) Log Message: ----------- Started with converter registry, added string converter. Modified Paths: -------------- libs/argparser/trunk/src/net/sf/japi/io/args/ArgParser.java Added Paths: ----------- libs/argparser/trunk/src/net/sf/japi/io/args/converter/ConverterRegistry.java libs/argparser/trunk/src/net/sf/japi/io/args/converter/StringConverter.java Modified: libs/argparser/trunk/src/net/sf/japi/io/args/ArgParser.java =================================================================== --- libs/argparser/trunk/src/net/sf/japi/io/args/ArgParser.java 2006-11-26 15:38:11 UTC (rev 210) +++ libs/argparser/trunk/src/net/sf/japi/io/args/ArgParser.java 2006-11-26 15:40:25 UTC (rev 211) @@ -24,6 +24,7 @@ import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.*; +import java.io.Closeable; /** * Parser for command line arguments. @@ -52,6 +53,9 @@ /** The currently used option. */ private String currentOption; + /** The list of opened streams. */ + private final List<Closeable> openedStreams = new ArrayList<Closeable>(); + /** * Create a new ArgParser. * This ArgParser uses {@link System#in}, {@link System#out} and {@link System#err}. Added: libs/argparser/trunk/src/net/sf/japi/io/args/converter/ConverterRegistry.java =================================================================== --- libs/argparser/trunk/src/net/sf/japi/io/args/converter/ConverterRegistry.java (rev 0) +++ libs/argparser/trunk/src/net/sf/japi/io/args/converter/ConverterRegistry.java 2006-11-26 15:40:25 UTC (rev 211) @@ -0,0 +1,83 @@ +package net.sf.japi.io.args.converter; + +import java.util.Map; +import java.util.HashMap; +import java.util.Enumeration; +import java.net.URL; +import java.io.IOException; + +/** + * Registry for Converters. + * @author <a href="mailto:ch...@ri...">Christian Hujer</a> + */ +public class ConverterRegistry { + + /** Singleton instance. */ + private static final ConverterRegistry instance = createSingletonInstance(); + + /** Map for converters. */ + private final Map<Class<?>, Converter<?>> converters = new HashMap<Class<?>, Converter<?>>(); + + /** + * Creates a ConverterRegistry. + * Usually you want a shared global ConverterRegistry and use {@link #getInstance()} instead of creating your own ConverterRegistry instance. + * @see #getInstance() + */ + public ConverterRegistry() { + } + + /** + * Creates the global shared instance of ConverterRegistry. + * @return The global shared instance of ConverterRegistry. + */ + private static ConverterRegistry createSingletonInstance() { + final ConverterRegistry instance = new ConverterRegistry(); + try { + for (final Enumeration<URL> urls = ConverterRegistry.class.getClassLoader().getResources("META-INF/services/net.sf.japi.io.args.ConverterRegistry"); urls.hasMoreElements() ; ) { + final URL url = urls.nextElement(); + // TODO + } + } catch (final IOException e) { + // TODO + e.printStackTrace(); + } + return instance; + } + + /** + * Returns the global shared instance of ConverterRegistry. + * @return The global shared instance of ConverterRegistry. + */ + public static ConverterRegistry getInstance() { + return instance; + } + + /** + * Get the Converter for a specific class. + * @param clazz Class to get Converter for. + * @return <code>null</code> if no suited converter was found. + */ + public <T> Converter<T> getConverter(final Class<T> clazz) { + return (Converter<T>) converters.get(clazz); + } + + /** + * Register a Converter for a specific class. + * @param clazz Class Class to register converter for + * @param converter Converter to register + */ + public <T> void register(final Class<T> clazz, final Converter<T> converter) { + converters.put(clazz, converter); + for (Class<?> superClass = clazz; (superClass = superClass.getSuperclass()) != null;) { + if (!converters.containsKey(superClass)) { + converters.put(superClass, converter); + } + } + for (final Class<?> interf : clazz.getInterfaces()) { + if (!converters.containsKey(interf)) { + converters.put(interf, converter); + } + } + } + +} // class ConverterRegistry Property changes on: libs/argparser/trunk/src/net/sf/japi/io/args/converter/ConverterRegistry.java ___________________________________________________________________ Name: svn:mime-type + text/plain Name: svn:eol-style + LF Added: libs/argparser/trunk/src/net/sf/japi/io/args/converter/StringConverter.java =================================================================== --- libs/argparser/trunk/src/net/sf/japi/io/args/converter/StringConverter.java (rev 0) +++ libs/argparser/trunk/src/net/sf/japi/io/args/converter/StringConverter.java 2006-11-26 15:40:25 UTC (rev 211) @@ -0,0 +1,14 @@ +package net.sf.japi.io.args.converter; + +/** + * Dummy Converter which "converts" a String into a String by simply returning it. + * @author <a href="mailto:ch...@ri...">Christian Hujer</a> + */ +public class StringConverter implements Converter<String> { + + /** {@inheritDoc} */ + public String convert(final String arg) throws Exception { + return arg; + } + +} // class StringConverter Property changes on: libs/argparser/trunk/src/net/sf/japi/io/args/converter/StringConverter.java ___________________________________________________________________ Name: svn:mime-type + text/plain Name: svn:eol-style + LF This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |