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.Camera;
import org.curiosity.concept.RoverLocation;
import org.curiosity.publish.MySqlPublisher;
import org.curiosity.publish.PublisherType;
import org.curiosity.util.DatabaseInvariants;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Arrays;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
/**
* Reads the cspice-generated location data and publishes them to the database.
*
* @author jherwitz
*/
public class RoverLocationPublisherStarter {
public static void main(String[] args) throws Throwable {
CommandLineParser cli = new BasicParser();
Options options = options();
CommandLine cmd = cli.parse(options, args);
String filepath = Preconditions.checkNotNull(cmd.getOptionValue("f"));
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);
}
}
});
MySqlPublisher publisher = new MySqlPublisher(conn);
List<RoverLocation> locations = Files.readAllLines(Paths.get(filepath)).stream().map(line -> {
String[] parts = line.split(",");
int sol = Integer.parseInt(parts[0].trim());
String timestamp = parts[1].trim();
// don't use radius field (index 2) for now
double lng = Double.parseDouble(parts[3].trim());
double lat = Double.parseDouble(parts[4].trim());
return new RoverLocation(sol, lat, lng, timestamp);
}).collect(Collectors.toList());
publisher.publishLocations(ImmutableList.copyOf(locations));
}
private static Options options() {
Options options = new Options();
options.addOption("f", "file", true, "The csv file to upload locations from");
// 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;
}
}