All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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