package au.com.langdale.profiles;
import java.util.Iterator;
import java.util.Map;
import com.hp.hpl.jena.graph.Graph;
import com.hp.hpl.jena.graph.Node;
import com.hp.hpl.jena.graph.Triple;
import au.com.langdale.kena.ModelFactory;
import au.com.langdale.kena.OntModel;
public abstract class Renamer {
protected OntModel model;
public static class NamespaceChanger extends Renamer {
private String namespace;
private String replace;
private String replaceNS;
public NamespaceChanger(OntModel model, String namespace) {
this.model = model;
this.namespace = namespace;
this.replace = model.getValidOntology().getURI();
this.replaceNS = replace + "#";
}
@Override
protected Node rename(Node uri) {
if( uri.getNameSpace().equals(replaceNS))
return Node.createURI(namespace + uri.getLocalName());
if( uri.getURI().equals(replace))
return Node.createURI(namespace.substring(0, namespace.length()-1));
return uri;
}
}
public static class URIMapper extends Renamer {
private Map map;
public URIMapper(OntModel model, Map map) {
this.model = model;
this.map = map;
}
@Override
public Node rename(Node uri) {
return (Node) map.get(uri);
}
}
protected abstract Node rename(Node uri);
public OntModel applyRenamings() {
OntModel result = ModelFactory.createMem();
Graph graph = result.getGraph();
Iterator it = model.getGraph().find(Triple.ANY);
while( it.hasNext()) {
Triple t = (Triple) it.next();
Node s = t.getSubject().isURI()? rename(t.getSubject()): null;
Node o = t.getObject().isURI() ? rename(t.getObject()) : null;
if( s != null || o != null)
t = Triple.create(s != null? s: t.getSubject(), t.getPredicate(), o != null? o: t.getObject());
graph.add(t);
}
return result;
}
}