package uk.ac.manchester.cs.jfact.split;
import uk.ac.manchester.cs.jfact.kernel.ExpressionManager;
import uk.ac.manchester.cs.jfact.kernel.dl.axioms.AxiomDRoleDomain;
import uk.ac.manchester.cs.jfact.kernel.dl.axioms.AxiomDRoleRange;
import uk.ac.manchester.cs.jfact.kernel.dl.axioms.AxiomORoleDomain;
import uk.ac.manchester.cs.jfact.kernel.dl.axioms.AxiomORoleRange;
import uk.ac.manchester.cs.jfact.kernel.dl.axioms.AxiomRelatedTo;
import uk.ac.manchester.cs.jfact.kernel.dl.axioms.AxiomRelatedToNot;
import uk.ac.manchester.cs.jfact.kernel.dl.axioms.AxiomValueOf;
import uk.ac.manchester.cs.jfact.kernel.dl.axioms.AxiomValueOfNot;
import uk.ac.manchester.cs.jfact.kernel.dl.interfaces.ConceptExpression;
import uk.ac.manchester.cs.jfact.visitors.DLAxiomVisitorExAdapter;
/** @author ignazio */
public class ExpressionFromAxiomBuilder extends
DLAxiomVisitorExAdapter<ConceptExpression> {
private static final long serialVersionUID = 10201L;
private final ExpressionManager pEM;
/**
* @param a
* a
* @param e
* e
*/
public ExpressionFromAxiomBuilder(ConceptExpression a, ExpressionManager e) {
super(a);
pEM = e;
}
@Override
public ConceptExpression visit(AxiomRelatedTo axiom) {
return pEM.value(axiom.getRelation(), axiom.getRelatedIndividual());
}
@Override
public ConceptExpression visit(AxiomValueOf axiom) {
return pEM.value(axiom.getAttribute(), axiom.getValue());
}
@Override
public ConceptExpression visit(AxiomORoleDomain axiom) {
return pEM.exists(axiom.getRole(), pEM.top());
}
@Override
public ConceptExpression visit(AxiomORoleRange axiom) {
return pEM.exists(axiom.getRole(), pEM.not(axiom.getRange()));
}
@Override
public ConceptExpression visit(AxiomDRoleDomain axiom) {
return pEM.exists(axiom.getRole(), pEM.dataTop());
}
@Override
public ConceptExpression visit(AxiomDRoleRange axiom) {
return pEM.exists(axiom.getRole(), pEM.dataNot(axiom.getRange()));
}
@Override
public ConceptExpression visit(AxiomRelatedToNot axiom) {
return pEM.not(pEM.value(axiom.getRelation(),
axiom.getRelatedIndividual()));
}
@Override
public ConceptExpression visit(AxiomValueOfNot axiom) {
return pEM.not(pEM.value(axiom.getAttribute(), axiom.getValue()));
}
}