package uk.ac.manchester.cs.jfact.split;
/* This file is part of the JFact DL reasoner
Copyright 2011-2013 by Ignazio Palmisano, Dmitry Tsarkov, University of Manchester
This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA*/
import java.io.Serializable;
import uk.ac.manchester.cs.jfact.kernel.dl.ConceptAnd;
import uk.ac.manchester.cs.jfact.kernel.dl.ConceptDataExactCardinality;
import uk.ac.manchester.cs.jfact.kernel.dl.ConceptDataExists;
import uk.ac.manchester.cs.jfact.kernel.dl.ConceptDataForall;
import uk.ac.manchester.cs.jfact.kernel.dl.ConceptDataMaxCardinality;
import uk.ac.manchester.cs.jfact.kernel.dl.ConceptDataMinCardinality;
import uk.ac.manchester.cs.jfact.kernel.dl.ConceptDataValue;
import uk.ac.manchester.cs.jfact.kernel.dl.ConceptName;
import uk.ac.manchester.cs.jfact.kernel.dl.ConceptNot;
import uk.ac.manchester.cs.jfact.kernel.dl.ConceptObjectExactCardinality;
import uk.ac.manchester.cs.jfact.kernel.dl.ConceptObjectExists;
import uk.ac.manchester.cs.jfact.kernel.dl.ConceptObjectForall;
import uk.ac.manchester.cs.jfact.kernel.dl.ConceptObjectMaxCardinality;
import uk.ac.manchester.cs.jfact.kernel.dl.ConceptObjectMinCardinality;
import uk.ac.manchester.cs.jfact.kernel.dl.ConceptObjectSelf;
import uk.ac.manchester.cs.jfact.kernel.dl.ConceptObjectValue;
import uk.ac.manchester.cs.jfact.kernel.dl.ConceptOneOf;
import uk.ac.manchester.cs.jfact.kernel.dl.ConceptOr;
import uk.ac.manchester.cs.jfact.kernel.dl.DataRoleName;
import uk.ac.manchester.cs.jfact.kernel.dl.IndividualName;
import uk.ac.manchester.cs.jfact.kernel.dl.ObjectRoleChain;
import uk.ac.manchester.cs.jfact.kernel.dl.ObjectRoleInverse;
import uk.ac.manchester.cs.jfact.kernel.dl.ObjectRoleName;
import uk.ac.manchester.cs.jfact.kernel.dl.ObjectRoleProjectionFrom;
import uk.ac.manchester.cs.jfact.kernel.dl.ObjectRoleProjectionInto;
import uk.ac.manchester.cs.jfact.kernel.dl.interfaces.ConceptArg;
import uk.ac.manchester.cs.jfact.kernel.dl.interfaces.DataRoleArg;
import uk.ac.manchester.cs.jfact.kernel.dl.interfaces.Expression;
import uk.ac.manchester.cs.jfact.kernel.dl.interfaces.IndividualExpression;
import uk.ac.manchester.cs.jfact.kernel.dl.interfaces.NAryExpression;
import uk.ac.manchester.cs.jfact.kernel.dl.interfaces.NamedEntity;
import uk.ac.manchester.cs.jfact.kernel.dl.interfaces.ObjectRoleArg;
import uk.ac.manchester.cs.jfact.visitors.DLExpressionVisitor;
import uk.ac.manchester.cs.jfact.visitors.DLExpressionVisitorAdapter;
import conformance.PortedFrom;
/** update the signature by adding all signature elements from the expression */
@PortedFrom(file = "tSignatureUpdater.h", name = "TExpressionSignatureUpdater")
class TExpressionSignatureUpdater extends DLExpressionVisitorAdapter implements
DLExpressionVisitor, Serializable {
private static final long serialVersionUID = 11000L;
/** Signature to be filled */
@PortedFrom(file = "tSignatureUpdater.h", name = "sig")
private final TSignature sig;
/**
* helper for concept arguments
*
* @param expr
* expr
*/
@PortedFrom(file = "tSignatureUpdater.h", name = "vC")
private void vC(ConceptArg expr) {
expr.getConcept().accept(this);
}
/**
* helper for individual arguments
*
* @param expr
* expr
*/
@PortedFrom(file = "tSignatureUpdater.h", name = "vI")
private void vI(IndividualExpression expr) {
// should no longer be needed: IndividualNames are NamedEntities
// themselves
if (expr instanceof NamedEntity) {
sig.add((NamedEntity) expr);
}
}
/**
* helper for object role arguments
*
* @param expr
* expr
*/
@PortedFrom(file = "tSignatureUpdater.h", name = "vOR")
private void vOR(ObjectRoleArg expr) {
expr.getOR().accept(this);
}
/**
* helper for object role arguments
*
* @param expr
* expr
*/
@PortedFrom(file = "tSignatureUpdater.h", name = "vDR")
private void vDR(DataRoleArg expr) {
expr.getDataRoleExpression().accept(this);
}
/**
* helper for the named entity
*
* @param e
* e
*/
@PortedFrom(file = "tSignatureUpdater.h", name = "vE")
private void vE(NamedEntity e) {
sig.add(e);
}
/**
* array helper
*
* @param expr
* expr
*/
@PortedFrom(file = "tSignatureUpdater.h", name = "processArray")
private void processArray(NAryExpression<? extends Expression> expr) {
for (Expression p : expr.getArguments()) {
p.accept(this);
}
}
public TExpressionSignatureUpdater(TSignature s) {
sig = s;
}
// concept expressions
@Override
public void visit(ConceptName expr) {
vE(expr);
}
@Override
public void visit(ConceptNot expr) {
vC(expr);
}
@Override
public void visit(ConceptAnd expr) {
processArray(expr);
}
@Override
public void visit(ConceptOr expr) {
processArray(expr);
}
@Override
public void visit(ConceptOneOf<?> expr) {
processArray(expr);
}
@Override
public void visit(ConceptObjectSelf expr) {
vOR(expr);
}
@Override
public void visit(ConceptObjectValue expr) {
vOR(expr);
vI(expr.getIndividual());
}
@Override
public void visit(ConceptObjectExists expr) {
vOR(expr);
vC(expr);
}
@Override
public void visit(ConceptObjectForall expr) {
vOR(expr);
vC(expr);
}
@Override
public void visit(ConceptObjectMinCardinality expr) {
vOR(expr);
vC(expr);
}
@Override
public void visit(ConceptObjectMaxCardinality expr) {
vOR(expr);
vC(expr);
}
@Override
public void visit(ConceptObjectExactCardinality expr) {
vOR(expr);
vC(expr);
}
@Override
public void visit(ConceptDataValue expr) {
vDR(expr);
}
@Override
public void visit(ConceptDataExists expr) {
vDR(expr);
}
@Override
public void visit(ConceptDataForall expr) {
vDR(expr);
}
@Override
public void visit(ConceptDataMinCardinality expr) {
vDR(expr);
}
@Override
public void visit(ConceptDataMaxCardinality expr) {
vDR(expr);
}
@Override
public void visit(ConceptDataExactCardinality expr) {
vDR(expr);
}
// individual expressions
@Override
public void visit(IndividualName expr) {
vE(expr);
}
// object role expressions
@Override
public void visit(ObjectRoleName expr) {
vE(expr);
}
@Override
public void visit(ObjectRoleInverse expr) {
vOR(expr);
}
@Override
public void visit(ObjectRoleChain expr) {
processArray(expr);
}
@Override
public void visit(ObjectRoleProjectionFrom expr) {
vOR(expr);
vC(expr);
}
@Override
public void visit(ObjectRoleProjectionInto expr) {
vOR(expr);
vC(expr);
}
// data role expressions
@Override
public void visit(DataRoleName expr) {
vE(expr);
}
}