package models.formulas.meta;
import java.util.Map;
import exceptions.IllegalTypeException;
import lombok.Getter;
import models.algebra.Variable;
import models.formulas.DependencyFormula;
import models.formulas.Formula;
import models.terms.RDLTerm;
import models.terms.meta.MetaRDLTerm;
import models.terms.meta.MetaResourceVariable;
import models.terms.meta.OrderVariableConstraint;
@Getter
public class MetaDependencyFormula extends MetaFormula {
private MetaRDLTerm dependency;
public MetaDependencyFormula(MetaRDLTerm term) {
if (! term.isDependency()) {
throw new IllegalTypeException();
}
this.dependency = term;
}
public MetaDependencyFormula(MetaRDLTerm dependingTerm, MetaResourceVariable dependedVariable) {
this.dependency = new MetaRDLTerm(dependingTerm, dependedVariable);
}
@Override
public boolean isMatchedBy(Formula formula, Map<Variable, RDLTerm> binding,
Map<Variable, OrderVariableConstraint> orderConstraint) {
if (! (formula instanceof DependencyFormula)) {
return false;
}
DependencyFormula dep = (DependencyFormula) formula;
return dependency.isMatchedBy(dep.getDependency(), binding, orderConstraint);
}
public String toString() {
return dependency.toString();
}
public boolean equals(Object another) {
if (! (another instanceof MetaDependencyFormula)) {
return false;
}
MetaDependencyFormula anohterFormula = (MetaDependencyFormula) another;
return dependency.equals(anohterFormula.getDependency());
}
public int hashCode() {
return ("MDF" + toString()).hashCode();
}
}