
com.fnklabs.draenei.analytics.morphology.MorphologyFactory Maven / Gradle / Ivy
package com.fnklabs.draenei.analytics.morphology;
import org.apache.lucene.morphology.Morphology;
import org.jetbrains.annotations.NotNull;
import org.slf4j.LoggerFactory;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.function.BiFunction;
public class MorphologyFactory {
/**
* Default morphology implementation that used when can't retrieve morphology instance by language
*/
protected static final Morphology DEFAULT_MORPHOLOGY = new Morphology() {
@Override
public List getNormalForms(String s) {
return Collections.emptyList();
}
@Override
public List getMorphInfo(String s) {
return Collections.emptyList();
}
};
private static final Map languageMorphology = new HashMap<>();
private MorphologyFactory() {
}
@NotNull
public static Morphology getMorphology(Language language) {
return languageMorphology.compute(language, new RegisterMorphologyDictionary());
}
private static class RegisterMorphologyDictionary implements BiFunction {
@Override
public Morphology apply(Language language, Morphology morphology) {
if (morphology == null) {
try {
Class morphologyClass = (Class) Class.forName(language.getMorphologyClass());
morphology = morphologyClass.newInstance();
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException e) {
LoggerFactory.getLogger(MorphologyFactory.class).warn("Can't retrieve morphology dictionary instance", e);
morphology = DEFAULT_MORPHOLOGY;
}
}
return morphology;
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy