private void dump(IREntity e,int depth){
Iterator<RName> anames = e.getAttributeIterator();
while(anames.hasNext()){
try {
RName aname = anames.next();
IRObject value = e.get(aname);
dtstate.traceTagBegin("attribute", "name",aname.stringValue(),"type",getType(e,aname));
int type = e.getEntry(aname).type.getId();
if(type == IRObject.iEntity) {
if(value.type().getId() == IRObject.iNull){
dtstate.traceInfo("value","type","null","value","null",null);
}else{
dtstate.traceTagBegin("entity",
"name", ((REntity)value).getName().stringValue(),
"id", printIds ? ((REntity)value).getID()+"" : "");
if(!(boundries.get(e)!= null && boundries.get(e).contains(value))){
dtstate.debug(" recurse\n");
}else{
if(boundries.get(e)==null)boundries.put(e, new ArrayList<IREntity>());
boundries.get(e).add(value.rEntityValue());
dump((IREntity)value, depth+1);
}
dtstate.traceTagEnd();
}
}else if (type == IRObject.iArray) {
ArrayList<IRObject> values = value.arrayValue();
for(IRObject v : values){
if(v.type().getId() ==IRObject.iEntity){
dump((REntity)v,depth+2);
}else{
dtstate.traceInfo("value","v",v.stringValue(),null);
}
}
} else {
dtstate.traceInfo("value","v",value.stringValue(),null);
}
dtstate.traceTagEnd();
} catch (RulesException e1) {
dtstate.debug("Rules Engine Exception\n");