Skip to content

Commit

Permalink
Fixed for JENA-1272
Browse files Browse the repository at this point in the history
  • Loading branch information
Claudenw committed Jan 3, 2017
1 parent ba6464d commit 5d4ce0a
Show file tree
Hide file tree
Showing 8 changed files with 308 additions and 73 deletions.
Expand Up @@ -25,17 +25,26 @@
import org.apache.jena.graph.FrontsNode ;
import org.apache.jena.graph.Node ;
import org.apache.jena.graph.NodeFactory ;
import org.apache.jena.graph.Triple;
import org.apache.jena.graph.impl.LiteralLabelFactory ;
import org.apache.jena.query.Query ;
import org.apache.jena.query.QueryParseException;
import org.apache.jena.rdf.model.Resource ;
import org.apache.jena.riot.RiotException;
import org.apache.jena.riot.system.PrefixMap;
import org.apache.jena.riot.system.PrefixMapFactory;
import org.apache.jena.riot.tokens.Token;
import org.apache.jena.riot.tokens.Tokenizer;
import org.apache.jena.riot.tokens.TokenizerFactory;
import org.apache.jena.shared.PrefixMapping;
import org.apache.jena.sparql.ARQInternalErrorException ;
import org.apache.jena.sparql.core.TriplePath;
import org.apache.jena.sparql.core.Var ;
import org.apache.jena.sparql.expr.Expr;
import org.apache.jena.sparql.expr.ExprVar ;
import org.apache.jena.sparql.path.P_Link;
import org.apache.jena.sparql.path.Path;
import org.apache.jena.sparql.path.PathParser;
import org.apache.jena.sparql.syntax.ElementGroup;
import org.apache.jena.sparql.util.ExprUtils;
import org.apache.jena.sparql.util.NodeFactoryExtra ;
Expand Down Expand Up @@ -76,6 +85,85 @@ public Node makeNode(Object o) {
return makeNode( o, query.getPrefixMapping() );
}

private Object makeNodeOrPath(Object o)
{
return makeNodeOrPath(o, query.getPrefixMapping() );
}

private Object makeNodeOrPath(Object o, PrefixMapping pMapping)
{
if (o == null) {
return Node.ANY;
}
if (o instanceof Path)
{
return (Path)o;
}
if (o instanceof FrontsNode) {
return ((FrontsNode) o).asNode();
}

if (o instanceof Node) {
return (Node) o;
}
if (o instanceof String) {
try {
Path p = PathParser.parse((String) o, pMapping);
if (p instanceof P_Link)
{
return ((P_Link)p).getNode();
}
return p;
}
catch (QueryParseException e)
{ // try to parse vars
return makeNode( o, pMapping );
}
catch (Exception e)
{
// expected in some cases -- do nothing
}

}
return NodeFactory.createLiteral(LiteralLabelFactory.createTypedLiteral(o));
}

/**
* Make a triple path from the objects.
*
* For subject, predicate and objects nodes
* <ul>
* <li>Will return Node.ANY if object is null.</li>
* <li>Will return the enclosed Node from a FrontsNode</li>
* <li>Will return the object if it is a Node.</li>
* <li>If the object is a String
* <ul>
* <li>For <code>predicate</code> only will attempt to parse as a path</li>
* <li>for subject, predicate and object will call NodeFactoryExtra.parseNode()
* using the currently defined prefixes if the object is a String</li>
* </ul></li>
* <li>Will create a literal representation if the parseNode() fails or for
* any other object type.</li>
* </ul>
*
* @param s The subject object
* @param p the predicate object
* @param o the object object.
* @return a TriplePath
*/
public TriplePath makeTriplePath(Object s, Object p, Object o) {
Object po = makeNodeOrPath( p );
if (po instanceof Path)
{
return new TriplePath(makeNode(s), (Path)po, makeNode(o));
} else
{
return new TriplePath( new Triple( makeNode(s), (Node)po, makeNode(o)));
}

}


/**
* A convenience method to make an expression from a string. Evaluates the
* expression with respect to the current query.
Expand Down
Expand Up @@ -30,8 +30,10 @@
import org.apache.jena.graph.Node;
import org.apache.jena.graph.Triple;
import org.apache.jena.query.SortCondition;
import org.apache.jena.sparql.core.TriplePath;
import org.apache.jena.sparql.expr.Expr;
import org.apache.jena.sparql.lang.sparql_11.ParseException;
import org.apache.jena.sparql.path.Path;

/**
* Build an ASK query.
Expand Down Expand Up @@ -96,31 +98,45 @@ public AskBuilder from(Collection<String> graphName) {
getDatasetHandler().from(graphName);
return this;
}

@Override
public AskBuilder addWhere(TriplePath t) {
getWhereHandler().addWhere(t);
return this;
}


@Override
public AskBuilder addWhere(Triple t) {
getWhereHandler().addWhere(t);
getWhereHandler().addWhere(new TriplePath(t));
return this;
}

@Override
public AskBuilder addWhere(FrontsTriple t) {
getWhereHandler().addWhere(t.asTriple());
getWhereHandler().addWhere(new TriplePath(t.asTriple()));
return this;
}

@Override
public AskBuilder addWhere(Object s, Object p, Object o) {
addWhere(new Triple(makeNode(s), makeNode(p), makeNode(o)));
getWhereHandler().addWhere( makeTriplePath( s, p, o ));
return this;
}

@Override
public AskBuilder addOptional(Triple t) {
public AskBuilder addOptional(TriplePath t) {
getWhereHandler().addOptional(t);
return this;
}


@Override
public AskBuilder addOptional(Triple t) {
getWhereHandler().addOptional(new TriplePath(t));
return this;
}

@Override
public AskBuilder addOptional(SelectBuilder t) {
getWhereHandler().addOptional(t.getWhereHandler());
Expand All @@ -129,13 +145,13 @@ public AskBuilder addOptional(SelectBuilder t) {

@Override
public AskBuilder addOptional(FrontsTriple t) {
getWhereHandler().addOptional(t.asTriple());
getWhereHandler().addOptional(new TriplePath(t.asTriple()));
return this;
}

@Override
public AskBuilder addOptional(Object s, Object p, Object o) {
addOptional(new Triple(makeNode(s), makeNode(p), makeNode(o)));
getWhereHandler().addOptional( makeTriplePath( s, p, o ));
return this;
}

Expand Down Expand Up @@ -269,5 +285,4 @@ public SolutionModifierHandler getSolutionModifierHandler() {
public Node list(Object... objs) {
return getWhereHandler().list(objs);
}

}
Expand Up @@ -28,8 +28,10 @@
import org.apache.jena.graph.Node;
import org.apache.jena.graph.Triple;
import org.apache.jena.query.SortCondition;
import org.apache.jena.sparql.core.TriplePath;
import org.apache.jena.sparql.expr.Expr;
import org.apache.jena.sparql.lang.sparql_11.ParseException;
import org.apache.jena.sparql.path.Path;

/**
* Build an Construct query.
Expand Down Expand Up @@ -190,29 +192,41 @@ public ConstructBuilder setOffset(int offset) {
}

@Override
public ConstructBuilder addWhere(Triple t) {
public ConstructBuilder addWhere(TriplePath t) {
getWhereHandler().addWhere(t);
return this;
}

@Override
public ConstructBuilder addWhere(Triple t) {
getWhereHandler().addWhere(new TriplePath(t));
return this;
}

@Override
public ConstructBuilder addWhere(FrontsTriple t) {
getWhereHandler().addWhere(t.asTriple());
getWhereHandler().addWhere(new TriplePath(t.asTriple()));
return this;
}

@Override
public ConstructBuilder addWhere(Object s, Object p, Object o) {
addWhere(new Triple(makeNode(s), makeNode(p), makeNode(o)));
getWhereHandler().addWhere( makeTriplePath( s, p, o ));
return this;
}

@Override
public ConstructBuilder addOptional(Triple t) {
public ConstructBuilder addOptional(TriplePath t) {
getWhereHandler().addOptional(t);
return this;
}

@Override
public ConstructBuilder addOptional(Triple t) {
getWhereHandler().addOptional(new TriplePath(t));
return this;
}

@Override
public ConstructBuilder addOptional(SelectBuilder t) {
getWhereHandler().addOptional(t.getWhereHandler());
Expand All @@ -221,13 +235,13 @@ public ConstructBuilder addOptional(SelectBuilder t) {

@Override
public ConstructBuilder addOptional(FrontsTriple t) {
getWhereHandler().addOptional(t.asTriple());
getWhereHandler().addOptional(new TriplePath(t.asTriple()));
return this;
}

@Override
public ConstructBuilder addOptional(Object s, Object p, Object o) {
addOptional(new Triple(makeNode(s), makeNode(p), makeNode(o)));
getWhereHandler().addOptional( makeTriplePath( s, p, o ));
return this;
}

Expand Down
Expand Up @@ -34,6 +34,7 @@
import org.apache.jena.graph.Node;
import org.apache.jena.graph.Triple;
import org.apache.jena.query.SortCondition;
import org.apache.jena.sparql.core.TriplePath;
import org.apache.jena.sparql.core.Var;
import org.apache.jena.sparql.expr.Expr;
import org.apache.jena.sparql.lang.sparql_11.ParseException;
Expand Down Expand Up @@ -284,38 +285,51 @@ public static String makeString(Object o) {
}

@Override
public SelectBuilder addWhere(Triple t) {
public SelectBuilder addWhere(TriplePath t )
{
getWhereHandler().addWhere(t);
return this;
}

@Override
public SelectBuilder addWhere(Triple t) {
getWhereHandler().addWhere(new TriplePath(t));
return this;
}

@Override
public SelectBuilder addWhere(FrontsTriple t) {
getWhereHandler().addWhere(t.asTriple());
getWhereHandler().addWhere(new TriplePath(t.asTriple()));
return this;
}

@Override
public SelectBuilder addWhere(Object s, Object p, Object o) {
addWhere(new Triple(makeNode(s), makeNode(p), makeNode(o)));
getWhereHandler().addWhere( makeTriplePath( s, p, o ));
return this;
}

@Override
public SelectBuilder addOptional(TriplePath t)
{
getWhereHandler().addOptional( t );
return this;
}
@Override
public SelectBuilder addOptional(Triple t) {
getWhereHandler().addOptional(t);
getWhereHandler().addOptional(new TriplePath(t));
return this;
}

@Override
public SelectBuilder addOptional(FrontsTriple t) {
getWhereHandler().addOptional(t.asTriple());
getWhereHandler().addOptional(new TriplePath(t.asTriple()));
return this;
}

@Override
public SelectBuilder addOptional(Object s, Object p, Object o) {
addOptional(new Triple(makeNode(s), makeNode(p), makeNode(o)));
getWhereHandler().addOptional( makeTriplePath( s, p, o ));
return this;
}

Expand Down

0 comments on commit 5d4ce0a

Please sign in to comment.