X-Git-Url: http://git.nikiroo.be/?a=blobdiff_plain;f=src%2Fbe%2Fnikiroo%2Fjvcard%2Flauncher%2FOptional.java;fp=src%2Fbe%2Fnikiroo%2Fjvcard%2Flauncher%2FOptional.java;h=b737c019502375fca91795019f4c0260477ab534;hb=02b341aa6dcd14dc311f6ea218e199f20e242f36;hp=0000000000000000000000000000000000000000;hpb=845fb1d7c3adc0d6cdf9465c0e983ba447cfab6d;p=jvcard.git diff --git a/src/be/nikiroo/jvcard/launcher/Optional.java b/src/be/nikiroo/jvcard/launcher/Optional.java new file mode 100644 index 0000000..b737c01 --- /dev/null +++ b/src/be/nikiroo/jvcard/launcher/Optional.java @@ -0,0 +1,140 @@ +package be.nikiroo.jvcard.launcher; + +import java.io.IOException; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.List; + +import be.nikiroo.jvcard.Card; + +/** + * This class let you call "optional" methods, that is, methods and classes that + * may or may not be present. + * + *

+ * It currently offers services for: + *

+ *

+ * + * @author niki + * + */ +class Optional { + /** + * Create a new jVCard server on the given port, then run it. + * + * @param port + * the port to run on + * + * @throws SecurityException + * in case of internal error + * @throws NoSuchMethodException + * in case of internal error + * @throws ClassNotFoundException + * in case of internal error + * @throws IllegalAccessException + * in case of internal error + * @throws InstantiationException + * in case of internal error + * @throws InvocationTargetException + * in case of internal error + * @throws IllegalArgumentException + * in case of internal error + * @throws IOException + * in case of IO error + */ + @SuppressWarnings("unchecked") + static public void runServer(int port) throws NoSuchMethodException, + SecurityException, ClassNotFoundException, InstantiationException, + IllegalAccessException, IllegalArgumentException, + InvocationTargetException { + @SuppressWarnings("rawtypes") + Class serverClass = Class.forName("be.nikiroo.jvcard.remote.Server"); + Method run = serverClass.getDeclaredMethod("run", new Class[] {}); + run.invoke(serverClass.getConstructor(int.class).newInstance(port)); + } + + /** + * Start the TUI program. + * + * @param textMode + * TRUE to force text mode, FALSE to force the Swing terminal + * emulator, null to automatically determine the best choice + * @param files + * the files to show at startup + * + * @throws SecurityException + * in case of internal error + * @throws NoSuchMethodException + * in case of internal error + * @throws ClassNotFoundException + * in case of internal error + * @throws IllegalAccessException + * in case of internal error + * @throws InstantiationException + * in case of internal error + * @throws InvocationTargetException + * in case of internal error + * @throws IllegalArgumentException + * in case of internal error + * @throws IOException + * in case of IO error + */ + @SuppressWarnings("unchecked") + static public void startTui(Boolean textMode, List files) + throws NoSuchMethodException, SecurityException, + ClassNotFoundException, InstantiationException, + IllegalAccessException, IllegalArgumentException, + InvocationTargetException { + @SuppressWarnings("rawtypes") + Class launcherClass = Class + .forName("be.nikiroo.jvcard.tui.TuiLauncher"); + Method start = launcherClass.getDeclaredMethod("start", new Class[] { + Boolean.class, List.class }); + start.invoke(launcherClass.newInstance(), textMode, files); + } + + /** + * Return the {@link Card} corresponding to the given URL, synchronised if + * necessary. + * + * @param input + * the jvcard:// with resource name URL (e.g.: + * jvcard://localhost:4444/coworkers) + * + * @throws SecurityException + * in case of internal error + * @throws NoSuchMethodException + * in case of internal error + * @throws ClassNotFoundException + * in case of internal error + * @throws IllegalAccessException + * in case of internal error + * @throws InstantiationException + * in case of internal error + * @throws InvocationTargetException + * in case of internal error + * @throws IllegalArgumentException + * in case of internal error + * @throws IOException + * in case of IO error + */ + @SuppressWarnings("unchecked") + static public Card syncCard(String input) throws ClassNotFoundException, + NoSuchMethodException, SecurityException, InstantiationException, + IllegalAccessException, IllegalArgumentException, + InvocationTargetException, IOException { + @SuppressWarnings("rawtypes") + Class syncClass = Class.forName("be.nikiroo.jvcard.remote.Sync"); + Method sync = syncClass.getDeclaredMethod("sync", + new Class[] { boolean.class }); + + Object o = syncClass.getConstructor(String.class).newInstance(input); + Card card = (Card) sync.invoke(o, false); + + return card; + } +}