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;
+ }
}