--- /dev/null
+package net.frustratedfunctor.definitions;
+
+import io.quarkus.logging.Log;
+import jakarta.enterprise.context.ApplicationScoped;
+import org.jsoup.Jsoup;
+import org.jsoup.nodes.Element;
+
+import java.net.URI;
+import java.util.ArrayList;
+import java.util.List;
+
+@ApplicationScoped
+public class GermanWordDefinitionRepository implements WordDefinitionRepository {
+ @Override
+ public List<String> definitionsForWord(String word) {
+ try {
+ final var larousseUrl = URI.create("https://www.duden.de/rechtschreibung/" + word).toURL();
+ final var doc = Jsoup.parse(larousseUrl, 10_000);
+ return doc
+ .select("#bedeutungen .enumeration__text")
+ .stream()
+ .map(Element::ownText)
+ .toList();
+ } catch (Exception e) {
+ Log.error("Error while fetching word definitions", e);
+ return new ArrayList<>();
+ }
+ }
+}
@ApplicationScoped
public class LanguageAwareDefinitionsRepository implements WordDefinitionRepository {
private final FrenchWordDefinitionRepository french;
+ private final GermanWordDefinitionRepository german;
- public LanguageAwareDefinitionsRepository(FrenchWordDefinitionRepository french) {
+ public LanguageAwareDefinitionsRepository(FrenchWordDefinitionRepository french, GermanWordDefinitionRepository german) {
this.french = french;
+ this.german = german;
}
@Override
public List<String> definitionsForWord(String word, String lang) {
return switch (Lang.parseOrDefault(lang)) {
case French -> french.definitionsForWord(word);
- case German -> List.of("OOPS! NOT IMPLEMENTED");
+ case German -> german.definitionsForWord(word);
};
}
}