package org.curiosity; 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.crawl.HeaderCrawler; import org.curiosity.management.ThumbnailGarbageCollector; import org.curiosity.util.DatabaseInvariants; import java.sql.Connection; import java.sql.SQLException; import java.util.Arrays; import java.util.Set; import java.util.stream.Collectors; /** * Starter class for {@link ThumbnailGarbageCollector}. * * @author jherwitz */ public class ThumbnailGarbageCollectorStarter { public static void main(String[] args) throws Throwable { CommandLineParser cli = new BasicParser(); Options options = options(); CommandLine cmd = cli.parse(options, args); int startSol = Integer.parseInt(cmd.getOptionValue("s")); Set<Camera> cameras = Arrays.asList(cmd.getOptionValue("c").split(",")).stream().map(Camera::valueOf).collect(Collectors.toSet()); String username = cmd.getOptionValue("user"); String password = cmd.getOptionValue("pass"); String jdbc = 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); } } }); ThumbnailGarbageCollector gc = new ThumbnailGarbageCollector(HeaderCrawler.Instance, conn); cameras.parallelStream().forEach(camera -> gc.sweep(startSol, camera)); } private static Options options() { Options options = new Options(); options.addOption("s", "startSol", true, "Sol to start GC at"); options.addOption("c", "cameras", true, "The cameras to gc for"); // 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; } }