From bccc377c0285bd8f6f29a5c53fe891901f215aa8 Mon Sep 17 00:00:00 2001 From: Nikita Babaylov Date: Tue, 4 May 2021 11:11:13 +0400 Subject: [PATCH] Completed --- .../rd/online/repository/FileRepository.java | 7 ++- .../repository/SimpleFileRepository.java | 53 +++++++++++++++++-- .../izh/rd/online/service/RegExpService.java | 7 ++- .../service/SimpleBigNumbersService.java | 17 +++++- .../rd/online/service/SimpleDateService.java | 29 ++++++++-- .../online/service/SimpleRegExpService.java | 37 +++++++++++-- .../rd/online/service/SimpleTextService.java | 30 +++++++++-- .../izh/rd/online/FileRepositoryTest.java | 4 +- .../epam/izh/rd/online/RegExpServiceTest.java | 6 ++- 9 files changed, 161 insertions(+), 29 deletions(-) diff --git a/src/main/java/com/epam/izh/rd/online/repository/FileRepository.java b/src/main/java/com/epam/izh/rd/online/repository/FileRepository.java index 870e645f..74449f4e 100644 --- a/src/main/java/com/epam/izh/rd/online/repository/FileRepository.java +++ b/src/main/java/com/epam/izh/rd/online/repository/FileRepository.java @@ -1,5 +1,8 @@ package com.epam.izh.rd.online.repository; +import java.io.FileNotFoundException; +import java.io.IOException; + public interface FileRepository { @@ -9,8 +12,8 @@ public interface FileRepository { void copyTXTFiles(String from, String to); - boolean createFile(String path, String name); + boolean createFile(String path, String name) throws IOException; - String readFileFromResources(String fileName); + String readFileFromResources(String fileName) throws IOException; } diff --git a/src/main/java/com/epam/izh/rd/online/repository/SimpleFileRepository.java b/src/main/java/com/epam/izh/rd/online/repository/SimpleFileRepository.java index 1783b845..40a91a5b 100644 --- a/src/main/java/com/epam/izh/rd/online/repository/SimpleFileRepository.java +++ b/src/main/java/com/epam/izh/rd/online/repository/SimpleFileRepository.java @@ -1,5 +1,9 @@ package com.epam.izh.rd.online.repository; +import java.io.*; +import java.net.URL; +import java.nio.file.Files; + public class SimpleFileRepository implements FileRepository { /** @@ -10,7 +14,16 @@ public class SimpleFileRepository implements FileRepository { */ @Override public long countFilesInDirectory(String path) { - return 0; + long result = 0; + File dir = new File("src/main/resources/" + path); + File[] arr = dir.listFiles(); + if (dir.isDirectory()) { + for (File file : arr) { + result += countFilesInDirectory(path + "/" + file.getName()); + } + } else + result++; + return result; } /** @@ -21,7 +34,15 @@ public long countFilesInDirectory(String path) { */ @Override public long countDirsInDirectory(String path) { - return 0; + long result = 0; + File dir = new File("src/main/resources/" + path); + if (dir.isDirectory()) { + result++; + for (File file : dir.listFiles()) { + result += countDirsInDirectory(path + "/" + file.getName()); + } + } + return result; } /** @@ -32,7 +53,16 @@ public long countDirsInDirectory(String path) { */ @Override public void copyTXTFiles(String from, String to) { - return; + File dirFrom = new File(from); + File dirTo = new File(to); + if (!dirTo.getParentFile().exists()) { + dirTo.getParentFile().mkdirs(); + } + try { + Files.copy(dirFrom.getAbsoluteFile().toPath(), dirTo.getAbsoluteFile().toPath()); + } catch (IOException e) { + e.printStackTrace(); + } } /** @@ -44,6 +74,17 @@ public void copyTXTFiles(String from, String to) { */ @Override public boolean createFile(String path, String name) { + URL url = getClass().getResource("/"); + File dir = new File(url.getPath() + "/" + path); + if (!dir.exists()) { + dir.mkdir(); + } + File file = new File(dir.getPath() + "/" + name); + try { + return file.createNewFile(); + } catch (IOException e) { + e.printStackTrace(); + } return false; } @@ -54,7 +95,9 @@ public boolean createFile(String path, String name) { * @return контент */ @Override - public String readFileFromResources(String fileName) { - return null; + public String readFileFromResources(String fileName) throws IOException { + BufferedReader reader = new BufferedReader(new FileReader("src/main/resources/" + fileName)); + + return reader.readLine(); } } diff --git a/src/main/java/com/epam/izh/rd/online/service/RegExpService.java b/src/main/java/com/epam/izh/rd/online/service/RegExpService.java index 7decea81..3da4e77d 100644 --- a/src/main/java/com/epam/izh/rd/online/service/RegExpService.java +++ b/src/main/java/com/epam/izh/rd/online/service/RegExpService.java @@ -1,8 +1,11 @@ package com.epam.izh.rd.online.service; +import java.io.FileNotFoundException; +import java.io.IOException; + public interface RegExpService { - String maskSensitiveData(); + String maskSensitiveData() throws IOException; - String replacePlaceholders(double paymentAmount, double balance); + String replacePlaceholders(double paymentAmount, double balance) throws IOException; } diff --git a/src/main/java/com/epam/izh/rd/online/service/SimpleBigNumbersService.java b/src/main/java/com/epam/izh/rd/online/service/SimpleBigNumbersService.java index a94c7bba..f6ac8809 100644 --- a/src/main/java/com/epam/izh/rd/online/service/SimpleBigNumbersService.java +++ b/src/main/java/com/epam/izh/rd/online/service/SimpleBigNumbersService.java @@ -2,6 +2,9 @@ import java.math.BigDecimal; import java.math.BigInteger; +import java.util.Arrays; + +import static java.math.RoundingMode.HALF_UP; public class SimpleBigNumbersService implements BigNumbersService { @@ -13,7 +16,12 @@ public class SimpleBigNumbersService implements BigNumbersService { */ @Override public BigDecimal getPrecisionNumber(int a, int b, int range) { - return null; + BigDecimal result; + BigDecimal ba = new BigDecimal(a); + BigDecimal bb = new BigDecimal(b); + + result = ba.divide(bb, range, HALF_UP); + return result; } /** @@ -24,6 +32,11 @@ public BigDecimal getPrecisionNumber(int a, int b, int range) { */ @Override public BigInteger getPrimaryNumber(int range) { - return null; + BigInteger result = new BigInteger("2"); + for (int i = 0; i < range; i++) { + result = result.nextProbablePrime(); + } + return result; + } } diff --git a/src/main/java/com/epam/izh/rd/online/service/SimpleDateService.java b/src/main/java/com/epam/izh/rd/online/service/SimpleDateService.java index 70d64dfd..ee157b5d 100644 --- a/src/main/java/com/epam/izh/rd/online/service/SimpleDateService.java +++ b/src/main/java/com/epam/izh/rd/online/service/SimpleDateService.java @@ -1,8 +1,11 @@ package com.epam.izh.rd.online.service; +import java.text.SimpleDateFormat; import java.time.LocalDate; import java.time.LocalDateTime; +import java.time.Year; import java.time.format.DateTimeFormatter; +import java.util.Locale; public class SimpleDateService implements DateService { @@ -14,7 +17,8 @@ public class SimpleDateService implements DateService { */ @Override public String parseDate(LocalDate localDate) { - return null; + String result = localDate.format(DateTimeFormatter.ofPattern("dd-MM-yyyy")); + return result; } /** @@ -25,7 +29,9 @@ public String parseDate(LocalDate localDate) { */ @Override public LocalDateTime parseString(String string) { - return null; + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"); + LocalDateTime result = LocalDateTime.parse(string, formatter); + return result; } /** @@ -37,7 +43,8 @@ public LocalDateTime parseString(String string) { */ @Override public String convertToCustomFormat(LocalDate localDate, DateTimeFormatter formatter) { - return null; + String result = localDate.format(formatter); + return result; } /** @@ -47,7 +54,15 @@ public String convertToCustomFormat(LocalDate localDate, DateTimeFormatter forma */ @Override public long getNextLeapYear() { - return 0; + Year ldNow = Year.now(); + String year = ldNow.format(DateTimeFormatter.ofPattern("yyyy")); + Long result = Long.parseLong(year); + while (true) { + if (Year.isLeap(result)) { + return result; + } else + result++; + } } /** @@ -57,7 +72,11 @@ public long getNextLeapYear() { */ @Override public long getSecondsInYear(int year) { - return 0; + Year yea = Year.of(year); + if (yea.isLeap()) { + return (long) 366 * 24 * 3600; + } else + return (long) 365 * 24 * 3600; } diff --git a/src/main/java/com/epam/izh/rd/online/service/SimpleRegExpService.java b/src/main/java/com/epam/izh/rd/online/service/SimpleRegExpService.java index b6eff56b..4a16217e 100644 --- a/src/main/java/com/epam/izh/rd/online/service/SimpleRegExpService.java +++ b/src/main/java/com/epam/izh/rd/online/service/SimpleRegExpService.java @@ -1,5 +1,11 @@ package com.epam.izh.rd.online.service; +import java.io.BufferedReader; +import java.io.FileReader; +import java.io.IOException; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + public class SimpleRegExpService implements RegExpService { /** @@ -10,8 +16,17 @@ public class SimpleRegExpService implements RegExpService { * @return обработанный текст */ @Override - public String maskSensitiveData() { - return null; + public String maskSensitiveData() throws IOException { + BufferedReader reader = new BufferedReader(new FileReader("src/main/resources/sensitive_data.txt")); + String content; + String result = ""; + while ((content = reader.readLine()) != null){ + result += content; + } + Pattern pat = Pattern.compile("(\\s\\d{4}\\s)(\\d{4}\\s)(\\d{4}\\s)(\\d{4}\\s)"); + Matcher match = pat.matcher(result); + result = match.replaceAll("$1**** **** $4"); + return result; } /** @@ -21,7 +36,21 @@ public String maskSensitiveData() { * @return обработанный текст */ @Override - public String replacePlaceholders(double paymentAmount, double balance) { - return null; + public String replacePlaceholders(double paymentAmount, double balance) throws IOException { + BufferedReader reader = new BufferedReader(new FileReader("src/main/resources/sensitive_data.txt")); + String content; + String result = ""; + while ((content = reader.readLine()) != null){ + result += content; + } + Pattern patPay = Pattern.compile("\\W\\{.{14}}"); + Matcher match = patPay.matcher(result); + result = match.replaceAll(String.valueOf((int) paymentAmount)); + + Pattern patBalance = Pattern.compile("\\W\\{.{7}}"); + Matcher matchBalance = patBalance.matcher(result); + result = matchBalance.replaceAll(String.valueOf((int) balance)); + + return result; } } diff --git a/src/main/java/com/epam/izh/rd/online/service/SimpleTextService.java b/src/main/java/com/epam/izh/rd/online/service/SimpleTextService.java index 68951fbe..41ff5088 100644 --- a/src/main/java/com/epam/izh/rd/online/service/SimpleTextService.java +++ b/src/main/java/com/epam/izh/rd/online/service/SimpleTextService.java @@ -13,7 +13,7 @@ public class SimpleTextService implements TextService { */ @Override public String removeString(String base, String remove) { - return null; //TODO + return base.replace(remove, ""); //TODO } /** @@ -24,7 +24,8 @@ public String removeString(String base, String remove) { */ @Override public boolean isQuestionString(String text) { - return false; //TODO + + return text.endsWith("?"); //TODO } /** @@ -35,7 +36,12 @@ public boolean isQuestionString(String text) { */ @Override public String concatenate(String... elements) { - return null; //TODO + String res = ""; + String[] result = elements; + for (String str : result) { + res = res + str; + } + return res; //TODO } /** @@ -47,7 +53,15 @@ public String concatenate(String... elements) { */ @Override public String toJumpCase(String text) { - return null; //TODO + char[] arr = text.toCharArray(); + for (int i = 0; i < arr.length; i++) { + if (i % 2 == 0) { + arr[i] = Character.toLowerCase(arr[i]); + } else + arr[i] = Character.toUpperCase(arr[i]); + } + + return String.valueOf(arr); //TODO } /** @@ -59,6 +73,12 @@ public String toJumpCase(String text) { */ @Override public boolean isPalindrome(String string) { - return false; //TODO + + if (string.equals("")) { + return false; + } + return string.replaceAll("\\s", "") + .equalsIgnoreCase(new StringBuilder(string.replaceAll("\\s", "")) + .reverse().toString()); //TODO } } diff --git a/src/test/java/com/epam/izh/rd/online/FileRepositoryTest.java b/src/test/java/com/epam/izh/rd/online/FileRepositoryTest.java index d581bac2..43e7560c 100644 --- a/src/test/java/com/epam/izh/rd/online/FileRepositoryTest.java +++ b/src/test/java/com/epam/izh/rd/online/FileRepositoryTest.java @@ -73,7 +73,7 @@ void testCopyTXTFiles() { @Test @DisplayName("Тест метода FileRepository.createFile(String path)") - void testCreateFile() { + void testCreateFile() throws IOException { fileRepository.createFile(TEST_DIR_CREATE_PATH, TEST_FILE_TO_CREATE); assertTrue(getFile(TEST_DIR_CREATE_PATH + "/" + TEST_FILE_TO_CREATE).exists()); @@ -81,7 +81,7 @@ void testCreateFile() { @Test @DisplayName("Тест метода FileRepository.readFileFromResources(String fileName)") - void testReadFileFromResources() { + void testReadFileFromResources() throws IOException { assertEquals("Ya-hoo!", fileRepository.readFileFromResources("readme.txt")); } diff --git a/src/test/java/com/epam/izh/rd/online/RegExpServiceTest.java b/src/test/java/com/epam/izh/rd/online/RegExpServiceTest.java index 0dd35e47..f0cfb93c 100644 --- a/src/test/java/com/epam/izh/rd/online/RegExpServiceTest.java +++ b/src/test/java/com/epam/izh/rd/online/RegExpServiceTest.java @@ -6,6 +6,8 @@ import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; +import java.io.IOException; + import static org.junit.jupiter.api.Assertions.assertEquals; public class RegExpServiceTest { @@ -19,7 +21,7 @@ static void setup() { @Test @DisplayName("Тест метода RegExpService.maskSensitiveData()") - void testMaskSensitiveData() { + void testMaskSensitiveData() throws IOException { assertEquals("Вчера вечером со счета номер 4301 **** **** 2140 был совершен перевод на счет 5042 **** ****" + " 2043 в размере ${payment_amount} рублей. На счету осталось ${balance} рублей", regExpService.maskSensitiveData()); @@ -27,7 +29,7 @@ void testMaskSensitiveData() { @Test @DisplayName("Тест метода RegExpService.maskSensitiveData()") - void testGetPrecisionNumber() { + void testGetPrecisionNumber() throws IOException { assertEquals("Вчера вечером со счета номер 4301 0234 2145 2140 был совершен перевод на счет 5042 2012 0532 2043" + " в размере 1 рублей. На счету осталось 2 рублей", regExpService.replacePlaceholders(1, 2));