001/*
002 *   Licensed to the Apache Software Foundation (ASF) under one
003 *   or more contributor license agreements.  See the NOTICE file
004 *   distributed with this work for additional information
005 *   regarding copyright ownership.  The ASF licenses this file
006 *   to you under the Apache License, Version 2.0 (the
007 *   "License"); you may not use this file except in compliance
008 *   with the License.  You may obtain a copy of the License at
009 *
010 *     http://www.apache.org/licenses/LICENSE-2.0
011 *
012 *   Unless required by applicable law or agreed to in writing,
013 *   software distributed under the License is distributed on an
014 *   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
015 *   KIND, either express or implied.  See the License for the
016 *   specific language governing permissions and limitations
017 *   under the License.
018 *
019 */
020package org.apache.directory.server.core.api.changelog;
021
022
023import org.apache.directory.server.core.api.partition.Partition;
024
025
026/**
027 * TODO TaggableSearchableChangeLogStore.
028 *
029 * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
030 */
031public interface TaggableSearchableChangeLogStore extends TaggableChangeLogStore, SearchableChangeLogStore
032{
033    /**
034     * Get's the tag search engine for this TaggableSearchableChangeLogStore.
035     *
036     * @return the snapshot query engine for this store.
037     */
038    TagSearchEngine getTagSearchEngine();
039
040
041    /**
042     * 
043     * Gets the read only Partition backed by this ChangeLogStore.
044     * The init() method on this partition needs to be called by the caller.<br><br>
045     * Note: This partition allows add/delete operation on the tags container
046     *       The revisions container is read-only.<br><br>  
047     * The default containers of the partition are
048     * <ul>
049     *   <li>ou=changelog</li>
050     *   <li>ou=tags,ou=changelog</li>
051     *   <li>ou=revisions,ou=changelog</li>
052     *  </ul> 
053     * 
054     * @param partitionSuffix the suffix of the partition e.x ou=chnagelog
055     * @param revContainerName the container's name for holding the revisions ex. ou=revisions
056     * @param tagContainerName the container's name for holding the tags ex. ou=tags
057     */
058    void createPartition( String partitionSuffix, String revContainerName, String tagContainerName );
059
060
061    /**
062     * Gets the partition associated with this store
063     *
064     * @return the partition associated with this store, null if not initialized
065     */
066    Partition getPartition();
067
068}