package org.ukiuni.pacifista; import java.io.File; import java.io.IOException; import java.lang.reflect.InvocationTargetException; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.script.ScriptException; import org.ukiuni.pacifista.PluginLoader.PluginDownloadInfo; import org.ukiuni.pacifista.util.ScriptingUtil; import org.ukiuni.pacifista.util.ScriptingUtil.ScriptEngineNotFoundException; public class Main { public static void main(String[] args) throws ScriptException, IOException, IllegalArgumentException, SecurityException, InstantiationException, IllegalAccessException, InvocationTargetException, NoSuchMethodException, ClassNotFoundException { String baseDirPath; if (0 == args.length) { baseDirPath = "."; } else { baseDirPath = args[1]; } File baseDir = new File(baseDirPath); File templateDir = new File(baseDir, "templates"); File pluginDir = new File(baseDir, "plugins"); Map<String, String> parameters = new HashMap<String, String>(); int parameterIndex = 0; Command command = new Command(); for (int i = 0; i < args.length; i++) { if ("--parameters".equals(args[i])) { ScriptingUtil.parseParameters(parameters, args[i + 1]); parameterIndex = i; } if ("--plugin".equals(args[i])) { command.operation = Command.Operation.PLUGIN; if (!(args.length > i + 2 || (args.length > i + 1 && "list".equals(args[i + 1])))) { System.out.println("usage: pacifista --plugin [install|uninstall|list] {pluginName} {version} \nversion is option. other are needed."); return; } command.command = args[i + 1]; if (args.length > i + 2) { command.pluginName = args[i + 2]; } if (args.length > i + 3) { command.pluginVersion = args[i + 3]; } } } if (Command.Operation.PLUGIN == command.operation) { String proxyHost = parameters.get("proxyHost"); int proxyPort = 0; if (parameters.containsKey("proxyPort")) { proxyPort = Integer.parseInt(parameters.get("proxyPort")); } String proxyUser = parameters.get("proxyUser"); String proxyPassword = parameters.get("proxyPassword"); String pluginHost = parameters.get("pluginHost"); PluginLoader pluginLoader = new PluginLoader(); if (null != pluginHost) { pluginLoader.setPluginHostUrl(pluginHost); System.out.println("set host " + pluginHost); } if ("list".equals(command.command)) { List<PluginDownloadInfo> pluginDownloadInfos = pluginLoader.loadAllPluginInfos(proxyHost, proxyPort, proxyUser, proxyPassword); System.out.println("plugins /////////////"); for (PluginDownloadInfo pluginDownloadInfo : pluginDownloadInfos) { System.out.println(pluginDownloadInfo.getName() + " : " + pluginDownloadInfo.getVersion()); if (null != pluginDownloadInfo.getDescription()) { System.out.println("\t" + pluginDownloadInfo.getDescription().replace("\n", "\n\t")); } System.out.println(); } System.out.println("/////////////////////"); return; } String printVersion = ""; if (command.pluginVersion != null) { printVersion = "version " + command.pluginVersion + " "; } System.out.println("start " + command.pluginName + " " + printVersion + command.command); if ("install".equals(command.command)) { pluginLoader.downloadPluginIfNotHave(baseDir, pluginLoader.loadAllPluginFromDirectory(new File(baseDir, "plugins")), command.pluginName, command.pluginVersion, proxyHost, proxyPort, proxyUser, proxyPassword); } else if ("uninstall".equals(command.command)) { pluginLoader.deletePlugin(baseDir, command.pluginName, command.pluginVersion, proxyHost, proxyPort, proxyUser, proxyPassword); } else { System.out.println("pacifista --plugin command must specify [install|uninstall] "); } System.out.println("plugin " + command.pluginName + " " + command.command + "ed"); return; } Map<String, Object> env = new HashMap<String, Object>(); for (String key : parameters.keySet()) { env.put(key, parameters.get(key)); } try { if (parameterIndex + 2 < args.length) { for (int i = 2; i < args.length; i++) { ScriptingUtil.execScript(baseDir, args[i], templateDir, pluginDir, env); } } else { File scriptDir = new File(baseDir, "scripts"); ScriptingUtil.execFolder(baseDir, scriptDir, templateDir, pluginDir, env); } } catch (ScriptEngineNotFoundException e) { String lang = e.getScript(); if ("JavaScript".equals(lang)) { System.out.println("This java is not contain JavaScript ScriptEngine. Use sun java. or add JavaScript ScriptEngine "); } else if ("jruby".equals(lang)) { System.out.println("Install ruby plugin. execute, \"pacifista --plugin install ruby\""); } else if ("groovy".equals(lang)) { System.out.println("Install groovy plugin. execute, \"pacifista --plugin install groovy\""); } else if ("python".equals(lang)) { System.out.println("Install python plugin. execute, \"pacifista --plugin install python\""); } } finally { RemoteFactory.closeAll(); } } private static class Command { public static enum Operation { PLUGIN, EXCEC; } public Operation operation = Operation.EXCEC; public String command; public String pluginName; public String pluginVersion; } }