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