import net.frustratedfunctor.definitions.WordDefinitionService;
import net.frustratedfunctor.translations.WordTranslationService;
+import java.net.URLEncoder;
+import java.nio.charset.StandardCharsets;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+
@Path("/ui")
public class UiResource {
private final WordDefinitionService definitions;
private final WordTranslationService translations;
+ private static final ExecutorService exec = Executors.newVirtualThreadPerTaskExecutor();
+
@Location("pub/index.html")
Template index;
public TemplateInstance getTranslationsDefinitions(
@FormParam("word") String word,
@FormParam("lang") String lang
- ) {
- final var data = new WordTranslationsDefinitions(
- translations.translate(word).translations(),
- definitions.define(word, lang).definitions()
- );
+ ) throws Exception {
+ final var encodedWord = URLEncoder.encode(word, StandardCharsets.UTF_8);
+ final var f1 = exec.submit(() -> translations.translate(encodedWord).translations());
+ final var f2 = exec.submit(() -> definitions.define(encodedWord, lang).definitions());
+ // TODO: Handle error
+ final var data = new WordTranslationsDefinitions(f1.get(), f2.get());
return index.data("translationsDefinitions", data);
}