ShapeSourceHelper.java

/*******************************************************************************
 * Copyright (c) 2022 Eclipse RDF4J contributors.
 *
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Distribution License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/org/documents/edl-v10.php.
 *
 * SPDX-License-Identifier: BSD-3-Clause
 *******************************************************************************/

package org.eclipse.rdf4j.sail.shacl.wrapper.shape;

import org.eclipse.rdf4j.common.iteration.CloseableIteration;
import org.eclipse.rdf4j.model.Resource;
import org.eclipse.rdf4j.model.Statement;
import org.eclipse.rdf4j.model.Value;
import org.eclipse.rdf4j.model.vocabulary.RDF;
import org.eclipse.rdf4j.repository.RepositoryConnection;
import org.eclipse.rdf4j.repository.RepositoryResult;
import org.eclipse.rdf4j.sail.SailConnection;

class ShapeSourceHelper {

	static Value getFirst(SailConnection connection, Resource subject, Resource[] context) {
		assert context != null;
		try (var iteration = connection.getStatements(subject, RDF.FIRST, null, true, context)) {
			return getObject(iteration);
		}
	}

	static Value getFirst(RepositoryConnection connection, Resource subject, Resource[] context) {
		assert context != null;
		try (var iteration = connection.getStatements(subject, RDF.FIRST, null, true, context)) {
			return getObject(iteration);
		}
	}

	static Resource getRdfRest(RepositoryConnection connection, Resource subject, Resource[] context) {
		assert context != null;
		try (var iteration = connection.getStatements(subject, RDF.REST, null, true, context)) {
			return (Resource) getObject(iteration);
		}
	}

	static Resource getRdfRest(SailConnection connection, Resource subject, Resource[] context) {
		assert context != null;
		try (var iteration = connection.getStatements(subject, RDF.REST, null, true, context)) {
			return (Resource) getObject(iteration);
		}
	}

//	private static Value getObject(Stream<? extends Statement> stream) {
//		return stream
//				.map(Statement::getObject)
//				.findAny()
//				.orElse(null);
//	}

	private static Value getObject(CloseableIteration<? extends Statement> iteration) {
		if (iteration.hasNext()) {
			return iteration.next().getObject();
		}
		return null;
	}

	private static Value getObject(RepositoryResult<Statement> iteration) {
		if (iteration.hasNext()) {
			return iteration.next().getObject();
		}
		return null;
	}

}