package com.thinkaurelius.faunus.tinkerpop.gremlin; import com.thinkaurelius.faunus.FaunusGraph; import com.thinkaurelius.faunus.FaunusPipeline; import org.apache.hadoop.conf.Configuration; import java.io.FileInputStream; import java.util.Map; import java.util.Properties; /** * @author Marko A. Rodriguez (http://markorodriguez.com) */ public class InlineScriptExecutor { public static void main(final String[] args) throws Exception { if (args.length < 1 || args.length > 3 || (args.length == 1 && args[0].contains("-h"))) { System.out.println("Faunus Usage:"); System.out.println(" arg1: Faunus graph configuration file (optional): defaults to bin/faunus.properties"); System.out.println(" arg2: FaunusGremlin script: 'g.V.step.step...'"); System.out.println(" arg3: Overriding configurations (optional): '-Dmapred.map.tasks=14 mapred.reduce.tasks=6'"); System.exit(-1); } final String script; final String file; final Properties fileConfiguration = new Properties(); final Properties commandLineConfiguration = new Properties(); if (args.length == 1) { script = args[0]; file = "bin/faunus.properties"; } else if (args.length == 2) { if (args[1].startsWith("-D")) { script = args[0]; file = "bin/faunus.properties"; for (final String property : args[1].substring(2).trim().split(" ")) { commandLineConfiguration.put(property.split("=")[0], property.split("=")[1]); } } else { file = args[0]; script = args[1]; } } else { file = args[0]; script = args[1]; for (final String property : args[2].substring(2).trim().split(" ")) { commandLineConfiguration.put(property.split("=")[0], property.split("=")[1]); } } fileConfiguration.load(new FileInputStream(file)); final Configuration conf = new Configuration(); for (Map.Entry<Object, Object> entry : fileConfiguration.entrySet()) { conf.set(entry.getKey().toString(), entry.getValue().toString()); } for (Map.Entry<Object, Object> entry : commandLineConfiguration.entrySet()) { conf.set(entry.getKey().toString(), entry.getValue().toString()); } final FaunusGremlinScriptEngine scriptEngine = new FaunusGremlinScriptEngine(); scriptEngine.put("g", new FaunusGraph(conf)); Object result = scriptEngine.eval(script); if (result.getClass().equals(FaunusPipeline.class)) ((FaunusPipeline) result).submit(script, true); System.exit(0); } }