Skip to content

Commit df3925b

Browse files
Guice binding for SearchSnippet/get (#1279)
1 parent 18167ae commit df3925b

File tree

2 files changed

+86
-4
lines changed

2 files changed

+86
-4
lines changed

tmail-backend/apps/distributed/src/main/java/com/linagora/tmail/james/app/DistributedServer.java

Lines changed: 41 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,17 +14,25 @@
1414
import org.apache.james.ExtraProperties;
1515
import org.apache.james.GuiceJamesServer;
1616
import org.apache.james.JamesServerMain;
17+
import org.apache.james.OpenSearchHighlightModule;
1718
import org.apache.james.SearchConfiguration;
1819
import org.apache.james.backends.redis.RedisHealthCheck;
1920
import org.apache.james.core.healthcheck.HealthCheck;
2021
import org.apache.james.events.RabbitMQEventBus;
2122
import org.apache.james.eventsourcing.eventstore.EventNestedTypes;
2223
import org.apache.james.jmap.InjectionKeys;
2324
import org.apache.james.jmap.JMAPListenerModule;
25+
import org.apache.james.jmap.method.Method;
26+
import org.apache.james.jmap.method.SearchSnippetGetMethod;
2427
import org.apache.james.json.DTO;
2528
import org.apache.james.json.DTOModule;
2629
import org.apache.james.mailbox.MailboxManager;
30+
import org.apache.james.mailbox.MailboxSession;
2731
import org.apache.james.mailbox.cassandra.CassandraMailboxManager;
32+
import org.apache.james.mailbox.model.MessageId;
33+
import org.apache.james.mailbox.model.MultimailboxesSearchQuery;
34+
import org.apache.james.mailbox.searchhighligt.SearchHighlighter;
35+
import org.apache.james.mailbox.searchhighligt.SearchSnippet;
2836
import org.apache.james.mailbox.store.search.ListeningMessageSearchIndex;
2937
import org.apache.james.mailbox.store.search.MessageSearchIndex;
3038
import org.apache.james.mailbox.store.search.SimpleMessageSearchIndex;
@@ -100,6 +108,7 @@
100108
import org.apache.james.utils.InitializationOperation;
101109
import org.apache.james.utils.InitilizationOperationBuilder;
102110
import org.apache.james.vault.VaultConfiguration;
111+
import org.reactivestreams.Publisher;
103112

104113
import com.google.common.collect.ImmutableList;
105114
import com.google.common.collect.ImmutableSet;
@@ -174,6 +183,8 @@
174183
import com.linagora.tmail.webadmin.archival.InboxArchivalTaskModule;
175184
import com.linagora.tmail.webadmin.cleanup.MailboxesCleanupModule;
176185

186+
import reactor.core.publisher.Mono;
187+
177188
public class DistributedServer {
178189
private static class ScanningQuotaSearchModule extends AbstractModule {
179190
@Override
@@ -192,6 +203,13 @@ protected void configure() {
192203
}
193204
}
194205

206+
public static final Module JMAP_DISTRIBUTED_METHOD_SUPPORTED_MODULE = new AbstractModule() {
207+
@Override
208+
protected void configure() {
209+
Multibinder.newSetBinder(binder(), Method.class).addBinding().to(SearchSnippetGetMethod.class);
210+
}
211+
};
212+
195213
public static final Module WEBADMIN = Modules.combine(
196214
new CassandraRoutesModule(),
197215
new DataRoutesModules(),
@@ -242,7 +260,8 @@ protected void configure() {
242260
new WebFingerModule(),
243261
new LabelMethodModule(),
244262
new JmapSettingsMethodModule(),
245-
new ContactSupportCapabilitiesModule())
263+
new ContactSupportCapabilitiesModule(),
264+
JMAP_DISTRIBUTED_METHOD_SUPPORTED_MODULE)
246265
.with(new CassandraTicketStoreModule(), new TeamMailboxJmapModule());
247266

248267
public static final Module PROTOCOLS = Modules.combine(
@@ -361,22 +380,40 @@ public static List<Module> chooseModules(SearchConfiguration searchConfiguration
361380
new OSContactAutoCompleteModule(),
362381
new OpenSearchClientModule(),
363382
new OpenSearchMailboxModule(),
364-
new ReIndexingModule());
383+
new ReIndexingModule(),
384+
new OpenSearchHighlightModule());
365385
case Scanning:
366386
return ImmutableList.of(
367387
new DisabledEmailAddressContactSearchEngineModule(),
368388
new ScanningQuotaSearchModule(),
369-
new ScanningSearchModule());
389+
new ScanningSearchModule(),
390+
new FakeSearchHighlightModule());
370391
case OpenSearchDisabled:
371392
return ImmutableList.of(
372393
new DisabledEmailAddressContactSearchEngineModule(),
373394
new OpenSearchDisabledModule(),
374-
new ScanningQuotaSearchModule());
395+
new ScanningQuotaSearchModule(),
396+
new FakeSearchHighlightModule());
375397
default:
376398
throw new RuntimeException("Unsupported search implementation " + searchConfiguration.getImplementation());
377399
}
378400
}
379401

402+
private static class FakeSearchHighlighter implements SearchHighlighter {
403+
404+
@Override
405+
public Publisher<SearchSnippet> highlightSearch(List<MessageId> messageIds, MultimailboxesSearchQuery expression, MailboxSession session) {
406+
return Mono.error(new NotImplementedException("not implemented"));
407+
}
408+
}
409+
410+
private static class FakeSearchHighlightModule extends AbstractModule {
411+
@Override
412+
protected void configure() {
413+
bind(SearchHighlighter.class).toInstance(new FakeSearchHighlighter());
414+
}
415+
}
416+
380417
private static Module chooseJmapModule(DistributedJamesConfiguration configuration) {
381418
if (configuration.jmapEnabled()) {
382419
return new JMAPListenerModule();
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package com.linagora.tmail.james;
2+
3+
import org.apache.james.JamesServerBuilder;
4+
import org.apache.james.JamesServerExtension;
5+
import org.apache.james.backends.redis.RedisExtension;
6+
import org.apache.james.jmap.rfc8621.contract.SearchSnippetGetMethodContract;
7+
import org.apache.james.jmap.rfc8621.contract.probe.DelegationProbeModule;
8+
import org.apache.james.modules.AwsS3BlobStoreExtension;
9+
import org.junit.jupiter.api.extension.RegisterExtension;
10+
11+
import com.linagora.tmail.blob.guice.BlobStoreConfiguration;
12+
import com.linagora.tmail.james.app.CassandraExtension;
13+
import com.linagora.tmail.james.app.DistributedJamesConfiguration;
14+
import com.linagora.tmail.james.app.DistributedServer;
15+
import com.linagora.tmail.james.app.DockerOpenSearchExtension;
16+
import com.linagora.tmail.james.app.EventBusKeysChoice;
17+
import com.linagora.tmail.james.app.RabbitMQExtension;
18+
import com.linagora.tmail.james.jmap.firebase.FirebaseModuleChooserConfiguration;
19+
import com.linagora.tmail.module.LinagoraTestJMAPServerModule;
20+
21+
public class DistributedSearchSnippetGetMethodTest implements SearchSnippetGetMethodContract {
22+
@RegisterExtension
23+
static JamesServerExtension testExtension = new JamesServerBuilder<DistributedJamesConfiguration>(tmpDir ->
24+
DistributedJamesConfiguration.builder()
25+
.workingDirectory(tmpDir)
26+
.configurationFromClasspath()
27+
.blobStore(BlobStoreConfiguration.builder()
28+
.disableCache()
29+
.deduplication()
30+
.noCryptoConfig()
31+
.disableSingleSave()
32+
.noSecondaryS3BlobStore())
33+
.eventBusKeysChoice(EventBusKeysChoice.REDIS)
34+
.firebaseModuleChooserConfiguration(FirebaseModuleChooserConfiguration.DISABLED)
35+
.build())
36+
.extension(new DockerOpenSearchExtension())
37+
.extension(new CassandraExtension())
38+
.extension(new RabbitMQExtension())
39+
.extension(new RedisExtension())
40+
.extension(new AwsS3BlobStoreExtension())
41+
.server(configuration -> DistributedServer.createServer(configuration)
42+
.overrideWith(new LinagoraTestJMAPServerModule())
43+
.overrideWith(new DelegationProbeModule()))
44+
.build();
45+
}

0 commit comments

Comments
 (0)