package org.drools.semantics;
import org.w3._2002._07.owl.ThingImpl;
import java.net.URI;
import java.util.List;
public abstract class AbstractObjectGraphVisitor implements ObjectGraphVisitor {
public Object visit( Thing root ) {
return visitRoot( root );
}
protected abstract Object visitRoot( Thing root );
protected void visitNode( Thing node ) {
preVisitNode( node );
// At the moment, this visitor should be used only with classes extending ThingImpl
ThingImpl nodeImpl = (ThingImpl) node;
visitTypeEdge( node, URI.create( nodeImpl.getSemanticTypeName() ) );
List<String> properties = nodeImpl.getPropertyNames();
for ( String prop : properties ) {
List relateds = nodeImpl.get( prop );
for ( Object tgt : relateds ) {
visitRelationEdge(node, prop, tgt);
}
}
postVisitNode( node );
}
protected abstract void visitRelationEdge( Thing node, String prop, Object tgt );
protected abstract void visitTypeEdge( Thing node, URI tgt );
protected abstract void postVisitNode( Thing node );
protected abstract void preVisitNode( Thing node );
}