public static Object cliStringToObject()

in samoa-api/src/main/java/org/apache/samoa/moa/options/ClassOption.java [93:171]


  public static Object cliStringToObject(String cliString,
      Class<?> requiredType, Option[] externalOptions) throws Exception {
    if (cliString.startsWith(FILE_PREFIX_STRING)) {
      return new File(cliString.substring(FILE_PREFIX_STRING.length()));
    }
    if (cliString.startsWith(INMEM_PREFIX_STRING)) {
      return cliString.substring(INMEM_PREFIX_STRING.length());
    }
    cliString = cliString.trim();
    int firstSpaceIndex = cliString.indexOf(' ', 0);
    String className;
    String classOptions;
    if (firstSpaceIndex > 0) {
      className = cliString.substring(0, firstSpaceIndex);
      classOptions = cliString.substring(firstSpaceIndex + 1, cliString.length());
      classOptions = classOptions.trim();
    } else {
      className = cliString;
      classOptions = "";
    }
    Class<?> classObject;
    try {
      classObject = Class.forName(className);
    } catch (Throwable t1) {
      try {
        // try prepending default package
        classObject = Class.forName(requiredType.getPackage().getName()
            + "." + className);
      } catch (Throwable t2) {
        try {
          // try prepending task package
          classObject = Class.forName(Task.class.getPackage().getName()
              + "." + className);
        } catch (Throwable t3) {
          throw new Exception("Class not found: " + className);
        }
      }
    }
    Object classInstance;
    try {
      classInstance = classObject.newInstance();
    } catch (Exception ex) {
      throw new Exception("Problem creating instance of class: "
          + className, ex);
    }
    if (requiredType.isInstance(classInstance)
        || ((classInstance instanceof Task) && requiredType
            .isAssignableFrom(((Task) classInstance).getTaskResultType()))) {
      Options options = new Options();
      if (externalOptions != null) {
        for (Option option : externalOptions) {
          options.addOption(option);
        }
      }
      if (classInstance instanceof OptionHandler) {
        Option[] objectOptions = ((OptionHandler) classInstance).getOptions().getOptionArray();
        for (Option option : objectOptions) {
          options.addOption(option);
        }
      }
      try {
        options.setViaCLIString(classOptions);
      } catch (Exception ex) {
        throw new Exception("Problem with options to '"
            + className
            + "'."
            + "\n\nValid options for "
            + className
            + ":\n"
            + ((OptionHandler) classInstance).getOptions().getHelpString(), ex);
      } finally {
        options.removeAllOptions(); // clean up listener refs
      }
    } else {
      throw new Exception("Class named '" + className
          + "' is not an instance of " + requiredType.getName() + ".");
    }
    return classInstance;
  }