package it.cavallium.dbengine.database.indicizer; import it.cavallium.dbengine.database.DatabaseMemoryMode; import it.cavallium.dbengine.database.LLScoreMode; import it.cavallium.dbengine.database.LLSearchResult; import it.cavallium.dbengine.database.LLSort; import it.cavallium.dbengine.database.collections.Joiner; import it.cavallium.dbengine.database.collections.Joiner.ValueGetter; import org.jetbrains.annotations.Nullable; import it.cavallium.dbengine.client.CompositeSnapshot; import reactor.core.publisher.Mono; public class JoinedIndicizerWriter implements LuceneIndicizerWriter { private final LuceneIndicizerWriter indicizerWriter; private final Joiner joiner; private final ValueGetter dbValueGetter; public JoinedIndicizerWriter(LuceneIndicizerWriter indicizerWriter, Joiner joiner, ValueGetter dbValueGetter) { this.indicizerWriter = indicizerWriter; this.joiner = joiner; this.dbValueGetter = dbValueGetter; } @Override public Mono add(KEY key, DBTYPE value) { return joiner .join(dbValueGetter, value) .flatMap(joinedValue -> this.indicizerWriter.add(key, joinedValue)); } @Override public Mono remove(KEY key) { return this.indicizerWriter.remove(key); } @Override public Mono update(KEY key, DBTYPE value) { return joiner .join(dbValueGetter, value) .flatMap(joinedValue -> this.indicizerWriter.update(key, joinedValue)); } @Override public Mono clearIndex() { return this.indicizerWriter.clearIndex(); } @Override public Mono moreLikeThis(@Nullable CompositeSnapshot snapshot, DBTYPE mltDocumentValue, int limit) { return joiner .join(dbValueGetter, mltDocumentValue) .flatMap(val -> this.indicizerWriter.moreLikeThis(snapshot, val, limit)); } @Override public Mono search(@Nullable CompositeSnapshot snapshot, String query, int limit, @Nullable LLSort sort, LLScoreMode scoreMode) { return this.indicizerWriter .search(snapshot, query, limit, sort, scoreMode); } @Override public Mono count(@Nullable CompositeSnapshot snapshot, String query) { return this.indicizerWriter.count(snapshot, query); } @Override public Mono close() { return this.indicizerWriter.close(); } @Override public Mono getKey(String key) { return this.indicizerWriter.getKey(key); } @Override public DatabaseMemoryMode getMemoryMode() { return this.indicizerWriter.getMemoryMode(); } }