All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.eclipse.rdf4j.http.protocol.Protocol Maven / Gradle / Ivy

The newest version!
/*******************************************************************************
 * Copyright (c) 2015 Eclipse RDF4J contributors, Aduna, and others.
 *
 * 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.http.protocol;

import java.util.Objects;

import org.eclipse.rdf4j.model.IRI;
import org.eclipse.rdf4j.model.Resource;
import org.eclipse.rdf4j.model.Triple;
import org.eclipse.rdf4j.model.Value;
import org.eclipse.rdf4j.model.ValueFactory;
import org.eclipse.rdf4j.rio.helpers.NTriplesUtil;

public abstract class Protocol {

	/**
	 * Defines the action a particular transaction update is executing.
	 *
	 * @author Jeen Broekstra
	 */
	public enum Action {
		/**
		 * adding data
		 */
		ADD,
		/**
		 * deleting data
		 */
		DELETE,
		/**
		 * getStatements or exportStatements
		 */
		GET,
		/**
		 * retrieving repository size
		 */
		SIZE,
		/**
		 * SPARQL query
		 */
		QUERY,
		/**
		 * SPARQL Update
		 */
		UPDATE,
		/**
		 * Keep alive ping @since 2.3
		 */
		PING,
		/**
		 * prepare
		 */
		PREPARE,
		/**
		 * commit
		 */
		COMMIT,
		/**
		 * rollback
		 */
		ROLLBACK
	}

	/**
	 * Use an enum to allow ActiveTransactionRegistry enum to access the static values. This is necessary because enum
	 * are initialize before static fields.
	 */
	@Deprecated
	public enum TIMEOUT {
		CACHE;

		/**
		 * Configurable system property {@code rdf4j.server.txn.registry.timeout} for specifying the transaction cache
		 * timeout (in seconds).
		 */
		public static final String CACHE_PROPERTY = "rdf4j.server.txn.registry.timeout";

		/**
		 * Default timeout setting for transaction cache entries (in seconds).
		 */
		public final static int DEFAULT = 60;
	}

	/**
	 * Configurable system property {@code rdf4j.server.txn.registry.timeout} for specifying the transaction cache
	 * timeout (in seconds).
	 */
	public static final String CACHE_TIMEOUT_PROPERTY = Protocol.TIMEOUT.CACHE_PROPERTY;

	/**
	 * Default timeout setting for transaction cache entries (in seconds).
	 */
	public final static int DEFAULT_TIMEOUT = Protocol.TIMEOUT.DEFAULT;

	/**
	 * Protocol version.
	 *
	 * 
    *
  • 12: since RDF4J 3.5.0
  • *
  • 11: since RDF4J 3.3.0
  • *
  • 10: since RDF4J 3.1.0
  • *
  • 9: since RDF4J 3.0.0
  • *
*/ public static final String VERSION = "12"; /** * Parameter name for the 'subject' parameter of a statement query. */ public static final String SUBJECT_PARAM_NAME = "subj"; /** * Parameter name for the 'predicate' parameter of a statement query. */ public static final String PREDICATE_PARAM_NAME = "pred"; /** * Parameter name for the 'object' parameter of statement query. */ public static final String OBJECT_PARAM_NAME = "obj"; /** * Parameter name for the 'includeInferred' parameter. */ public static final String INCLUDE_INFERRED_PARAM_NAME = "infer"; /** * Parameter name for the context parameter. */ public static final String CONTEXT_PARAM_NAME = "context"; /** * Parameter value for the NULL context. */ public static final String NULL_PARAM_VALUE = "null"; /** * Parameter name for the graph parameter. */ public static final String GRAPH_PARAM_NAME = "graph"; /** * Parameter name for the update parameter. */ public static final String UPDATE_PARAM_NAME = "update"; /** * Parameter name for the base-URI parameter. */ public static final String BASEURI_PARAM_NAME = "baseURI"; /** * Parameter name for the query parameter. */ public static final String QUERY_PARAM_NAME = "query"; public static final String LIMIT_PARAM_NAME = "limit"; public static final String OFFSET_PARAM_NAME = "offset"; /** * Parameter name for the query language parameter. */ public static final String QUERY_LANGUAGE_PARAM_NAME = "queryLn"; public static final String TIMEOUT_PARAM_NAME = "timeout"; /** * Parameter name for the default remove graph URI parameter. */ public static final String REMOVE_GRAPH_PARAM_NAME = "remove-graph-uri"; /** * Parameter name for the default insert graph URI parameter. */ public static final String INSERT_GRAPH_PARAM_NAME = "insert-graph-uri"; /** * Parameter name for the default graph URI parameter for update. */ public static final String USING_GRAPH_PARAM_NAME = "using-graph-uri"; /** * Parameter name for the named graph URI parameter for update. */ public static final String USING_NAMED_GRAPH_PARAM_NAME = "using-named-graph-uri"; /** * Parameter name for the default graph URI parameter. */ public static final String DEFAULT_GRAPH_PARAM_NAME = "default-graph-uri"; /** * Parameter name for the named graph URI parameter. */ public static final String NAMED_GRAPH_PARAM_NAME = "named-graph-uri"; /** * Parameter name for the Accept parameter (may also be used as the name of the Accept HTTP header). */ public static final String ACCEPT_PARAM_NAME = "Accept"; /** * Parameter name for the isolation level used in transactions. * * @see #TRANSACTION_SETTINGS_PREFIX * @deprecated Use transaction-setting__isolation-level instead. */ @Deprecated(since = "3.3.0") public static final String ISOLATION_LEVEL_PARAM_NAME = "isolation-level"; /** * Prefix for transaction settings in the query param * * @since 3.3.0 */ public static final String TRANSACTION_SETTINGS_PREFIX = "transaction-setting__"; /** * Parameter name for the action parameter used in transactions. */ public static final String ACTION_PARAM_NAME = "action"; /** * Parameter name for the distinct parameter. */ public static final String DISTINCT_PARAM_NAME = "distinct"; /** * Relative location of the protocol resource. */ public static final String PROTOCOL = "protocol"; /** * Relative location of the config resource. */ public static final String CONFIG = "config"; /** * Relative location of the repository list resource. */ public static final String REPOSITORIES = "repositories"; /** * Relative location of the statement list resource of a repository. */ public static final String STATEMENTS = "statements"; /** * Relative location of the transaction resources of a repository. */ public static final String TRANSACTIONS = "transactions"; /** * Relative location of the context list resource of a repository. */ public static final String CONTEXTS = "contexts"; /** * Relative location of the namespaces list resource of a repository. */ public static final String NAMESPACES = "namespaces"; /** * Parameter prefix for query-external variable bindings. */ public static final String BINDING_PREFIX = "$"; /** * Relative location of the 'size' resource of a repository. */ public static final String SIZE = "size"; /** * MIME type for transactions: application/x-rdftransaction. */ public static final String TXN_MIME_TYPE = "application/x-rdftransaction"; /** * MIME type for www forms: application/x-www-form-urlencoded. */ public static final String FORM_MIME_TYPE = "application/x-www-form-urlencoded"; /** * MIME type for SPARQL update: application/sparql-query. */ public static final String SPARQL_QUERY_MIME_TYPE = "application/sparql-query"; /** * MIME type for SPARQL update: application/sparql-update. */ public static final String SPARQL_UPDATE_MIME_TYPE = "application/sparql-update"; /** * Parameter for server instruction to preserve blank node ids when parsing request data. */ public static final String PRESERVE_BNODE_ID_PARAM_NAME = "preserveNodeId"; private static String getServerDir(String serverLocation) { if (serverLocation.endsWith("/")) { return serverLocation; } else { return serverLocation + "/"; } } /** * Get the location of the protocol resource on the specified server. * * @param serverLocation the base location of a server implementing this REST protocol. * @return the location of the protocol resource on the specified server */ public static final String getProtocolLocation(String serverLocation) { return getServerDir(serverLocation) + PROTOCOL; } /** * Get the location of the server configuration resource on the specified server. * * @param serverLocation the base location of a server implementing this REST protocol. * @return the location of the server configuration resource on the specified server */ public static final String getConfigLocation(String serverLocation) { return getServerDir(serverLocation) + CONFIG; } /** * Get the location of the repository list resource on the specified server. * * @param serverLocation the base location of a server implementing this REST protocol. * @return the location of the repository list resource on the specified server */ public static final String getRepositoriesLocation(String serverLocation) { return getServerDir(serverLocation) + REPOSITORIES; } /** * Get the location of a specific repository resource on the specified server. * * @param serverLocation the base location of a server implementing this REST protocol. * @param repositoryID the ID of the repository * @return the location of a specific repository resource on the specified server */ public static final String getRepositoryLocation(String serverLocation, String repositoryID) { return getRepositoriesLocation(serverLocation) + "/" + repositoryID; } /** * Get the location of the config of a specific repository resource. * * @param repositoryLocation the location of a repository implementing this REST protocol. * @return the location of the configuration resource for the specified repository */ public static final String getRepositoryConfigLocation(String repositoryLocation) { return repositoryLocation + "/" + CONFIG; } /** * Get the location of the statements resource for a specific repository. * * @param repositoryLocation the location of a repository implementing this REST protocol. * @return the location of the statements resource for the specified repository */ public static final String getStatementsLocation(String repositoryLocation) { return repositoryLocation + "/" + STATEMENTS; } /** * Get the location of the transaction resources for a specific repository. * * @param repositoryLocation the location of a repository implementing this REST protocol. * @return the location of the transaction resources for the specified repository */ public static final String getTransactionsLocation(String repositoryLocation) { return repositoryLocation + "/" + TRANSACTIONS; } /** * Extracts the server location from the repository location. * * @param repositoryLocation the location of a repository implementing this REST protocol. * @return the location of the server resource for the specified repository. */ public static final String getServerLocation(String repositoryLocation) { String serverLocation = repositoryLocation.substring(0, repositoryLocation.lastIndexOf('/')); serverLocation = serverLocation.substring(0, serverLocation.lastIndexOf('/')); return serverLocation; } /** * Extracts the repository ID from the repository location. * * @param repositoryLocation the location of a repository implementing this REST protocol. * @return the ID of the repository. */ public static final String getRepositoryID(String repositoryLocation) { String repositoryID = repositoryLocation.substring(repositoryLocation.lastIndexOf('/') + 1); return repositoryID; } /** * Get the location of the contexts lists resource for a specific repository. * * @param repositoryLocation the location of a repository implementing this REST protocol. * @return the location of the contexts lists resource for the specified repository */ public static final String getContextsLocation(String repositoryLocation) { return repositoryLocation + "/" + CONTEXTS; } /** * Get the location of the namespaces lists resource for a specific repository on the specified server. * * @param repositoryLocation the base location of a server implementing this REST protocol. * @return the location of the namespaces lists resource for a specific repository on the specified server */ public static final String getNamespacesLocation(String repositoryLocation) { return repositoryLocation + "/" + NAMESPACES; } /** * Get the location of the namespace with the specified prefix for a specific repository on the specified server. * * @param repositoryLocation the location of a repository implementing this REST protocol. * @param prefix the namespace prefix * @return the location of the the namespace with the specified prefix for a specific repository on the specified * server */ public static final String getNamespacePrefixLocation(String repositoryLocation, String prefix) { return getNamespacesLocation(repositoryLocation) + "/" + prefix; } /** * Get the location of the 'size' resource for a specific repository on the specified server. * * @param repositoryLocation the location of a repository implementing this REST protocol. * @return the location of the 'size' resource for a specific repository on the specified server */ public static final String getSizeLocation(String repositoryLocation) { return repositoryLocation + "/" + SIZE; } /** * Encodes a value in a canonical serialized string format, for use in a URL query parameter. * * @param value The value to encode, possibly null. * @return The protocol-serialized representation of the supplied value, or {@link #NULL_PARAM_VALUE} if the * supplied value was null. */ public static String encodeValue(Value value) { return NTriplesUtil.toNTriplesString(value); } /** * Decode a previously encoded value. * * @param encodedValue the encoded value * @param valueFactory the factory to use for constructing the Value * @return the decoded Value * @see #encodeValue(Value) */ public static Value decodeValue(String encodedValue, ValueFactory valueFactory) { if (encodedValue != null) { return NTriplesUtil.parseValue(encodedValue, valueFactory); } return null; } /** * Decode a previously encoded Resource. * * @param encodedValue the encoded value * @param valueFactory the factory to use for constructing the Resource * @return the decoded Resource * @see #encodeValue(Value) */ public static Resource decodeResource(String encodedValue, ValueFactory valueFactory) { if (encodedValue != null) { return NTriplesUtil.parseResource(encodedValue, valueFactory); } return null; } /** * Decode a previously encoded URI. * * @param encodedValue the encoded value * @param valueFactory the factory to use for constructing the URI * @return the decoded URI * @see #encodeValue(Value) */ public static IRI decodeURI(String encodedValue, ValueFactory valueFactory) { if (encodedValue != null) { return NTriplesUtil.parseURI(encodedValue, valueFactory); } return null; } /** * Encodes a context resource for use in a URL. * * @param context The context to encode, possibly null. * @return The protocol-serialized representation of the supplied context, or {@link #NULL_PARAM_VALUE} if the * supplied value was null. */ public static String encodeContext(Resource context) { if (context == null) { return Protocol.NULL_PARAM_VALUE; } else { return encodeValue(context); } } /** * Decode a previously encoded context Resource. * * @param encodedValue the encoded value * @param valueFactory the factory to use for constructing the Resource * @return the decoded Resource, or null if the encoded values was null or equal to {@link #NULL_PARAM_VALUE} */ public static Resource decodeContext(String encodedValue, ValueFactory valueFactory) { if (encodedValue == null) { return null; } else if (NULL_PARAM_VALUE.equals(encodedValue)) { return null; } else { Resource context = decodeResource(encodedValue, valueFactory); // Context must be an IRI or BNode but never Triple if (context instanceof Triple) { throw new IllegalArgumentException("Invalid context value: " + encodedValue); } return context; } } /** * Encode context resources for use in a URL. * * @param contexts the contexts to encode, must not be null. * @return the encoded contexts * @throws IllegalArgumentException If the contexts is null. */ public static String[] encodeContexts(Resource... contexts) { Objects.requireNonNull(contexts, "contexts argument may not be null; either the value should be cast to Resource or an empty array should be supplied"); String[] result = new String[contexts.length]; for (int index = 0; index < contexts.length; index++) { result[index] = encodeContext(contexts[index]); } return result; } /** * Decode previously encoded contexts. * * @param encodedValues the encoded values * @param valueFactory the factory to use for constructing the Resources * @return the decoded Resources, or an empty array if the supplied encodedValues was null. */ public static Resource[] decodeContexts(String[] encodedValues, ValueFactory valueFactory) { Resource[] result; if (encodedValues == null) { result = new Resource[0]; } else { result = new Resource[encodedValues.length]; for (int index = 0; index < encodedValues.length; index++) { result[index] = decodeContext(encodedValues[index], valueFactory); } } return result; } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy