private void setHandlers(Properties props) throws ClassNotFoundException, IllegalAccessException, InstantiationException {
ArrayList<MergeHandler> handlers = new ArrayList<MergeHandler>();
String[] keys = props.keySet().toArray(new String[props.keySet().size()]);
for (String key : keys) {
if (key.startsWith("handler.")) {
MergeHandler temp = (MergeHandler) Class.forName(props.getProperty(key)).newInstance();
String name = key.substring(8, key.length());
temp.setName(name);
String priority = props.getProperty("priority." + name);
if (priority != null) {
temp.setPriority(Integer.parseInt(priority));
}
String xpath = props.getProperty("xpath." + name);
if (priority != null) {
temp.setXPath(xpath);
}
handlers.add(temp);
}
}
MergeHandler[] explodedView = {};
explodedView = handlers.toArray(explodedView);
Comparator<Object> nameCompare = new Comparator<Object>() {
public int compare(Object arg0, Object arg1) {
return ((MergeHandler) arg0).getName().compareTo(((MergeHandler) arg1).getName());
}
};
Arrays.sort(explodedView, nameCompare);
ArrayList<MergeHandler> finalHandlers = new ArrayList<MergeHandler>();
for (MergeHandler temp : explodedView) {
if (temp.getName().contains(".")) {
final String parentName = temp.getName().substring(0, temp.getName().lastIndexOf("."));
int pos = Arrays.binarySearch(explodedView, new MergeHandlerAdapter() {
@Override
public String getName() {
return parentName;
}