Queries.java

/*******************************************************************************
 * Copyright (c) 2018 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.sparqlbuilder.core.query;

import org.eclipse.rdf4j.sparqlbuilder.core.GraphTemplate;
import org.eclipse.rdf4j.sparqlbuilder.core.Projectable;
import org.eclipse.rdf4j.sparqlbuilder.core.Projection;
import org.eclipse.rdf4j.sparqlbuilder.core.TriplesTemplate;
import org.eclipse.rdf4j.sparqlbuilder.graphpattern.TriplePattern;

/**
 * A class with static methods to create SPARQL queries
 *
 * @see <a href="http://www.w3.org/TR/2013/REC-sparql11-query-20130321/"> SPARQL Query Language</a>
 */
public class Queries {
	// prevent instantiation of this class
	private Queries() {
	}

	/**
	 * Create a SPARQL Select query
	 *
	 * @param projectables the initial set of {@link Projectable}(s), if any, to select
	 * @return a new {@link SelectQuery}
	 * @see <a href="http://www.w3.org/TR/2013/REC-sparql11-query-20130321/#select">SPARQL Select Query</a>
	 */
	public static SelectQuery SELECT(Projectable... projectables) {
		return new SelectQuery().select(projectables);
	}

	/**
	 * Create a SPARQL Select query
	 *
	 * @param select the {@link Projection} to set initially
	 * @return a new {@link SelectQuery}
	 * @see <a href="http://www.w3.org/TR/2013/REC-sparql11-query-20130321/#select">SPARQL Select Query</a>
	 */
	public static SelectQuery SELECT(Projection select) {
		return new SelectQuery().select(select);
	}

	/**
	 * Create a SPARQL Construct query
	 *
	 * @param patterns the initial set of {@link TriplePattern}(s), if any, to construct
	 * @return a new {@link ConstructQuery}
	 * @see <a href="http://www.w3.org/TR/2013/REC-sparql11-query-20130321/#construct">SPARQL Construct Query</a>
	 */
	public static ConstructQuery CONSTRUCT(TriplePattern... patterns) {
		return new ConstructQuery().construct(patterns);
	}

	/**
	 * Create a SPARQL Construct query
	 *
	 * @param construct the {@link GraphTemplate} to set initially
	 * @return a new {@link ConstructQuery}
	 * @see <a href="http://www.w3.org/TR/2013/REC-sparql11-query-20130321/#construct">SPARQL Construct Query</a>
	 */
	public static ConstructQuery CONSTRUCT(GraphTemplate construct) {
		return new ConstructQuery().construct(construct);
	}

	/**
	 * Create a SPARQL INSERT DATA query
	 *
	 * @param triples the initial set of {@link TriplePattern}(s), if any, to use
	 * @return a new {@link InsertDataQuery}
	 * @see <a href="https://www.w3.org/TR/sparql11-update/#insertData"> SPARQL INSERT DATA Query</a>
	 */
	public static InsertDataQuery INSERT_DATA(TriplePattern... triples) {
		return new InsertDataQuery().insertData(triples);
	}

	/**
	 * Create a SPARQL INSERT DATA query
	 *
	 * @param triplesTemplate the {@link TriplesTemplate} to set initially
	 * @return a new {@link InsertDataQuery}
	 * @see <a href="https://www.w3.org/TR/sparql11-update/#insertData"> SPARQL INSERT DATA Query</a>
	 */
	public static InsertDataQuery INSERT_DATA(TriplesTemplate triplesTemplate) {
		return new InsertDataQuery().insertData(triplesTemplate);
	}

	/**
	 * Create a SPARQL DELETE DATA query
	 *
	 * @param triples the initial set of {@link TriplePattern}(s), if any, to use
	 * @return a new {@link DeleteDataQuery}
	 * @see <a href="https://www.w3.org/TR/sparql11-update/#deleteData"> SPARQL DELETE DATA Query</a>
	 */
	public static DeleteDataQuery DELETE_DATA(TriplePattern... triples) {
		return new DeleteDataQuery().deleteData(triples);
	}

	/**
	 * Create a SPARQL DELETE DATA query
	 *
	 * @param triplesTemplate the {@link TriplesTemplate} to set initially
	 * @return a new {@link DeleteDataQuery}
	 * @see <a href="https://www.w3.org/TR/sparql11-update/#deleteData"> SPARQL DELETE DATA Query</a>
	 */
	public static DeleteDataQuery DELETE_DATA(TriplesTemplate triplesTemplate) {
		return new DeleteDataQuery().deleteData(triplesTemplate);
	}

	/**
	 * Creates a SPARQL Modify query
	 *
	 * @return a new {@link ModifyQuery}
	 * @see <a href="https://www.w3.org/TR/sparql11-update/#deleteInsert"> SPARQL Modify Query</a>
	 */
	public static ModifyQuery MODIFY() {
		return new ModifyQuery();
	}

	/**
	 * Convenience method, creates a SPARQL DELETE query using ModifyQuery.
	 *
	 * @param triples the initial set of {@link TriplePattern}(s), if any, to use
	 * @return a new {@link ModifyQuery}
	 * @see <a href="https://www.w3.org/TR/sparql11-update/#delete"> SPARQL DELETE Query</a>
	 */
	public static ModifyQuery DELETE(TriplePattern... triples) {
		return new ModifyQuery().delete(triples);
	}

	/**
	 * Convenience method, creates a SPARQL INSERT query using ModifyQuery.
	 *
	 * @param triples the initial set of {@link TriplePattern}(s), if any, to use
	 * @return a new {@link ModifyQuery}
	 * @see <a href="https://www.w3.org/TR/sparql11-update/#insert"> SPARQL INSERT Query</a>
	 */
	public static ModifyQuery INSERT(TriplePattern... triples) {
		return new ModifyQuery().insert(triples);
	}

	/**
	 * Creates a SPARQL LOAD query
	 *
	 * @return a new {@link LoadQuery}
	 * @see <a href="https://www.w3.org/TR/sparql11-update/#load"> SPARQL LOAD Query</a>
	 */
	public static LoadQuery LOAD() {
		return new LoadQuery();
	}

	/**
	 * Creates a SPARQL CLEAR Query
	 *
	 * @return a new {@link ClearQuery}
	 * @see <a href="https://www.w3.org/TR/sparql11-update/#clear"> SPARQL CLEAR Query</a>
	 */
	public static ClearQuery CLEAR() {
		return new ClearQuery();
	}

	/**
	 * Creates a SPARQL CREATE Query
	 *
	 * @return a new {@link CreateQuery}
	 * @see <a href="https://www.w3.org/TR/sparql11-update/#create"> SPARQL CREATE Query</a>
	 */
	public static CreateQuery CREATE() {
		return new CreateQuery();
	}

	/**
	 * Creates a SPARQL DROP Query
	 *
	 * @return a new {@link DropQuery}
	 * @see <a href="https://www.w3.org/TR/sparql11-update/#drop"> SPARQL DROP Query</a>
	 */
	public static DropQuery DROP() {
		return new DropQuery();
	}

	/**
	 * Creates a SPARQL COPY Query
	 *
	 * @return a new {@link CopyQuery}
	 * @see <a href="https://www.w3.org/TR/sparql11-update/#copy"> SPARQL COPY Query</a>
	 */
	public static CopyQuery COPY() {
		return new CopyQuery();
	}

	/**
	 * Creates a SPARQL MOVE Query
	 *
	 * @return a new {@link MoveQuery}
	 * @see <a href="https://www.w3.org/TR/sparql11-update/#move"> SPARQL MOVE Query</a>
	 */
	public static MoveQuery MOVE() {
		return new MoveQuery();
	}

	/**
	 * Creates a new SPARQL ADD Query
	 *
	 * @return a new {@link AddQuery}
	 * @see <a href="https://www.w3.org/TR/sparql11-update/#add"> SPARQL ADD Query</a>
	 */
	public static AddQuery ADD() {
		return new AddQuery();
	}
}