package org.aksw.sparqlify.database;
import java.util.List;
import java.util.Map;
import java.util.TreeSet;
import org.aksw.jena_sparql_api.views.PrefixSet;
import org.apache.jena.graph.Node;
import org.apache.jena.sparql.core.Var;
public class PrefixConstraint
implements org.aksw.jena_sparql_api.views.Constraint
{
private Var var;
private String attribute; // type, value, datatype, language
private PrefixSet prefixes;
public PrefixConstraint(Var var, String attribute, String prefix) {
this.var = var;
this.attribute = attribute;
this.prefixes = new PrefixSet(prefix);
}
public PrefixConstraint(Var var, String attribute, List<String> prefixes) {
super();
this.var = var;
this.attribute = attribute;
this.prefixes = new PrefixSet(new TreeSet<String>(prefixes));
}
public PrefixConstraint(Var var, String attribute, PrefixSet prefixes) {
super();
this.var = var;
this.attribute = attribute;
this.prefixes = prefixes;
}
public PrefixConstraint copySubstitute(Map<? extends Node, Node> map) {
Var value = (Var)map.get(var);
if(value == null || var.equals(value)) {
return this;
}
return new PrefixConstraint(value, attribute, prefixes);
}
public Var getVar() {
return var;
}
public String getAttribute() {
return attribute;
}
public PrefixSet getPrefixes() {
return prefixes;
}
@Override
public String toString() {
return "PrefixConstraint [var=" + var + ", attribute=" + attribute
+ ", prefixes=" + prefixes + "]";
}
/**
*
*
* @param a
* @param b
* @return The union of the two patterns; null indicates no constraint.
*/
/*
public static PatternPro union(PatternPro a, PatternPro b) {
if(a == null || b == null) {
return null;
} else {
PatternPro c = new PatternPro(a);
c.addAll(b);
return c;
}
}
/**
*
*
* @param a
* @param b
* @return The intersection of the two patterns; null indicates no constraint.
* /
public static PatternPro intersect(PatternPro a, PatternPro b) {
if(a == null) {
return b;
} else if(b == null) {
return a;
} else {
PatternPro c = new PatternPro(a);
c.retainAll(b);
return c;
}
}
/**
* A pattern is only satisfiable if it is either null (= unconstrained) or
* the underlying automaton has a non-empty set of states.
*
* @param a
* @return
* /
public static boolean isSatisfiable(PatternPro a) {
return a == null || !a.getAutomaton().getStates().isEmpty();
}
*/
}