InstructionTranslatorsCache.java

/*  This file is part of Openrouteservice.
 *
 *  Openrouteservice is free software; you can redistribute it and/or modify it under the terms of the
 *  GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1
 *  of the License, or (at your option) any later version.

 *  This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
 *  without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 *  See the GNU Lesser General Public License for more details.

 *  You should have received a copy of the GNU Lesser General Public License along with this library;
 *  if not, see <https://www.gnu.org/licenses/>.
 */
package org.heigit.ors.routing.instructions;

import org.heigit.ors.localization.LocalizationManager;

import java.util.HashMap;
import java.util.Map;

public class InstructionTranslatorsCache {
    private final Map<Integer, InstructionTranslator> translators;
    private static InstructionTranslatorsCache mInstance = null;

    private InstructionTranslatorsCache() {
        translators = new HashMap<>();
    }

    public static InstructionTranslatorsCache getInstance() {
        if (null == mInstance) {
            synchronized (InstructionTranslatorsCache.class) {
                mInstance = new InstructionTranslatorsCache();
            }
        }
        return mInstance;
    }

    public InstructionTranslator getTranslator(String langCode) throws Exception {
        int hashCode = langCode.hashCode();
        InstructionTranslator res = translators.get(hashCode);
        if (res == null) {
            synchronized (InstructionTranslatorsCache.class) {
                res = new InstructionTranslator(LocalizationManager.getInstance().getLanguageResources(langCode));
                translators.put(hashCode, res);
            }
        }
        return res;
    }
}