diff --git a/Spring.iml b/Spring.iml index 9cbbd45..2102528 100644 --- a/Spring.iml +++ b/Spring.iml @@ -3,23 +3,23 @@ - - file://$MODULE_DIR$/src/application-context.xml + + file://$MODULE_DIR$/src/com/main/AppConfiguration.java - + - - - + + + + - - + \ No newline at end of file diff --git a/src/com/lang/LanguageDetector.java b/src/com/lang/LanguageDetector.java index 24feb43..ee863c0 100644 --- a/src/com/lang/LanguageDetector.java +++ b/src/com/lang/LanguageDetector.java @@ -6,6 +6,7 @@ import java.util.List; import java.util.Map; +@Component public class LanguageDetector { private Map> mapping; @@ -21,6 +22,6 @@ public Language detectLanguage(String text) { } private void initMapping() { - mapping = new HashMap>(); + mapping = new HashMap<>(); } } diff --git a/src/com/main/AppConfiguration.java b/src/com/main/AppConfiguration.java index f3e3f0f..e5bacfa 100644 --- a/src/com/main/AppConfiguration.java +++ b/src/com/main/AppConfiguration.java @@ -1,11 +1,36 @@ package com.main; +import com.lang.LanguageDetector; import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Scope; @Configuration +@ComponentScan("com") public class AppConfiguration { - //TODO: Implement me + @Bean + public ResourceLoader resourceLoader() { + return new ResourceLoader(); + } + + @Bean + public LanguageDetector languageDetector() { + return new LanguageDetector(); + } + + @Bean + public TextSource textSource() { + return new TextSource(); + } + + @Bean + public Dictionary dictionary() { + return new Dictionary(); + } + + @Bean + public Translator translator() { + return new Translator(); + } } diff --git a/src/com/main/Dictionary.java b/src/com/main/Dictionary.java index 11890b0..4f2259d 100644 --- a/src/com/main/Dictionary.java +++ b/src/com/main/Dictionary.java @@ -1,22 +1,41 @@ package com.main; import com.lang.Language; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStreamReader; +import java.nio.charset.Charset; import java.util.HashMap; -import java.util.List; import java.util.Map; +import java.util.Properties; +import java.util.stream.Collectors; +@Component public class Dictionary { - private Map> dictionaries = new HashMap>(); + private Map> dictionaries = new HashMap<>(); - public String translate(String word, Language language) { - //TODO: Implement me - return null; + public String translate(String word, Language language) { + String translation = getDictionary(language).get(word.toLowerCase()); + return toCapital(translation, word); } + private String toCapital(String translation, String origin) { + if ((translation == null) + || (origin == null) + || (origin.length() < 1) + || (translation.length() < 1) + || (Character.isLowerCase(origin.charAt(0)))) { + return translation; + } + if (translation.length() == 1) { + return translation.toUpperCase(); + } + return translation.substring(0, 1).toUpperCase() + translation.substring(1); + } + private Map getDictionary(Language language) { Map dictionary = dictionaries.get(language); if (null == dictionary) { @@ -27,7 +46,20 @@ private Map getDictionary(Language language) { } private Map loadDictionary(Language language) { - //TODO: Implement me - return null; +// List dictionary = resourceLoader.load(System.getProperty("user.dir") + "\\dict\\english.dict"); + Properties properties = new Properties(); + String propertyFile = System.getProperty("user.dir") + "\\dict\\" + language.toString().toLowerCase() + ".dict"; + try (InputStreamReader inputStream = new InputStreamReader( + new FileInputStream(propertyFile), Charset.defaultCharset())) { + properties.load(inputStream); + } catch (IOException e) { + e.printStackTrace(); + } + return properties.entrySet() + .stream() + .collect(Collectors.toMap( + entry -> String.valueOf(entry.getKey()), + entry -> String.valueOf(entry.getValue()) + )); } } diff --git a/src/com/main/Main.java b/src/com/main/Main.java index 139a2f1..739469b 100644 --- a/src/com/main/Main.java +++ b/src/com/main/Main.java @@ -3,7 +3,6 @@ import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.AnnotationConfigApplicationContext; -import org.springframework.context.support.FileSystemXmlApplicationContext; public class Main { public static void main(String[] args) throws BeansException { diff --git a/src/com/main/ResourceLoader.java b/src/com/main/ResourceLoader.java index 02a2435..bb880bb 100644 --- a/src/com/main/ResourceLoader.java +++ b/src/com/main/ResourceLoader.java @@ -9,6 +9,7 @@ import java.util.ArrayList; import java.util.List; +@Component public class ResourceLoader { public List load(String source) { @@ -17,6 +18,6 @@ public List load(String source) { } catch (IOException e) { e.printStackTrace(); } - return new ArrayList(); + return new ArrayList<>(); } } diff --git a/src/com/main/TextSource.java b/src/com/main/TextSource.java index 77b4eb7..fc7259d 100644 --- a/src/com/main/TextSource.java +++ b/src/com/main/TextSource.java @@ -1,9 +1,19 @@ package com.main; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.stream.Collectors; + +@Component public class TextSource { - public String getText(String path) { - //TODO: Implement me - return null; + @Autowired + private ResourceLoader resourceLoader; + + public String getText(String path) { + return resourceLoader.load(path) + .stream() + .collect(Collectors.joining(" ")); } -} +} \ No newline at end of file diff --git a/src/com/main/Translator.java b/src/com/main/Translator.java index 48c4dad..fc2f5d3 100644 --- a/src/com/main/Translator.java +++ b/src/com/main/Translator.java @@ -1,14 +1,41 @@ package com.main; +import com.lang.Language; +import com.lang.LanguageDetector; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import javax.annotation.PostConstruct; +import java.util.Arrays; +import java.util.Set; +import java.util.regex.Pattern; +import java.util.stream.Collectors; +@Component public class Translator { - public String translate(String source) { - //TODO: Implement me - return null; - } + @Autowired + private LanguageDetector languageDetector; + + @Autowired + private TextSource textSource; + + @Autowired + private Dictionary dictionary; + public static final Pattern wordSplitPattern = Pattern.compile("[^a-zA-Z]+", Pattern.DOTALL); + + public String translate(String source) { + String text = textSource.getText(source); + Language language = languageDetector.detectLanguage(text); + Set words = Arrays + .stream(wordSplitPattern.split(text)) + .collect(Collectors.toSet()); + for (String word: words) { + String translation = dictionary.translate(word, language); + if (translation != null) { + text = text.replaceAll("\\b" + word + "\\b", translation); + } + } + return text; + } }