Skip to content

Commit

Permalink
Guice binding for SearchSnippet/get (#1279)
Browse files Browse the repository at this point in the history
  • Loading branch information
quantranhong1999 authored Nov 4, 2024
1 parent 18167ae commit df3925b
Show file tree
Hide file tree
Showing 2 changed files with 86 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -14,17 +14,25 @@
import org.apache.james.ExtraProperties;
import org.apache.james.GuiceJamesServer;
import org.apache.james.JamesServerMain;
import org.apache.james.OpenSearchHighlightModule;
import org.apache.james.SearchConfiguration;
import org.apache.james.backends.redis.RedisHealthCheck;
import org.apache.james.core.healthcheck.HealthCheck;
import org.apache.james.events.RabbitMQEventBus;
import org.apache.james.eventsourcing.eventstore.EventNestedTypes;
import org.apache.james.jmap.InjectionKeys;
import org.apache.james.jmap.JMAPListenerModule;
import org.apache.james.jmap.method.Method;
import org.apache.james.jmap.method.SearchSnippetGetMethod;
import org.apache.james.json.DTO;
import org.apache.james.json.DTOModule;
import org.apache.james.mailbox.MailboxManager;
import org.apache.james.mailbox.MailboxSession;
import org.apache.james.mailbox.cassandra.CassandraMailboxManager;
import org.apache.james.mailbox.model.MessageId;
import org.apache.james.mailbox.model.MultimailboxesSearchQuery;
import org.apache.james.mailbox.searchhighligt.SearchHighlighter;
import org.apache.james.mailbox.searchhighligt.SearchSnippet;
import org.apache.james.mailbox.store.search.ListeningMessageSearchIndex;
import org.apache.james.mailbox.store.search.MessageSearchIndex;
import org.apache.james.mailbox.store.search.SimpleMessageSearchIndex;
Expand Down Expand Up @@ -100,6 +108,7 @@
import org.apache.james.utils.InitializationOperation;
import org.apache.james.utils.InitilizationOperationBuilder;
import org.apache.james.vault.VaultConfiguration;
import org.reactivestreams.Publisher;

import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
Expand Down Expand Up @@ -174,6 +183,8 @@
import com.linagora.tmail.webadmin.archival.InboxArchivalTaskModule;
import com.linagora.tmail.webadmin.cleanup.MailboxesCleanupModule;

import reactor.core.publisher.Mono;

public class DistributedServer {
private static class ScanningQuotaSearchModule extends AbstractModule {
@Override
Expand All @@ -192,6 +203,13 @@ protected void configure() {
}
}

public static final Module JMAP_DISTRIBUTED_METHOD_SUPPORTED_MODULE = new AbstractModule() {
@Override
protected void configure() {
Multibinder.newSetBinder(binder(), Method.class).addBinding().to(SearchSnippetGetMethod.class);
}
};

public static final Module WEBADMIN = Modules.combine(
new CassandraRoutesModule(),
new DataRoutesModules(),
Expand Down Expand Up @@ -242,7 +260,8 @@ protected void configure() {
new WebFingerModule(),
new LabelMethodModule(),
new JmapSettingsMethodModule(),
new ContactSupportCapabilitiesModule())
new ContactSupportCapabilitiesModule(),
JMAP_DISTRIBUTED_METHOD_SUPPORTED_MODULE)
.with(new CassandraTicketStoreModule(), new TeamMailboxJmapModule());

public static final Module PROTOCOLS = Modules.combine(
Expand Down Expand Up @@ -361,22 +380,40 @@ public static List<Module> chooseModules(SearchConfiguration searchConfiguration
new OSContactAutoCompleteModule(),
new OpenSearchClientModule(),
new OpenSearchMailboxModule(),
new ReIndexingModule());
new ReIndexingModule(),
new OpenSearchHighlightModule());
case Scanning:
return ImmutableList.of(
new DisabledEmailAddressContactSearchEngineModule(),
new ScanningQuotaSearchModule(),
new ScanningSearchModule());
new ScanningSearchModule(),
new FakeSearchHighlightModule());
case OpenSearchDisabled:
return ImmutableList.of(
new DisabledEmailAddressContactSearchEngineModule(),
new OpenSearchDisabledModule(),
new ScanningQuotaSearchModule());
new ScanningQuotaSearchModule(),
new FakeSearchHighlightModule());
default:
throw new RuntimeException("Unsupported search implementation " + searchConfiguration.getImplementation());
}
}

private static class FakeSearchHighlighter implements SearchHighlighter {

@Override
public Publisher<SearchSnippet> highlightSearch(List<MessageId> messageIds, MultimailboxesSearchQuery expression, MailboxSession session) {
return Mono.error(new NotImplementedException("not implemented"));
}
}

private static class FakeSearchHighlightModule extends AbstractModule {
@Override
protected void configure() {
bind(SearchHighlighter.class).toInstance(new FakeSearchHighlighter());
}
}

private static Module chooseJmapModule(DistributedJamesConfiguration configuration) {
if (configuration.jmapEnabled()) {
return new JMAPListenerModule();
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package com.linagora.tmail.james;

import org.apache.james.JamesServerBuilder;
import org.apache.james.JamesServerExtension;
import org.apache.james.backends.redis.RedisExtension;
import org.apache.james.jmap.rfc8621.contract.SearchSnippetGetMethodContract;
import org.apache.james.jmap.rfc8621.contract.probe.DelegationProbeModule;
import org.apache.james.modules.AwsS3BlobStoreExtension;
import org.junit.jupiter.api.extension.RegisterExtension;

import com.linagora.tmail.blob.guice.BlobStoreConfiguration;
import com.linagora.tmail.james.app.CassandraExtension;
import com.linagora.tmail.james.app.DistributedJamesConfiguration;
import com.linagora.tmail.james.app.DistributedServer;
import com.linagora.tmail.james.app.DockerOpenSearchExtension;
import com.linagora.tmail.james.app.EventBusKeysChoice;
import com.linagora.tmail.james.app.RabbitMQExtension;
import com.linagora.tmail.james.jmap.firebase.FirebaseModuleChooserConfiguration;
import com.linagora.tmail.module.LinagoraTestJMAPServerModule;

public class DistributedSearchSnippetGetMethodTest implements SearchSnippetGetMethodContract {
@RegisterExtension
static JamesServerExtension testExtension = new JamesServerBuilder<DistributedJamesConfiguration>(tmpDir ->
DistributedJamesConfiguration.builder()
.workingDirectory(tmpDir)
.configurationFromClasspath()
.blobStore(BlobStoreConfiguration.builder()
.disableCache()
.deduplication()
.noCryptoConfig()
.disableSingleSave()
.noSecondaryS3BlobStore())
.eventBusKeysChoice(EventBusKeysChoice.REDIS)
.firebaseModuleChooserConfiguration(FirebaseModuleChooserConfiguration.DISABLED)
.build())
.extension(new DockerOpenSearchExtension())
.extension(new CassandraExtension())
.extension(new RabbitMQExtension())
.extension(new RedisExtension())
.extension(new AwsS3BlobStoreExtension())
.server(configuration -> DistributedServer.createServer(configuration)
.overrideWith(new LinagoraTestJMAPServerModule())
.overrideWith(new DelegationProbeModule()))
.build();
}

0 comments on commit df3925b

Please sign in to comment.