org.modeshape.jcr.api.index.IndexDefinition Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of modeshape-jcr-api Show documentation
Show all versions of modeshape-jcr-api Show documentation
ModeShape JCR Repository API
/*
* 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.Map;
import java.util.NoSuchElementException;
/**
* An immutable description of an index definition.
*
* @author Randall Hauch ([email protected])
*/
public interface IndexDefinition extends Iterable {
/**
* The kind of indexes.
*
* @author Randall Hauch ([email protected])
*/
public static enum IndexKind {
VALUE,
UNIQUE_VALUE,
ENUMERATED_VALUE,
TEXT,
NODE_TYPE,
}
/**
* Get the name of this index.
*
* @return the name of this index; never null
*/
String getName();
/**
* Get the name of the provider that owns this index.
*
* @return the provider name; never null
*/
String getProviderName();
/**
* Get the kind of index.
*
* @return the index kind; never null
*/
IndexKind getKind();
/**
* Get the name of the node type for which this index applies.
*
* @return the node type name; never null
*/
String getNodeTypeName();
/**
* Get the description of this index.
*
* @return the description; never null
*/
String getDescription();
/**
* Determine whether this index is currently enabled.
*
* @return true if this index is enabled and active, or false if it is not currently being used
*/
boolean isEnabled();
/**
* Determine whether this index is updated synchronously. If true, then its indexes are updated within the scope of the save
* operations. Otherwise, the indexes are updated asynchronously.
*
* @return true if the index is synchronously updated, or false otherwise
*/
boolean isSynchronous();
/**
* Determine whether this index has a single column.
*
* @return true if this index has a single column, or false if it has more
*/
boolean hasSingleColumn();
/**
* Get the number of columns in this index.
*
* @return the number of columns; always positive
*/
int size();
/**
* Get the definition for the index column at the given 0-based position.
*
* @param position the 0-based position; must be less than {@link #size()}
* @return the index definition
* @throws NoSuchElementException if the position is negative or greater than or equal to {@link #size()}.
*/
IndexColumnDefinition getColumnDefinition( int position ) throws NoSuchElementException;
/**
* Get the index property with the given name. These properties are usually non-standard.
*
* @param propertyName the property name; may not be null
* @return the value or values of the property, or null if there is no property with that name
*/
Object getIndexProperty( String propertyName );
/**
* Get the index property values keyed by their name. These properties are usually non-standard.
*
* @return the properties; never null but possibly empty
*/
Map getIndexProperties();
/**
* Get the rule that defines the workspaces to which this index definition applies.
*
* @return the matching rule for the workspace names; never null
*/
WorkspaceMatchRule getWorkspaceMatchRule();
/**
* Determine if this index definition has a column that applies to the named property. This is a convenience method that is
* equivalent to:
*
*
* for (IndexColumnDefinition columnDefn : this) {
* if (columnDefn.getPropertyName().equals(propertyName)) return true;
* }
* return false;
*
*
* @param propertyName the name of the property
* @return true if this definition contains a column that applies to a property with the given name
*/
boolean appliesToProperty( String propertyName );
public static interface WorkspaceMatchRule {
/**
* Determine if the index applies to the workspace with the given name.
*
* @param workspaceName the name of the workspace; may not be null
* @return true if the index applies to the workspace, or false if the rule does not match the name
*/
boolean usedInWorkspace( String workspaceName );
/**
* Get the string representation of this rule.
*
* @return the string representation of this rule; never null
*/
String getDefinition();
}
}