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

org.modeshape.jcr.api.index.IndexManager Maven / Gradle / Ivy

There is a newer version: 5.5.1.fcr
Show newest version
/*
 * ModeShape (http://www.modeshape.org)
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *       http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.modeshape.jcr.api.index;

import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.jcr.RepositoryException;
import javax.jcr.Workspace;
import javax.jcr.nodetype.NodeTypeManager;

/**
 * An interface for programmatically adding or removing index providers and index definitions. Even though this is accessed via
 * {@link org.modeshape.jcr.api.Workspace#getIndexManager}, like {@link NodeTypeManager} it represents a session's mechanism to
 * define, alter, or remove index definitions for the whole repository (not just the session's {@link Workspace#getName()
 * workspace}).
 * 

* To create an IndexDefinition: *

    *
  1. Call the {@link #createIndexDefinitionTemplate()} method to obtain a new blank template
  2. *
  3. Call the setter methods on the {@link IndexDefinitionTemplate} to make the template accurately describe the new or updated * index definition
  4. *
  5. For each of the index definition's columns, {@link #createIndexColumnDefinitionTemplate() create a column definition * template} and call the setters to define the {@link IndexColumnDefinitionTemplate#setPropertyName(String) property name} to * which the column applies and the {@link IndexColumnDefinitionTemplate#setColumnType(int) type for the column}.
  6. *
  7. Call the {@link IndexDefinitionTemplate#setColumnDefinitions(Iterable)} to assign the column definitions to the index * definition
  8. *
* The resulting {@link IndexDefinitionTemplate}, which is also an {@link IndexDefinition}, can then be passed to the * {@link #registerIndex(IndexDefinition, boolean)} or {@link #registerIndexes(IndexDefinition[], boolean)} methods to add/update * the index definition. * * @author Randall Hauch ([email protected]) * @see org.modeshape.jcr.api.Workspace#getIndexManager() */ public interface IndexManager { /** * Get the names of the available index providers. * * @return the immutable set of provider names; never null but possibly empty */ Set getProviderNames(); /** * Get a map of the registered index definitions keyed by their names. The resulting map is immutable, but it is updated * whenever an index definition is added, updated, or removed. To add an index, use * {@link #registerIndex(IndexDefinition, boolean)} or {@link #registerIndexes(IndexDefinition[], boolean)}; to remove an * index, use {@link #unregisterIndexes}. * * @return the index definitions; never null but possibly empty */ Map getIndexDefinitions(); /** * Register a new definition for an index. * * @param indexDefinition the definition; may not be null * @param allowUpdate true if the definition can update or overwrite an existing definition with the same name, or false if * calling this method should result in an exception when the repository already contains a definition with the same * name already exists * @throws InvalidIndexDefinitionException if the new definition is invalid * @throws IndexExistsException if allowUpdate is false and the IndexDefinition * specifies a node type name that is already registered. * @throws RepositoryException if there is a problem registering the new definition, or if an existing index */ void registerIndex( IndexDefinition indexDefinition, boolean allowUpdate ) throws InvalidIndexDefinitionException, IndexExistsException, RepositoryException; /** * Register new definitions for several indexes. * * @param indexDefinitions the definitions; may not be null * @param allowUpdate true if each of the definition can update or overwrite an existing definition with the same name, or * false if calling this method should result in an exception when the repository already contains any definition with * names that match the supplied definitions * @throws InvalidIndexDefinitionException if the new definition is invalid * @throws IndexExistsException if allowUpdate is false and the IndexDefinition * specifies a node type name that is already registered. * @throws RepositoryException if there is a problem registering the new definition, or if an existing index */ void registerIndexes( IndexDefinition[] indexDefinitions, boolean allowUpdate ) throws InvalidIndexDefinitionException, IndexExistsException, RepositoryException; /** * Removes an existing index definition. * * @param indexNames the names of the index definition to be removed; may not be null * @throws NoSuchIndexException there is no index with the supplied name * @throws RepositoryException if there is a problem registering the new definition, or if an existing index */ void unregisterIndexes( String... indexNames ) throws NoSuchIndexException, RepositoryException; /** * Create a new template that can be used to programmatically define an index. * * @return the new template; may not be null */ IndexDefinitionTemplate createIndexDefinitionTemplate(); /** * Create a new template that can be used to programmatically define a column on an index. * * @return the new template; may not be null */ IndexColumnDefinitionTemplate createIndexColumnDefinitionTemplate(); /** * Returns the status of the index with the given name for the given provider and workspace. * * @param providerName a {@link String} the name of an index provider; may not be null * @param indexName a {@link String} the name of an index which should exist for the provider; may not be null * @param workspaceName a {@link String} the name of a workspace for which the index was created; may not be null * @return a {@link org.modeshape.jcr.api.index.IndexManager.IndexStatus} instance, never {@code null} but possibly * {@link org.modeshape.jcr.api.index.IndexManager.IndexStatus#NON_EXISTENT} if a provider with this name does not exist * or an index with this name does not exist for the provider or the index doesn't exist for the given workspace. */ IndexStatus getIndexStatus( String providerName, String indexName, String workspaceName ); /** * Returns a list with the names of all the indexes that have a certain status, for a provider and workspace. * * @param providerName a {@link String} the name of an index provider; may not be null * @param workspaceName a {@link String} the name of a workspace for which the index was created; may not be null * @param status a {@link org.modeshape.jcr.api.index.IndexManager.IndexStatus} instance; may not be null * @return a List with the names of all the indexes belonging to the provider which have the given status and apply to the workspace; * never {@code null} */ List getIndexNames(String providerName, String workspaceName, IndexStatus status); /** * Enum with a list of possible statuses for managed indexes. */ enum IndexStatus { /** * Active index being considered/used by the query engine when executing queries */ ENABLED, /** * Active index which is re-indexing its data but is not being used by the query engine */ REINDEXING, /** * Inactive index which has been disabled or shut down. */ DISABLED, /** * Index which does not exist */ NON_EXISTENT } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy