package net.coffeedriven; import net.coffeedriven.alfred.item.DefaultItemManager; import net.coffeedriven.alfred.item.FeedbackGenerator; import net.coffeedriven.alfred.plugin.PluginManager; import net.coffeedriven.alfred.spi.ItemManager; import org.apache.commons.cli.*; import java.io.File; public class AlfredWorker { public static void main(String[] args) { new AlfredWorker().run(args); } private void run(String[] args) { CommandLineParser parser = new GnuParser(); try { Options options = createOptions(); CommandLine line = parser.parse(options, args); dispatch(line, options); } catch (ParseException e) { System.err.println(e.getMessage()); } } private void dispatch(CommandLine line, Options options) { if (!line.hasOption("pluginPath") || !line.hasOption("query")) { HelpFormatter formatter = new HelpFormatter(); formatter.printHelp("alfred-worker", options); } else { try { ItemManager itemManager = new DefaultItemManager(); PluginManager pluginManager = new PluginManager(itemManager); pluginManager.addPluginSource(new File(line.getOptionValue("pluginPath"))); pluginManager.initializePlugins(); pluginManager.invokePlugins(line.getOptionValue("query")); FeedbackGenerator feedbackGenerator = new FeedbackGenerator(); System.out.println(feedbackGenerator.generate(itemManager.getItems())); } catch (Exception e) { System.err.println(e.getMessage()); } } } @SuppressWarnings("AccessStaticViaInstance") public Options createOptions() { Option pluginDirOption = OptionBuilder .withArgName("path") .hasArg() .withDescription("Path to the plugin directory.") .create("pluginPath"); Option queryOption = OptionBuilder .withArgName("query") .hasArg() .withDescription("Alfred's query.") .create("query"); Options options = new Options(); options.addOption(pluginDirOption); options.addOption(queryOption); return options; } }