in odps-console-public/src/main/java/com/aliyun/openservices/odps/console/pub/ShowInstanceCommand.java [258:323]
private static ShowInstanceCommand parseInternal(String commandString,
String extCommandString,
ExecutionContext sessionContext)
throws ODPSConsoleException {
int number = 50;
boolean onlyOwner = true;
String project = null;
if ((extCommandString == null) || extCommandString.trim().isEmpty()) {
// 不带参数的情况,默认取50条记录,从当天开始,到现在的记录
return new ShowInstanceCommand(commandString, sessionContext, project, getTime(new Date(), 0),
null, number, onlyOwner);
}
extCommandString = extCommandString.toLowerCase();
List<String> tokens = new ArrayList<String>(Arrays.asList(new AntlrObject(extCommandString).getTokenStringArray()));
// 把from和to参数从命令中取出来
Date fromDate = getDateParam(tokens, "from");
Date toDate = getDateParam(tokens, "to");
if (fromDate != null && toDate != null) {
if (fromDate.equals(toDate)) {
throw new IllegalArgumentException(
"the date range is act as [from,to), so from and to couldn't be the same day");
}
}
// 如果没日期,默认为当天开始
if (fromDate == null && toDate == null) {
fromDate = new Date();
}
if (!tokens.isEmpty()) {
// number, -p, -limit, -all
CommandLine cl = getCommandLine(tokens.toArray(new String[0]));
// 除了 -p , -limit 和 -all 选项,最多还剩下一个参数 <number>, 且这个参数与 -limit 不共存
if (cl.getArgs().length > 1 || (cl.getArgs().length == 1 && cl.hasOption("limit"))) {
throw new ODPSConsoleException(ODPSConsoleConstants.BAD_COMMAND + "[more parameter]");
}
// 获取 project
if (cl.hasOption(PROJECT_TAG)) {
project = cl.getOptionValue(PROJECT_TAG);
}
// 获取 limit or number
String numberStr = null;
if (cl.hasOption(LIMIT_TAG)) {
numberStr = cl.getOptionValue(LIMIT_TAG);
} else if (cl.getArgs().length == 1) {
numberStr = cl.getArgs()[0];
}
if (numberStr != null) {
number = getNumberToken(numberStr);
}
if (cl.hasOption(ALL_TAG)) {
onlyOwner = false;
}
}
return new ShowInstanceCommand(commandString, sessionContext, project, getTime(fromDate, 0),
getTime(toDate, 0), number, onlyOwner);
}