Source: query/update-query-payload.js

const QueryPayload = require('../query/query-payload');
const QueryContentType = require('../http/query-content-type');

const UPDATE_QUERY_OPERATION_TYPES = [
  QueryContentType.X_WWW_FORM_URLENCODED,
  QueryContentType.SPARQL_UPDATE
];

/**
 * Payload object holding common request parameters applicable for the
 * statements endpoint with a sparql update query.
 *
 * The query is mandatory parameter.
 *
 * Content type parameter which is used for setting the Content-Type http header
 * is optional and by default
 * <code>application/sparql-update</code> type is set.
 *
 * @class
 * @author Mihail Radkov
 * @author Svilen Velikov
 */
class UpdateQueryPayload extends QueryPayload {
  /**
   * Constructs this payload class.
   */
  constructor() {
    super();
    this.contentType = QueryContentType.SPARQL_UPDATE;
  }

  /**
   * @param {string} query The query as string to be evaluated.
   * @return {UpdateQueryPayload}
   */
  setQuery(query) {
    if (typeof query !== 'string') {
      throw new Error('Query must be a string!');
    }

    this.payload.update = query;
    return this;
  }

  /**
   * @return {string} a query which was populated in the payload.
   */
  getQuery() {
    return this.payload.update;
  }

  /**
   * One or more named graph URIs to be used as default graph(s) for retrieving.
   * @param {(string|string[])} [defaultGraphs]
   * @return {UpdateQueryPayload}
   */
  setDefaultGraphs(defaultGraphs) {
    this.payload['using-graph-uri'] = defaultGraphs;
    return this;
  }

  /**
   * @return {(string|string[])} Default graphs for the query for retrieving.
   */
  getDefaultGraphs() {
    return this.payload['using-graph-uri'];
  }

  /**
   * One or more named graph URIs to be used as named graph(s) for retrieving.
   * @param {(string|string[])} [namedGraphs]
   * @return {UpdateQueryPayload}
   */
  setNamedGraphs(namedGraphs) {
    this.payload['using-named-graph-uri'] = namedGraphs;
    return this;
  }

  /**
   * @return {(string|string[])} Named graphs set for the query for retrieving.
   */
  getNamedGraphs() {
    return this.payload['using-named-graph-uri'];
  }

  /**
   * One or more default graphs for removing statements.
   * @param {(string|string[])} [removeGraphs]
   * @return {UpdateQueryPayload}
   */
  setRemoveGraphs(removeGraphs) {
    this.payload['remove-graph-uri'] = removeGraphs;
    return this;
  }

  /**
   * @return {(string|string[])} Default graphs set for the query for removing.
   */
  getRemoveGraphs() {
    return this.payload['remove-graph-uri'];
  }

  /**
   * One or more default graphs for inserting statements.
   * @param {(string|string[])} [insertGraphs]
   * @return {UpdateQueryPayload}
   */
  setInsertGraphs(insertGraphs) {
    this.payload['insert-graph-uri'] = insertGraphs;
    return this;
  }

  /**
   * @return {(string|string[])} Default graphs set for the query for inserting.
   */
  getInsertGraphs() {
    return this.payload['insert-graph-uri'];
  }
  /**
   * @inheritDoc
   */
  validateParams() {
    if (!this.payload.update) {
      throw new Error('Parameter query is mandatory!');
    }
    return true;
  }

  /**
   * @inheritDoc
   */
  getSupportedContentTypes() {
    return UPDATE_QUERY_OPERATION_TYPES;
  }
}

module.exports = UpdateQueryPayload;