// Path: src/main/java/com/anqit/spanqit/core/TriplesTemplate.java
// public class TriplesTemplate extends QueryElementCollection<TriplePattern> {
// 	TriplesTemplate(TriplePattern... triples) {
// 		super(" .\n");
// 		and(triples);
// 	}
// 
// 	/**
// 	 * add triples to this template
// 	 * 
// 	 * @param triples the triples to add
// 	 * 
// 	 * @return this TriplesTemplate instance
// 	 */
// 	public TriplesTemplate and(TriplePattern... triples) {
// 		Collections.addAll(elements, triples);
// 		
// 		return this;
// 	}
// 	
// 	@Override
// 	public String getQueryString() {
// 		return SpanqitUtils.getBracedString(super.getQueryString());
// 	}
// 
// }
// 
// Path: src/main/java/com/anqit/spanqit/graphpattern/GraphName.java
// public interface GraphName extends QueryElement { }
// 
// Path: src/main/java/com/anqit/spanqit/graphpattern/TriplePattern.java
// public interface TriplePattern extends GraphPattern {
// 	@SuppressWarnings("javadoc")
// 	static String SUFFIX = " .";
// 
// 	/**
// 	 * Add predicate-object lists describing this triple pattern's subject
// 	 * 
// 	 * @param predicate the predicate to use to describe this triple pattern's subject
// 	 * @param objects the corresponding object(s) 
// 	 * 
// 	 * @return this triple pattern
// 	 */
// 	default public TriplePattern andHas(RdfPredicate predicate, RdfObject... objects) {
// 		return andHas(Rdf.predicateObjectList(predicate, objects));
// 	}
// 	
// 	/**
// 	 * Add predicate-object lists describing this triple pattern's subject
// 	 * 
// 	 * @param lists
// 	 * 		the {@link RdfPredicateObjectList}(s) to add 
// 	 * 
// 	 * @return this triple pattern
// 	 */
// 	public TriplePattern andHas(RdfPredicateObjectList... lists);
// 	
// 	/**
// 	 * Convenience version of {@link #andHas(RdfPredicate, RdfObject...)} that takes Strings
// 	 * and converts them to StringLiterals
// 	 * 
// 	 * @param predicate the predicate to use to describe this triple pattern's subject
// 	 * @param objects the corresponding object(s)
// 	 *  
// 	 * @return this triple pattern
// 	 */
// 	default TriplePattern andHas(RdfPredicate predicate, String... objects) {
// 		return andHas(predicate, toRdfLiteralArray(objects));
// 	};
// 	
// 	/**
// 	 * Convenience version of {@link #andHas(RdfPredicate, RdfObject...)} that takes Boolean
// 	 * and converts them to BooleanLiterals
// 	 * 
// 	 * @param predicate the predicate to use to describe this triple pattern's subject
// 	 * @param objects the corresponding object(s)
// 	 *  
// 	 * @return this triple pattern
// 	 */
// 	default TriplePattern andHas(RdfPredicate predicate, Boolean... objects) {
// 		return andHas(predicate, toRdfLiteralArray(objects));
// 	};
// 	
// 	/**
// 	 * Convenience version of {@link #andHas(RdfPredicate, RdfObject...)} that takes Numbers
// 	 * and converts them to NumberLiterals
// 	 * 
// 	 * @param predicate the predicate to use to describe this triple pattern's subject
// 	 * @param objects the corresponding object(s)
// 	 *  
// 	 * @return this triple pattern
// 	 */
// 	default TriplePattern andHas(RdfPredicate predicate, Number... objects) {
// 		return andHas(predicate, toRdfLiteralArray(objects));
// 	};
// 	
// 	/**
// 	 * Use the built-in RDF shortcut {@code a} for {@code rdf:type} to specify the subject's type
// 	 * 
// 	 * @param object the object describing this triple pattern's subject's {@code rdf:type}
// 	 * 
// 	 * @return this triple pattern
// 	 * 
// 	 * @see <a href="https://www.w3.org/TR/2013/REC-sparql11-query-20130321/#abbrevRdfType">
// 	 * 		RDF Type abbreviation</a>
// 	 */
// 	default TriplePattern andIsA(RdfObject object) {
// 		return andHas(RdfPredicate.a, object);
// 	}
// }


import com.anqit.spanqit.core.TriplesTemplate;
import com.anqit.spanqit.graphpattern.GraphName;
import com.anqit.spanqit.graphpattern.TriplePattern;
package com.anqit.spanqit.core.query;


/**
 * The SPARQL Insert Data Query
 * 
 * @see <a href="https://www.w3.org/TR/sparql11-update/#insertData">
 * 		SPARQL INSERT DATA Query</a>
 * 		
 */
public class InsertDataQuery extends UpdateDataQuery<InsertDataQuery> {
	private static final String INSERT_DATA = "INSERT DATA";
	
	/**
	 * Add triples to be inserted
	 * 
	 * @param triples the triples to add to this insert data query
	 * 
	 * @return this Insert Data query instance
	 */
	public InsertDataQuery insertData(TriplePattern... triples) {
		return addTriples(triples);
	}
	
	/**
	 * Set this query's triples template
	 * 
	 * @param triplesTemplate
	 * 		the {@link TriplesTemplate} instance to set
	 * 
	 * @return this instance
	 */
	public InsertDataQuery insertData(TriplesTemplate triplesTemplate) {
		return setTriplesTemplate(triplesTemplate);
	}
	/**
	 * Specify a graph to insert the data into
	 * 
	 * @param graph the identifier of the graph
	 * 
	 * @return this Insert Data query instance
	 */
// Path: src/main/java/com/anqit/spanqit/core/TriplesTemplate.java
// public class TriplesTemplate extends QueryElementCollection<TriplePattern> {
// 	TriplesTemplate(TriplePattern... triples) {
// 		super(" .\n");
// 		and(triples);
// 	}
// 
// 	/**
// 	 * add triples to this template
// 	 * 
// 	 * @param triples the triples to add
// 	 * 
// 	 * @return this TriplesTemplate instance
// 	 */
// 	public TriplesTemplate and(TriplePattern... triples) {
// 		Collections.addAll(elements, triples);
// 		
// 		return this;
// 	}
// 	
// 	@Override
// 	public String getQueryString() {
// 		return SpanqitUtils.getBracedString(super.getQueryString());
// 	}
// 
// }
// 
// Path: src/main/java/com/anqit/spanqit/graphpattern/GraphName.java
// public interface GraphName extends QueryElement { }
// 
// Path: src/main/java/com/anqit/spanqit/graphpattern/TriplePattern.java
// public interface TriplePattern extends GraphPattern {
// 	@SuppressWarnings("javadoc")
// 	static String SUFFIX = " .";
// 
// 	/**
// 	 * Add predicate-object lists describing this triple pattern's subject
// 	 * 
// 	 * @param predicate the predicate to use to describe this triple pattern's subject
// 	 * @param objects the corresponding object(s) 
// 	 * 
// 	 * @return this triple pattern
// 	 */
// 	default public TriplePattern andHas(RdfPredicate predicate, RdfObject... objects) {
// 		return andHas(Rdf.predicateObjectList(predicate, objects));
// 	}
// 	
// 	/**
// 	 * Add predicate-object lists describing this triple pattern's subject
// 	 * 
// 	 * @param lists
// 	 * 		the {@link RdfPredicateObjectList}(s) to add 
// 	 * 
// 	 * @return this triple pattern
// 	 */
// 	public TriplePattern andHas(RdfPredicateObjectList... lists);
// 	
// 	/**
// 	 * Convenience version of {@link #andHas(RdfPredicate, RdfObject...)} that takes Strings
// 	 * and converts them to StringLiterals
// 	 * 
// 	 * @param predicate the predicate to use to describe this triple pattern's subject
// 	 * @param objects the corresponding object(s)
// 	 *  
// 	 * @return this triple pattern
// 	 */
// 	default TriplePattern andHas(RdfPredicate predicate, String... objects) {
// 		return andHas(predicate, toRdfLiteralArray(objects));
// 	};
// 	
// 	/**
// 	 * Convenience version of {@link #andHas(RdfPredicate, RdfObject...)} that takes Boolean
// 	 * and converts them to BooleanLiterals
// 	 * 
// 	 * @param predicate the predicate to use to describe this triple pattern's subject
// 	 * @param objects the corresponding object(s)
// 	 *  
// 	 * @return this triple pattern
// 	 */
// 	default TriplePattern andHas(RdfPredicate predicate, Boolean... objects) {
// 		return andHas(predicate, toRdfLiteralArray(objects));
// 	};
// 	
// 	/**
// 	 * Convenience version of {@link #andHas(RdfPredicate, RdfObject...)} that takes Numbers
// 	 * and converts them to NumberLiterals
// 	 * 
// 	 * @param predicate the predicate to use to describe this triple pattern's subject
// 	 * @param objects the corresponding object(s)
// 	 *  
// 	 * @return this triple pattern
// 	 */
// 	default TriplePattern andHas(RdfPredicate predicate, Number... objects) {
// 		return andHas(predicate, toRdfLiteralArray(objects));
// 	};
// 	
// 	/**
// 	 * Use the built-in RDF shortcut {@code a} for {@code rdf:type} to specify the subject's type
// 	 * 
// 	 * @param object the object describing this triple pattern's subject's {@code rdf:type}
// 	 * 
// 	 * @return this triple pattern
// 	 * 
// 	 * @see <a href="https://www.w3.org/TR/2013/REC-sparql11-query-20130321/#abbrevRdfType">
// 	 * 		RDF Type abbreviation</a>
// 	 */
// 	default TriplePattern andIsA(RdfObject object) {
// 		return andHas(RdfPredicate.a, object);
// 	}
// }


// Path: src/main/java/com/anqit/spanqit/core/query/InsertDataQuery.java
import com.anqit.spanqit.core.TriplesTemplate;
import com.anqit.spanqit.graphpattern.GraphName;
import com.anqit.spanqit.graphpattern.TriplePattern;

package com.anqit.spanqit.core.query;


/**
 * The SPARQL Insert Data Query
 * 
 * @see <a href="https://www.w3.org/TR/sparql11-update/#insertData">
 * 		SPARQL INSERT DATA Query</a>
 * 		
 */
public class InsertDataQuery extends UpdateDataQuery<InsertDataQuery> {
	private static final String INSERT_DATA = "INSERT DATA";
	
	/**
	 * Add triples to be inserted
	 * 
	 * @param triples the triples to add to this insert data query
	 * 
	 * @return this Insert Data query instance
	 */
	public InsertDataQuery insertData(TriplePattern... triples) {
		return addTriples(triples);
	}
	
	/**
	 * Set this query's triples template
	 * 
	 * @param triplesTemplate
	 * 		the {@link TriplesTemplate} instance to set
	 * 
	 * @return this instance
	 */
	public InsertDataQuery insertData(TriplesTemplate triplesTemplate) {
		return setTriplesTemplate(triplesTemplate);
	}
	/**
	 * Specify a graph to insert the data into
	 * 
	 * @param graph the identifier of the graph
	 * 
	 * @return this Insert Data query instance
	 */
	public InsertDataQuery into(GraphName graph) {