package org.curiosity; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableList; import org.apache.commons.cli.BasicParser; import org.apache.commons.cli.CommandLine; import org.apache.commons.cli.CommandLineParser; import org.apache.commons.cli.Options; import org.curiosity.concept.RoverLocation; import org.curiosity.crawl.LocationCrawler; import org.curiosity.publish.MySqlPublisher; import org.curiosity.util.DatabaseInvariants; import java.sql.Connection; import java.sql.SQLException; import java.util.List; /** * Backup for cspice locations - pulls locations from the NASA locations.xml file. * * XXX: The NASA locations.xml data is currently BROKEN - we'll use cspice instead. (1/8/2015) * * @see http://mars.jpl.nasa.gov/msl-raw-images/locations.xml * @author jherwitz */ public class RoverLocationCrawlerStarter { public static void main(String[] args) throws Throwable { CommandLineParser cli = new BasicParser(); Options options = options(); CommandLine cmd = cli.parse(options, args); String username = Preconditions.checkNotNull(cmd.getOptionValue("user")); String password = Preconditions.checkNotNull(cmd.getOptionValue("pass")); String jdbc = Preconditions.checkNotNull(cmd.getOptionValue("jdbc")); Connection conn = DatabaseInvariants.newConnection(username, password, jdbc); Runtime.getRuntime().addShutdownHook(new Thread() { public void run() { try { conn.close(); } catch (SQLException e) { throw new RuntimeException(e); } } }); LocationCrawler crawler = new LocationCrawler(); MySqlPublisher publisher = new MySqlPublisher(conn); List<RoverLocation> locations = crawler.crawl(); publisher.publishLocations(ImmutableList.copyOf(locations)); } private static Options options() { Options options = new Options(); // the following options are applicable to options.addOption("user", true, "Database username."); options.addOption("pass", true, "Database password."); options.addOption("jdbc", true, "JDBC connection url for the database"); return options; } }