package org.infinispan.query.indexmanager; import java.util.List; import java.util.concurrent.CompletableFuture; import org.hibernate.search.backend.LuceneWork; import org.hibernate.search.exception.SearchException; import org.hibernate.search.indexes.spi.IndexManager; import org.infinispan.query.backend.KeyTransformationHandler; import org.infinispan.query.impl.ModuleCommandIds; import org.infinispan.util.ByteString; import org.infinispan.util.concurrent.CompletableFutures; /** * Execute a stream operation * * @author gustavonalle * @since 7.0 */ public class IndexUpdateStreamCommand extends AbstractUpdateCommand { public static final byte COMMAND_ID = ModuleCommandIds.UPDATE_INDEX_STREAM; public IndexUpdateStreamCommand(ByteString cacheName) { super(cacheName); } @Override public CompletableFuture<Object> invokeAsync() throws Throwable { if (queryInterceptor.isStopping()) { throw log.cacheIsStoppingNoCommandAllowed(cacheName.toString()); } IndexManager indexManager = searchFactory.getIndexManager(indexName); if (indexManager == null) { throw new SearchException("Unknown index referenced : " + indexName); } List<LuceneWork> luceneWorks = indexManager.getSerializer().toLuceneWorks(this.serializedModel); KeyTransformationHandler handler = queryInterceptor.getKeyTransformationHandler(); LuceneWork workToApply = LuceneWorkConverter.transformKeysToString(luceneWorks.iterator().next(), handler); indexManager.performStreamOperation(workToApply, null, true); return CompletableFutures.completedNull(); } @Override public byte getCommandId() { return COMMAND_ID; } }