package com.tinesoft.droidlinguist.server.service; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import javax.annotation.PostConstruct; import javax.servlet.http.HttpServletResponse; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.tinesoft.droidlinguist.server.json.translation.source.SourceItem; import com.tinesoft.droidlinguist.server.json.translation.target.TranslationFile; import com.tinesoft.droidlinguist.server.json.translation.target.TranslationResource; import com.tinesoft.droidlinguist.server.tools.SourceStringsParser; import com.tinesoft.droidlinguist.server.tools.TranslatedStringsBuilder; import com.tinesoft.droidlinguist.server.tools.TranslationMaker; import com.tinesoft.droidlinguist.server.translator.api.common.FakeTranslator; import com.tinesoft.droidlinguist.server.translator.api.common.NoTranslator; import com.tinesoft.droidlinguist.server.translator.api.common.Translator; import com.tinesoft.droidlinguist.server.translator.api.common.TranslatorType; import com.tinesoft.droidlinguist.server.translator.api.google.GoogleTranslator; import com.tinesoft.droidlinguist.server.translator.api.microsoft.MicrosoftTranslator; import com.tinesoft.droidlinguist.server.translator.api.yandex.YandexTranslator; /** * Main service of the app, responsible for parsing source string.xml file, * building translation files... * * @author Tine Kondo * */ @Service public class TranslationService { @Autowired private YandexTranslator yandexTranslator; @Autowired private MicrosoftTranslator microsoftTranslator; @Autowired private GoogleTranslator googleTranslator; @Autowired private FakeTranslator fakeTranslator; @Autowired private NoTranslator noTranslator; @Autowired private SourceStringsParser parser; @Autowired TranslatedStringsBuilder builder; @Autowired private TranslationMaker maker; private final Map<String, Translator> translators = new HashMap<String, Translator>(); @PostConstruct private void init() { translators.put(TranslatorType.YANDEX.getCode(), yandexTranslator); translators.put(TranslatorType.MICROSOFT.getCode(), microsoftTranslator); translators.put(TranslatorType.GOOGLE.getCode(), googleTranslator); translators.put(TranslatorType.NO_TRANSLATOR.getCode(), noTranslator); translators.put(TranslatorType.FAKE_TRANSLATOR.getCode(), fakeTranslator); } public List<SourceItem> parseSourceFile(byte[] stringsXml) { return parser.parse(stringsXml); } public void buildTranslation(TranslationResource translation, HttpServletResponse response) { builder.build(translation, response); } public Map<String, TranslationFile> translate(List<SourceItem> strings, String sourceLang, List<String> targetLangs, String translator) { Map<String, TranslationFile> map = new LinkedHashMap<>(targetLangs.size()); Translator translatorAPI = translators.getOrDefault(translator, noTranslator); for (String targetLang : targetLangs) { // FIXME TKO: find a better to select translator to use? map.put(targetLang, maker.translate(strings, sourceLang, targetLang, translatorAPI)); } return map; } }