@Override
public void handleObject(DmcUncheckedObject uco, String infile, int lineNumber) throws ResultException, DmcValueException {
DmcHierarchicObjectName fqn = null;
DmcHierarchicObjectName parentFqn = null;
HierarchicObject newEntry = null;
HierarchicObject parentEntry = null;
HierarchicObject currObj = null;
try {
currObj = (HierarchicObject) factory.createWrapper(uco);
DebugInfo.debug("Loaded:\n\n" + currObj.toOIF(15));
} catch (ClassNotFoundException e) {
ResultException ex = new ResultException("Unknown object class: " + uco.classes.get(0));
ex.result.lastResult().fileName(infile);
ex.result.lastResult().lineNumber(lineNumber);
throw(ex);
}
catch (ResultException ex){
ex.setLocationInfo(infile, lineNumber);
throw(ex);
}
// We always set the file and line info in case we need it for error reporting,
// but we strip it out in resolveReferences() if it's not required
currObj.setLineNumber(lineNumber);
currObj.setFile(infile);
if (currObj.getFQN() == null){
ResultException ex = new ResultException();
ex.addError("Missing FQN for object.");
ex.setLocationInfo(currObj.getFile(), currObj.getLineNumber());
throw(ex);
}
fqn = currObj.getFQN();
if (currObj.getFQN().getParentName() != null)
parentFqn = currObj.getFQN().getParentName();
if (parentFqn == null){
// We have a top level object
currObj.setParentObject(null);
cache.addObject(currObj);
}
else{
if (cache.find(fqn) == null){
parentEntry = cache.find(parentFqn);
if (parentEntry == null){
ResultException ex = new ResultException();
ex.addError("Missing parent: " + parentFqn + " for object: " + fqn);
ex.setLocationInfo(currObj.getFile(), currObj.getLineNumber());
throw(ex);
}
else{
newEntry = currObj;
newEntry.setParentObject(parentEntry);
cache.addObject(currObj);
}
}
else{
ResultException ex = new ResultException();
ex.addError("Duplicate FQN: " + fqn);
ex.setLocationInfo(currObj.getFile(), currObj.getLineNumber());
throw(ex);
}
System.out.println("HierarchyParser read:\n" + newEntry.getFQN());