io.konig.shacl.SequencePath Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of konig-core Show documentation
Show all versions of konig-core Show documentation
A library for core classes (Graph, Vertex, Edge, etc.)
package io.konig.shacl;
/*
* #%L
* Konig Core
* %%
* Copyright (C) 2015 - 2017 Gregory McFall
* %%
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* #L%
*/
import java.util.ArrayList;
import org.openrdf.model.URI;
import io.konig.annotation.RdfList;
import io.konig.core.KonigException;
import io.konig.formula.Direction;
import io.konig.formula.DirectionStep;
import io.konig.formula.PathExpression;
import io.konig.formula.PathStep;
@RdfList
public class SequencePath extends ArrayList implements PropertyPath {
private static final long serialVersionUID = 1L;
static public SequencePath fromPathExpression(PathExpression e) throws KonigException {
SequencePath sequence = new SequencePath();
for (PathStep step : e.getStepList()) {
if (step instanceof DirectionStep) {
DirectionStep dirStep = (DirectionStep) step;
if (dirStep.getDirection() == Direction.IN) {
throw new KonigException("Inverse paths not supported: " + e.simpleText());
}
URI term = dirStep.getTerm().getIri();
sequence.add(new PredicatePath(term));
} else {
throw new KonigException("Invalid sequence path: " + e.simpleText());
}
}
return sequence;
}
public String toString() {
StringBuilder builder = new StringBuilder();
builder.append('(');
String space = "";
for (PropertyPath path : this) {
builder.append(space);
builder.append(path.toString());
space = " ";
}
builder.append(')');
return builder.toString();
}
public PropertyPath getLast() {
PropertyPath result = null;
if (!isEmpty()) {
result = get(size()-1);
if (result instanceof SequencePath) {
result = ((SequencePath) result).getLast();
}
}
return result;
}
}