| package org.apache.maven.index.context; |
| |
| /* |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you 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. |
| */ |
| |
| import java.io.File; |
| import java.io.IOException; |
| import java.util.Collection; |
| import java.util.Date; |
| import java.util.List; |
| import java.util.Set; |
| |
| import org.apache.lucene.analysis.Analyzer; |
| import org.apache.lucene.index.IndexWriter; |
| import org.apache.lucene.search.IndexSearcher; |
| import org.apache.lucene.store.Directory; |
| import org.apache.maven.index.artifact.GavCalculator; |
| |
| /** |
| * An indexing context is representing artifact repository for indexing and searching. Indexing context is a statefull |
| * component, it keeps state of index readers and writers. |
| * |
| * @author Jason van Zyl |
| * @author Tamas Cservenak |
| * @author Eugene Kuleshov |
| */ |
| public interface IndexingContext |
| { |
| /** |
| * Standard name of the full repository index that is used when clients requesting index information have nothing to |
| * start with. |
| */ |
| String INDEX_FILE_PREFIX = "nexus-maven-repository-index"; |
| |
| String INDEX_REMOTE_PROPERTIES_FILE = INDEX_FILE_PREFIX + ".properties"; |
| |
| String INDEX_UPDATER_PROPERTIES_FILE = INDEX_FILE_PREFIX + "-updater.properties"; |
| |
| String INDEX_PACKER_PROPERTIES_FILE = INDEX_FILE_PREFIX + "-packer.properties"; |
| |
| /** |
| * A prefix used for all index property names |
| */ |
| String INDEX_PROPERTY_PREFIX = "nexus.index."; |
| |
| /** |
| * A property name used to specify index id |
| */ |
| String INDEX_ID = INDEX_PROPERTY_PREFIX + "id"; |
| |
| /** |
| * A property name used to specify legacy index timestamp (the last update time) |
| */ |
| String INDEX_LEGACY_TIMESTAMP = INDEX_PROPERTY_PREFIX + "time"; |
| |
| /** |
| * A property name used to specify index timtestamp |
| */ |
| String INDEX_TIMESTAMP = INDEX_PROPERTY_PREFIX + "timestamp"; |
| |
| /** |
| * A prefix used to specify an incremental update chunk name |
| */ |
| String INDEX_CHUNK_PREFIX = INDEX_PROPERTY_PREFIX + "incremental-"; |
| |
| /** |
| * A date format used for index timestamp |
| */ |
| String INDEX_TIME_FORMAT = "yyyyMMddHHmmss.SSS Z"; |
| |
| /** |
| * A date format used for incremental update chunk names |
| */ |
| String INDEX_TIME_DAY_FORMAT = "yyyyMMdd"; |
| |
| /** |
| * A counter used to id the chunks |
| */ |
| String INDEX_CHUNK_COUNTER = INDEX_PROPERTY_PREFIX + "last-incremental"; |
| |
| /** |
| * An id that defines the current incremental chain. If when checking remote repo, the index chain doesn't match |
| * you'll know that you need to download the full index |
| */ |
| String INDEX_CHAIN_ID = INDEX_PROPERTY_PREFIX + "chain-id"; |
| |
| /** |
| * Returns this indexing context id. |
| */ |
| String getId(); |
| |
| /** |
| * Returns repository id. |
| */ |
| String getRepositoryId(); |
| |
| /** |
| * Returns location for the local repository. |
| */ |
| File getRepository(); |
| |
| /** |
| * Returns public repository url. |
| */ |
| String getRepositoryUrl(); |
| |
| /** |
| * Returns url for the index update |
| */ |
| String getIndexUpdateUrl(); |
| |
| /** |
| * Is the context searchable when doing "non-targeted" searches? Ie. Should it take a part when searching without |
| * specifying context? |
| * |
| * @return |
| */ |
| boolean isSearchable(); |
| |
| /** |
| * Sets is the context searchable when doing "non-targeted" searches. |
| * |
| * @param searchable |
| */ |
| void setSearchable( boolean searchable ); |
| |
| /** |
| * Returns index update time |
| */ |
| Date getTimestamp(); |
| |
| void updateTimestamp() |
| throws IOException; |
| |
| void updateTimestamp( boolean save ) |
| throws IOException; |
| |
| void updateTimestamp( boolean save, Date date ) |
| throws IOException; |
| |
| /** |
| * Returns a number that represents the "size" useful for doing comparisons between contexts (which one has more |
| * data indexed?). The number return does not represent the count of ArtifactInfos, neither other "meaningful" info, |
| * it is purely to be used for inter-context comparisons only! |
| * |
| * @return |
| * @throws IOException |
| */ |
| int getSize() |
| throws IOException; |
| |
| /** |
| * Acquires a fresh instance of {@link IndexSearcher}. You have to release the received instance with |
| * {@link #releaseIndexSearcher(IndexSearcher)} otherwise you are about to introduce leak. |
| * |
| * @return |
| */ |
| IndexSearcher acquireIndexSearcher() |
| throws IOException; |
| |
| /** |
| * Releases the {@link IndexSearcher} instance. |
| * |
| * @param s |
| */ |
| void releaseIndexSearcher( IndexSearcher s ) |
| throws IOException; |
| |
| /** |
| * Returns the Lucene IndexWriter (thread safe, shared instance) of this context. |
| * |
| * @return indexWriter |
| * @throws IOException |
| */ |
| IndexWriter getIndexWriter() |
| throws IOException; |
| |
| /** |
| * List of IndexCreators used in this context. |
| * |
| * @return list of index creators. |
| */ |
| List<IndexCreator> getIndexCreators(); |
| |
| /** |
| * Returns the Lucene Analyzer of this context used for by IndexWriter and IndexSearcher. Note: this method always |
| * creates a new instance of analyzer! |
| * |
| * @return |
| */ |
| Analyzer getAnalyzer(); |
| |
| /** |
| * Commits changes to context, eventually refreshing readers/searchers too. |
| * |
| * @throws IOException |
| */ |
| void commit() |
| throws IOException; |
| |
| /** |
| * Rolls back changes to context, eventually refreshing readers/searchers too. |
| * |
| * @throws IOException |
| */ |
| void rollback() |
| throws IOException; |
| |
| /** |
| * Optimizes index. According to Lucene 3.6+ Javadoc, there is no more sense to optimize, so this method might |
| * become "noop". |
| */ |
| void optimize() |
| throws IOException; |
| |
| /** |
| * Shuts down this context. |
| */ |
| void close( boolean deleteFiles ) |
| throws IOException; |
| |
| /** |
| * Purge (cleans) the context, deletes/empties the index and restores the context to new/empty state. |
| * |
| * @throws IOException |
| */ |
| void purge() |
| throws IOException; |
| |
| /** |
| * Merges content of given Lucene directory with this context. |
| * |
| * @param directory - the directory to merge |
| */ |
| void merge( Directory directory ) |
| throws IOException; |
| |
| /** |
| * Merges content of given Lucene directory with this context, but filters out the unwanted ones. |
| * |
| * @param directory - the directory to merge |
| */ |
| void merge( Directory directory, DocumentFilter filter ) |
| throws IOException; |
| |
| /** |
| * Replaces the Lucene index with the one from supplied directory. |
| * |
| * @param directory |
| * @throws IOException |
| */ |
| void replace( Directory directory ) |
| throws IOException; |
| |
| void replace( Directory directory, Set<String> allGroups, Set<String> rootGroups ) |
| throws IOException; |
| |
| Directory getIndexDirectory(); |
| |
| File getIndexDirectoryFile(); |
| |
| /** |
| * Returns the GavCalculator for this Context. Implies repository layout. |
| */ |
| GavCalculator getGavCalculator(); |
| |
| /** |
| * Sets all group names stored in the current indexing context |
| */ |
| void setAllGroups( Collection<String> groups ) |
| throws IOException; |
| |
| /** |
| * Gets all group names stored in the current indexing context |
| */ |
| Set<String> getAllGroups() |
| throws IOException; |
| |
| /** |
| * Sets root group names stored in the current indexing context |
| */ |
| void setRootGroups( Collection<String> groups ) |
| throws IOException; |
| |
| /** |
| * Gets root group names stored in the current indexing context |
| */ |
| Set<String> getRootGroups() |
| throws IOException; |
| |
| /** |
| * Rebuilds stored group names from the index |
| */ |
| void rebuildGroups() |
| throws IOException; |
| |
| /** |
| * Returns true if this context is receiving updates from remote via IndexUpdater. |
| * |
| * @return |
| */ |
| boolean isReceivingUpdates(); |
| } |