package com.socrata.datasync.config; import com.socrata.datasync.PortMethod; import com.socrata.datasync.PublishMethod; import com.socrata.datasync.job.Jobs; import org.apache.commons.cli.CommandLine; import org.apache.commons.cli.CommandLineParser; import org.apache.commons.cli.Options; import org.apache.commons.cli.ParseException; import org.apache.commons.cli.PosixParser; import java.util.Arrays; public class CommandLineOptions { public static final String JOB_TYPE_FLAG = "jobType"; public static final String CONFIG_FLAG = "config"; public static final String USER_AGENT_FLAG = "userAgent"; public static final String DATASET_ID_FLAG = "datasetID"; public static final String FILE_TO_PUBLISH_FLAG = "fileToPublish"; public static final String PUBLISH_METHOD_FLAG = "publishMethod"; public static final String HAS_HEADER_ROW_FLAG = "fileToPublishHasHeaderRow"; public static final String PUBLISH_VIA_FTP_FLAG = "publishViaFTP"; public static final String PUBLISH_VIA_DI2_FLAG = "publishViaHttp"; // TODO: remove at some point, ftp_control is deprecated in favor of control public static final String PATH_TO_FTP_CONTROL_FILE_FLAG = "pathToFTPControlFile"; public static final String PATH_TO_CONTROL_FILE_FLAG = "pathToControlFile"; public static final String PROXY_USERNAME_FLAG = "proxyUsername"; public static final String PROXY_PASSWORD_FLAG = "proxyPassword"; public static final String PORT_METHOD_FLAG = "portMethod"; public static final String SOURCE_DOMAIN_FLAG = "sourceDomain"; public static final String SOURCE_DATASET_ID_FLAG = "sourceDatasetId"; public static final String DESTINATION_DOMAIN_FLAG = "destinationDomain"; public static final String DESTINATION_DATASET_ID_FLAG = "destinationDatasetId"; public static final String PORT_PUBLISH_METHOD = "portPublishMethod"; public static final String PUBLISH_DESTINATION_DATASET_FLAG = "publishDestinationDataset"; public static final String DESTINATION_DATASET_TITLE_FLAG = "destinationDatasetTitle"; public static final String DEFAULT_JOBTYPE = Jobs.INTEGRATION_JOB.toString(); public static final String DEFAULT_PUBLISH_VIA_FTP = "false"; public static final String DEFAULT_PUBLISH_VIA_DI2 = "false"; public static final String DEFAULT_PORT_PUBLISH_METHOD = PublishMethod.upsert.toString(); public static final String DEFAULT_PUBLISH_DESTINATION_DATASET = "false"; private static CommandLineParser parser = new PosixParser(); public static final Options options = new Options(); static { options.addOption("t", JOB_TYPE_FLAG, true, "Type of job to run: " + Arrays.toString(Jobs.values()) + " (default: " + DEFAULT_JOBTYPE + ")"); options.addOption("c", CONFIG_FLAG, true, ".json file that stores global preferences (authentication details, etc) (optional)"); options.addOption("a", USER_AGENT_FLAG, true, "User-Agent string passed when making HTTPS calls (optional)"); // IntegrationJob params options.addOption("i", DATASET_ID_FLAG, true, "Dataset ID to publish to [IntegrationJob]"); options.addOption("f", FILE_TO_PUBLISH_FLAG, true, "CSV or TSV file to publish [IntegrationJob]; geojson, kml/kmz, or zipped shapefile [GISJob]"); options.addOption("m", PUBLISH_METHOD_FLAG, true, "Publish method (" + Arrays.toString(PublishMethod.values()) + ") [IntegrationJob]; \"replace\" is the only valid value for geospatial data [GISJob]"); options.addOption("h", HAS_HEADER_ROW_FLAG, true, "File to publish has header row (true or false) [IntegrationJob]"); options.addOption("pf", PUBLISH_VIA_FTP_FLAG, true, "Use FTP (instead of HTTP) for publishing (true or false) (default: " + DEFAULT_PUBLISH_VIA_FTP + ") [IntegrationJob]"); options.addOption("ph", PUBLISH_VIA_DI2_FLAG, true, "Use HTTP for publishing (true or false) (default: false) [IntegrationJob]"); options.addOption("sc", PATH_TO_FTP_CONTROL_FILE_FLAG, true, "deprecated! please use -cf, --pathToControlFile instead"); options.addOption("cf", PATH_TO_CONTROL_FILE_FLAG, true, "control.json file, needed for publishing via FTP or HTTP;" + "if set overrides job parameters [IntegrationJob]"); options.addOption("pun", PROXY_USERNAME_FLAG, true, "The username to supply to connect to the proxy server [IntegrationJob]"); options.addOption("ppw", PROXY_PASSWORD_FLAG, true, "The password to supply to connect to the proxy server [IntegrationJob]"); // PortJob params options.addOption("pm", PORT_METHOD_FLAG, true, "Port method (" + Arrays.toString(PortMethod.values()) + ") [PortJob]"); options.addOption("pd1", SOURCE_DOMAIN_FLAG, true, "Source Domain [PortJob]"); options.addOption("pi1", SOURCE_DATASET_ID_FLAG, true, "Source Dataset ID [PortJob]"); options.addOption("pd2", DESTINATION_DOMAIN_FLAG, true, " Destination Domain [PortJob]"); options.addOption("pi2", DESTINATION_DATASET_ID_FLAG, true, "Destination Dataset ID (only use when sourceDomain is 'copy_data') [PortJob]"); options.addOption("ppm", PORT_PUBLISH_METHOD, true, "Data Porting Publish Method (upsert or replace) (default: " + DEFAULT_PORT_PUBLISH_METHOD + ") [PortJob]"); options.addOption("pp", PUBLISH_DESTINATION_DATASET_FLAG, true, "Publish Destination Dataset (true or false) (default: " + DEFAULT_PUBLISH_DESTINATION_DATASET + ") [PortJob]"); options.addOption("pdt", DESTINATION_DATASET_TITLE_FLAG, true, "Destination Dataset Title (optional) [PortJob]"); options.addOption("?", "help", false, "Help"); options.addOption("v", "version", false, "DataSync version"); } public static CommandLine getCommandLine(String[] args) throws ParseException, ParseException { return parser.parse(options, args); } }