in odps-console-basic/src/main/java/com/aliyun/openservices/odps/console/commands/ExternalProjectCommand.java [128:189]
public static AbstractCommand parse(String cmd, ExecutionContext sessionContext)
throws ODPSConsoleException {
Matcher m = PATTERN.matcher(cmd);
boolean match = m.matches();
if (!match) {
return null;
}
String actionName = m.group(1);
String input = m.group(2);
String[] inputs = ODPSConsoleUtils.translateCommandline(input);
Options options = new Options();
options.addOption(Option.builder(ExternalProjectCommand.NAME_OPTION)
.hasArg().required().desc("Project name.").build());
options.addOption(SOURCE_OPTION, true, "External project source - supported sources: hive,dlf. Default: hive.");
options.addOption(COMMENT_OPTION, true, "Project description.");
options.addOption(REF_OPTION, true,"Managed Project refs to.");
options.addOption(FOREIGNSERVER_OPTION, true,"Using foreign server name.");
options.addOption(NAMENODE_OPTION, true, "Hadoop namenode ip and ports.");
options.addOption(HMS_OPTION, true,"Hive metastore ip and ports.");
options.addOption(DATABASE_OPTION, true, "Database name to map external project to.");
options.addOption(VPC_OPTION, true, "Vpc id");
options.addOption(REGION_OPTION, true, "Region.");
options.addOption(ACCESS_IP_OPTION, true, "Additional vpc ip need to be accessed");
options.addOption(DFS_NS_OPTION, true, "Hive DFS nameservice.");
options.addOption(ROLE_ARN_OPTION, true, "Ram role arn.");
options.addOption(ENDPOINT_OPTION, true, "Endpoint of external source.");
options.addOption(OSS_ENDPOINT_OPTION, true, "Endpoint of oss - for dlf source which use oss as storage.");
options.addOption(HMS_PRINCIPALS, true, "Comma separated kerberos principals corresponding to host specified in 'hms'.");
Option pOption = new Option(PROPERTIES_OPTION, true, "Additional parameters, like '-D p1=v1 -D p2=v2.");
pOption.setValueSeparator('=');
pOption.setArgs(2);
options.addOption(pOption);
Option tOption = new Option(TABLE_PROPERTIES_OPTION, true, "Additional table parameters, like '-T p1=v1 -T p2=v2.");
tOption.setValueSeparator('=');
tOption.setArgs(2);
options.addOption(tOption);
try {
CommandLineParser parser = new DefaultParser();
CommandLine params = parser.parse(options, inputs, false);
// FIXME: determine source type by foreign server if it's there
String source = params.getOptionValue(SOURCE_OPTION, "hive");
Action action;
if (source.equals("hive")) {
action = new HiveSourceAction(actionName, params);
} else if(source.equals("dlf")) {
action = new DlfSourceAction(actionName, params);
} else if(source.equals("maxcompute")) {
action = new OdpsSourceAction(actionName, params);
} else {
throw new UnsupportedOperationException("Unknown source: " + source);
}
return new ExternalProjectCommand(action, cmd, sessionContext);
} catch (ParseException e) {
throw new ODPSConsoleException("Error parsing command", e);
}
}