public static AbstractCommand parse()

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);
    }
  }