/*
* Copyright 2014 Orient Technologies.
*
* 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 com.orientechnologies.lucene;
import com.orientechnologies.common.concur.resource.OSharedResourceAdaptiveExternal;
import com.orientechnologies.lucene.manager.OLuceneIndexManagerAbstract;
import com.orientechnologies.orient.core.config.OGlobalConfiguration;
import com.orientechnologies.orient.core.db.record.OIdentifiable;
import com.orientechnologies.orient.core.id.ORID;
import com.orientechnologies.orient.core.index.*;
import com.orientechnologies.orient.core.record.impl.ODocument;
import com.orientechnologies.orient.core.serialization.serializer.stream.OStreamSerializer;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.queryparser.classic.ParseException;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import java.io.IOException;
public class OLuceneIndexEngine<V> extends OSharedResourceAdaptiveExternal implements OIndexEngine<V> {
private final String indexType;
protected OLuceneIndexManagerAbstract lucene;
protected OIndex indexManaged;
private ODocument indexMetadata;
public OLuceneIndexEngine(OLuceneIndexManagerAbstract delegate, String indexType) {
super(OGlobalConfiguration.ENVIRONMENT_CONCURRENT.getValueAsBoolean(), OGlobalConfiguration.MVRBTREE_TIMEOUT
.getValueAsInteger(), true);
this.lucene = delegate;
this.indexType = indexType;
}
@Override
public void init() {
lucene.init();
}
@Override
public void flush() {
lucene.flush();
}
@Override
public void create(OIndexDefinition indexDefinition, String clusterIndexName, OStreamSerializer valueSerializer,
boolean isAutomatic) {
lucene.createIndex(indexDefinition, clusterIndexName, valueSerializer, isAutomatic, indexMetadata);
}
@Override
public void delete() {
lucene.delete();
}
@Override
public void deleteWithoutLoad(String indexName) {
lucene.deleteWithoutLoad(indexName);
}
@Override
public void load(ORID indexRid, String indexName, OIndexDefinition indexDefinition, OStreamSerializer valueSerializer,
boolean isAutomatic) {
lucene.load(indexRid, indexName, indexDefinition, isAutomatic, indexMetadata);
}
@Override
public boolean contains(Object key) {
return lucene.contains(key);
}
@Override
public boolean remove(Object key) {
return lucene.remove(key);
}
public boolean remove(Object key, OIdentifiable value) {
OIdentifiable rid = value;
if (value instanceof ODocument) {
rid = value.getIdentity();
}
return lucene.remove(key, rid);
}
@Override
public ORID getIdentity() {
return lucene.getIdentity();
}
@Override
public void clear() {
lucene.clear();
}
@Override
public void close() {
lucene.close();
}
@Override
public V get(Object key) {
return (V) lucene.get(key);
}
@Override
public void put(Object key, V value) {
lucene.put(key, value);
}
@Override
public Object getFirstKey() {
return lucene.getFirstKey();
}
@Override
public Object getLastKey() {
return lucene.getLastKey();
}
@Override
public OIndexCursor iterateEntriesBetween(Object rangeFrom, boolean fromInclusive, Object rangeTo, boolean toInclusive,
boolean ascSortOrder, ValuesTransformer<V> transformer) {
return lucene.iterateEntriesBetween(rangeFrom, fromInclusive, rangeTo, toInclusive, ascSortOrder, transformer);
}
@Override
public OIndexCursor iterateEntriesMajor(Object fromKey, boolean isInclusive, boolean ascSortOrder,
ValuesTransformer<V> transformer) {
return lucene.iterateEntriesMajor(fromKey, isInclusive, ascSortOrder, transformer);
}
public void commit() {
}
@Override
public OIndexCursor iterateEntriesMinor(Object toKey, boolean isInclusive, boolean ascSortOrder, ValuesTransformer<V> transformer) {
return lucene.iterateEntriesMinor(toKey, isInclusive, ascSortOrder, transformer);
}
@Override
public OIndexCursor cursor(ValuesTransformer<V> valuesTransformer) {
return lucene.cursor(valuesTransformer);
}
@Override
public OIndexCursor descCursor(ValuesTransformer<V> valuesTransformer) {
return null;
}
@Override
public OIndexKeyCursor keyCursor() {
return lucene.keyCursor();
}
@Override
public long size(ValuesTransformer<V> transformer) {
return lucene.size(transformer);
}
@Override
public boolean hasRangeQuerySupport() {
return lucene.hasRangeQuerySupport();
}
@Override
public int getVersion() {
return 1;
}
public void setManagedIndex(OIndex index) {
this.indexManaged = index;
}
public void setIndexMetadata(ODocument indexMetadata) {
this.indexMetadata = indexMetadata;
}
public ODocument getIndexMetadata() {
return indexMetadata;
}
public void setRebuilding(boolean rebuilding) {
lucene.setRebuilding(rebuilding);
}
public IndexSearcher searcher() throws IOException {
return lucene.getSearcher();
}
public void setIndexName(String indexName) {
lucene.setIndexName(indexName);
}
public Document buildDocument(Object key, OIdentifiable value) {
return lucene.buildDocument(key, value);
}
public Query buildQuery(Object query) throws ParseException {
return lucene.buildQuery(query);
}
public Analyzer analyzer(String field) {
return lucene.analyzer(field);
}
}