@Override
  public void parse(List<String> args) throws CliArgumentParseException {
    super.parse(args);

    throw new RuntimeException("TODO");

    //        int i = 1;
    //        for (CliParam<?> cliArgumentParam : values.keySet()) {
    //            values.get(cliArgumentParam).add(cliArgumentParam.parse(args.get(position + 1)));
    //            i++;
    //        }
  }
  @Override
  public void reset() {
    super.reset();

    // remove old values
    Collection<List<Object>> val = values.values();
    for (List<?> list : val) {
      list.clear();
    }

    // put default values
    if (defaultValues != null) {
      for (CliParam<?> cliArgumentParam : defaultValues.keySet()) {
        if (defaultValues.get(cliArgumentParam) != null) {
          values.get(cliArgumentParam).addAll(defaultValues.get(cliArgumentParam));
        }
      }
    }
  }
  @Override
  public void checkDefinition() {
    super.checkDefinition();

    // check that default values size is equal
    int size = -1;
    for (CliParam<?> cliArgumentParam : defaultValues.keySet()) {
      int tmpsize;
      if (defaultValues.get(cliArgumentParam) != null) {
        tmpsize = defaultValues.get(cliArgumentParam).size();
      } else {
        tmpsize = 0;
      }
      if (size != -1 && size != tmpsize) {
        throw new CliArgumentDefinitionException("length of default params values must be equal");
      }
      size = tmpsize;
    }
  }