OSDN Git Service

Change directory structure.
[dvibrowser/dvi2epub.git] / src / main / java / jp / sourceforge / dvibrowser / dvi2epub / cmd / CommandUtils.java
diff --git a/src/main/java/jp/sourceforge/dvibrowser/dvi2epub/cmd/CommandUtils.java b/src/main/java/jp/sourceforge/dvibrowser/dvi2epub/cmd/CommandUtils.java
new file mode 100644 (file)
index 0000000..436cdcf
--- /dev/null
@@ -0,0 +1,101 @@
+/*
+ * Copyright (c) 2012, Takeyuki Nagao
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or
+ * without modification, are permitted provided that the
+ * following conditions are met:
+ * 
+ *  * Redistributions of source code must retain the above
+ *    copyright notice, this list of conditions and the
+ *    following disclaimer.
+ *  * Redistributions in binary form must reproduce the above
+ *    copyright notice, this list of conditions and the
+ *    following disclaimer in the documentation and/or other
+ *    materials provided with the distribution.
+ *    
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+ * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
+ * OF SUCH DAMAGE.
+ */
+
+package jp.sourceforge.dvibrowser.dvi2epub.cmd;
+
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+
+
+public class CommandUtils {
+       private CommandUtils() {}
+
+       public static int executeCommand(Class<?> cls, String[] args)
+                       throws CommandException {
+               try {
+                       if (Command.class.isAssignableFrom(cls)) {
+                               Command cmd = (Command) cls.newInstance();
+                               int ret = cmd.execute(args);
+                               if (cmd.wantExit()) {
+                                       System.exit(ret);
+                               }
+                               return ret;
+                       } else {
+                               run(cls.getName(), args);
+                               return Command.EXIT_SUCCESS;
+                       }
+               } catch (Exception e) {
+                       throw new CommandException(e);
+               }
+       }
+       
+       public static void run(String classname, String[] args) throws Exception {
+               Class<?> cls = Class.forName(classname);
+               cls.getMethod("main", new Class[] { String[].class })
+                 .invoke(null, new Object[] { args });
+       }
+       
+       public static boolean parseBoolean(String arg, boolean value) {
+               if (arg == null) return value;
+               arg = arg.toLowerCase().trim();
+               if (arg.equals("true") || arg.equals("yes")) {
+                       return true;
+               }
+               return false;
+       }
+       
+       public static <T> T unescapeNull(T value)
+       {
+               if (value instanceof String && Command.NULL.equals(value))
+                       return null;
+               return value;
+       }
+       
+       @SuppressWarnings("unchecked")
+       public static <T> T readValue(Class<T> cls, Object object, String methodName) {
+               try {
+                       Method m = object.getClass().getDeclaredMethod(methodName,
+                                       new Class<?>[] {});
+                       return CommandUtils.unescapeNull((T) m.invoke(object));
+               } catch (NoSuchMethodException ex) {
+                       // Ignored.
+               } catch (IllegalArgumentException e) {
+                       // Ignored.
+               } catch (IllegalAccessException e) {
+                       // Ignored.
+               } catch (InvocationTargetException e) {
+                       // Ignored.
+               }
+               return null;
+       }
+       
+}