From 2d8a0c3116c90dd87fac5b38d1f3dcfe44c287c6 Mon Sep 17 00:00:00 2001 From: Anastasiya Svetlova Date: Mon, 21 Jun 2021 04:34:51 +0400 Subject: [PATCH 1/2] done for 25 of 27 --- .../repository/SimpleFileRepository.java | 60 ++++++++++++++-- .../service/SimpleBigNumbersService.java | 13 +++- .../rd/online/service/SimpleDateService.java | 28 ++++++-- .../online/service/SimpleRegExpService.java | 68 ++++++++++++++++++- .../rd/online/service/SimpleTextService.java | 42 ++++++++++-- .../izh/rd/online/FileRepositoryTest.java | 4 +- 6 files changed, 195 insertions(+), 20 deletions(-) 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..73ddd534 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,15 @@ package com.epam.izh.rd.online.repository; +import java.io.File; +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.nio.file.StandardCopyOption; +import java.util.Objects; +import java.util.stream.Stream; + public class SimpleFileRepository implements FileRepository { /** @@ -8,9 +18,23 @@ public class SimpleFileRepository implements FileRepository { * @param path путь до директори * @return файлов, в том числе скрытых */ + long count = 0; + @Override public long countFilesInDirectory(String path) { - return 0; + + File file = new File(path); + File[] files = file.listFiles(); + if (files == null) return count; + for (File f : files) { + if (f.isFile()) { + count++; + } + if (f.isDirectory()) { + countFilesInDirectory(f.getAbsolutePath()); + } + } + return count; } /** @@ -19,9 +43,21 @@ public long countFilesInDirectory(String path) { * @param path путь до директории * @return число папок */ + long count1 = 1; + @Override public long countDirsInDirectory(String path) { - return 0; + + File file = new File(path); + File[] files = file.listFiles(); + if (files == null) return count1; + for (File dirs : files) { + if (dirs.isDirectory()) { + count1++; + countDirsInDirectory(dirs.getAbsolutePath()); + } + } + return count1; } /** @@ -32,7 +68,7 @@ public long countDirsInDirectory(String path) { */ @Override public void copyTXTFiles(String from, String to) { - return; + } /** @@ -44,7 +80,14 @@ public void copyTXTFiles(String from, String to) { */ @Override public boolean createFile(String path, String name) { - return false; + + File file = new File(path, name); + try { + file.createNewFile(); + } catch (IOException e) { + e.printStackTrace(); + } + return true; } /** @@ -55,6 +98,13 @@ public boolean createFile(String path, String name) { */ @Override public String readFileFromResources(String fileName) { - return null; + + String text = null; + try { + text = new String(Files.readAllBytes(Paths.get("src//main//resources//"+fileName)), StandardCharsets.UTF_8); + } catch (IOException e) { + e.printStackTrace(); + } + return text; } } 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..edd173f5 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,7 @@ import java.math.BigDecimal; import java.math.BigInteger; +import java.math.RoundingMode; public class SimpleBigNumbersService implements BigNumbersService { @@ -13,7 +14,8 @@ public class SimpleBigNumbersService implements BigNumbersService { */ @Override public BigDecimal getPrecisionNumber(int a, int b, int range) { - return null; + + return (new BigDecimal(a).divide((new BigDecimal(b)), range, RoundingMode.HALF_UP)); } /** @@ -24,6 +26,13 @@ public BigDecimal getPrecisionNumber(int a, int b, int range) { */ @Override public BigInteger getPrimaryNumber(int range) { - return null; + + int count = 0; + BigInteger primaryNumber = BigInteger.valueOf(2); + while (count != range) { + primaryNumber = primaryNumber.nextProbablePrime(); + count++; + } + return primaryNumber; } } 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..6c54f6ea 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,12 @@ package com.epam.izh.rd.online.service; +import javax.swing.text.DateFormatter; +import java.text.DateFormat; +import java.text.SimpleDateFormat; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; +import java.util.Date; public class SimpleDateService implements DateService { @@ -14,7 +18,10 @@ public class SimpleDateService implements DateService { */ @Override public String parseDate(LocalDate localDate) { - return null; + + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-MM-yyyy"); + String formatDate = localDate.format(formatter); + return formatDate; } /** @@ -25,7 +32,10 @@ public String parseDate(LocalDate localDate) { */ @Override public LocalDateTime parseString(String string) { - return null; + + DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"); + LocalDateTime resultDateTime = LocalDateTime.parse(string, dateTimeFormatter); + return resultDateTime; } /** @@ -37,7 +47,8 @@ public LocalDateTime parseString(String string) { */ @Override public String convertToCustomFormat(LocalDate localDate, DateTimeFormatter formatter) { - return null; + + return localDate.format(formatter); } /** @@ -47,7 +58,13 @@ public String convertToCustomFormat(LocalDate localDate, DateTimeFormatter forma */ @Override public long getNextLeapYear() { - return 0; + + LocalDate localDate = LocalDate.now(); + long year = localDate.getYear(); + while (year % 4 != 0) { + year = year + 1; + } + return year; } /** @@ -57,7 +74,8 @@ public long getNextLeapYear() { */ @Override public long getSecondsInYear(int year) { - return 0; + + return (LocalDate.of(year, 1, 1).lengthOfYear()) * 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..2d4b484d 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,9 @@ package com.epam.izh.rd.online.service; +import java.io.*; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + public class SimpleRegExpService implements RegExpService { /** @@ -11,7 +15,42 @@ public class SimpleRegExpService implements RegExpService { */ @Override public String maskSensitiveData() { - return null; + + final String regex = "(?<=(?:[^\\d]|^))(\\d{4}[ \\t])(?:\\d{4}[ \\t]){2}(\\d{4})(?=(?:[^\\d]|$))"; + final String subst = "$1**** **** $2"; + final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE); + + StringBuilder stringBuilder = new StringBuilder(); + String result = new String(); + + try (FileReader reader = new FileReader("src/main/resources/sensitive_data.txt")){ + + int c; + while ((c = reader.read())!= -1 ) { + if (c != '\n') { + stringBuilder.append((char) c); + } + } + Matcher matcher = pattern.matcher(stringBuilder); + while (matcher.find()) { + char[] strCharMass = stringBuilder.substring(matcher.start(), matcher.end()).toCharArray(); + char[] strEncrypted = new char[strCharMass.length]; + for (int i = 0; i < strCharMass.length; i++) { + if (i > 4 && i < 14 && strCharMass[i] != ' ') { + strEncrypted[i] = (char) 42; + } else { + strEncrypted[i] = strCharMass[i]; + } + } + } + result = matcher.replaceAll(subst); + + } catch (FileNotFoundException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + return result; } /** @@ -22,6 +61,33 @@ public String maskSensitiveData() { */ @Override public String replacePlaceholders(double paymentAmount, double balance) { + + try (FileReader reader = new FileReader("src/main/resources/sensitive_data.txt")) { + + String regexPayment = "[$]{1}[{]{1}[a-z]{7}[_]{1}[a-z]{6}[}]{1}"; + String regexBalance = "[$]{1}[{]{1}[a-z]{7}[}]{1}"; + + StringBuilder stringBuilder = new StringBuilder(); + Pattern pattern = Pattern.compile(regexPayment); + Pattern pattern1 = Pattern.compile(regexBalance); + + int c; + while((c = reader.read()) != -1) { + if (c != '\n') { + stringBuilder.append((char) c); + } + } + Matcher matcher = pattern.matcher(stringBuilder); + String result = matcher.replaceAll(Integer.toString((int) paymentAmount)); + Matcher matcher1 = pattern1.matcher(result); + String result1 = matcher1.replaceAll(Integer.toString((int) balance)); + return result1; + + } catch (FileNotFoundException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } return null; } } 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..3b5063c8 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,8 @@ public class SimpleTextService implements TextService { */ @Override public String removeString(String base, String remove) { - return null; //TODO + + return base.replace(remove, ""); } /** @@ -24,7 +25,8 @@ public String removeString(String base, String remove) { */ @Override public boolean isQuestionString(String text) { - return false; //TODO + + return text.endsWith("?"); } /** @@ -35,7 +37,14 @@ public boolean isQuestionString(String text) { */ @Override public String concatenate(String... elements) { - return null; //TODO + + StringBuilder stringBuilder = new StringBuilder(); + for (int i = 0; i < elements.length; i++) { + + stringBuilder.append(elements[i]); + } + + return stringBuilder.toString(); } /** @@ -47,7 +56,17 @@ public String concatenate(String... elements) { */ @Override public String toJumpCase(String text) { - return null; //TODO + + char[] textToChar = text.toCharArray(); + StringBuilder stringBuilder = new StringBuilder(); + for (int i = 0; i < textToChar.length; i++) { + if (i % 2 == 0) { + textToChar[i] = Character.toLowerCase(textToChar[i]); + } else { + textToChar[i] = Character.toUpperCase(textToChar[i]); + } + } + return stringBuilder.append(textToChar).toString(); } /** @@ -59,6 +78,19 @@ public String toJumpCase(String text) { */ @Override public boolean isPalindrome(String string) { - return false; //TODO + + if (string == null) { + return false; + } + int i = 0; + int j = string.length() - 1; + while (i < j) { + if (string.charAt(i++) != string.charAt(j--)) { + return false; + } else { + return true; + } + } + return false; } } 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..2e41e7ef 100644 --- a/src/test/java/com/epam/izh/rd/online/FileRepositoryTest.java +++ b/src/test/java/com/epam/izh/rd/online/FileRepositoryTest.java @@ -20,8 +20,8 @@ public class FileRepositoryTest { - private static final String TEST_DIR_COUNT_PATH = "testDirCountFiles"; - private static final String TEST_DIR_CREATE_PATH = "testDirCreateFile"; + private static final String TEST_DIR_COUNT_PATH = "src/main/resources/testDirCountFiles"; + private static final String TEST_DIR_CREATE_PATH = "testDirCreateFile1"; private static final String TEST_FILE_TO_CREATE = "newFile.txt"; private static final String SOURCE_FILE = "fileRepository/source/TestFileToCopy.txt"; private static final String COPY_FILE = "fileRepository/copy/TestFileToCopy.txt"; From 3854a6780d1e9952d59f8671479bc83ad738ab6d Mon Sep 17 00:00:00 2001 From: Anastasiya Svetlova Date: Mon, 21 Jun 2021 04:41:26 +0400 Subject: [PATCH 2/2] cleared of comments --- .../repository/SimpleFileRepository.java | 20 +---------- .../service/SimpleBigNumbersService.java | 12 ------- .../rd/online/service/SimpleDateService.java | 33 ----------------- .../online/service/SimpleRegExpService.java | 13 ------- .../rd/online/service/SimpleTextService.java | 35 ------------------- 5 files changed, 1 insertion(+), 112 deletions(-) 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 73ddd534..be2950d2 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 @@ -12,12 +12,6 @@ public class SimpleFileRepository implements FileRepository { - /** - * Метод рекурсивно подсчитывает количество файлов в директории - * - * @param path путь до директори - * @return файлов, в том числе скрытых - */ long count = 0; @Override @@ -37,13 +31,7 @@ public long countFilesInDirectory(String path) { return count; } - /** - * Метод рекурсивно подсчитывает количество папок в директории, считая корень - * - * @param path путь до директории - * @return число папок - */ - long count1 = 1; + long count1 = 1; @Override public long countDirsInDirectory(String path) { @@ -90,12 +78,6 @@ public boolean createFile(String path, String name) { return true; } - /** - * Метод считывает тело файла .txt из папки src/main/resources - * - * @param fileName имя файла - * @return контент - */ @Override public String readFileFromResources(String fileName) { 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 edd173f5..1fbd5b56 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 @@ -6,24 +6,12 @@ public class SimpleBigNumbersService implements BigNumbersService { - /** - * Метод делит первое число на второе с заданной точностью - * Например 1/3 с точностью 2 = 0.33 - * @param range точность - * @return результат - */ @Override public BigDecimal getPrecisionNumber(int a, int b, int range) { return (new BigDecimal(a).divide((new BigDecimal(b)), range, RoundingMode.HALF_UP)); } - /** - * Метод находит простое число по номеру - * - * @param range номер числа, считая с числа 2 - * @return простое число - */ @Override public BigInteger getPrimaryNumber(int range) { 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 6c54f6ea..3b7a41dd 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,21 +1,11 @@ package com.epam.izh.rd.online.service; -import javax.swing.text.DateFormatter; -import java.text.DateFormat; -import java.text.SimpleDateFormat; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; -import java.util.Date; public class SimpleDateService implements DateService { - /** - * Метод парсит дату в строку - * - * @param localDate дата - * @return строка с форматом день-месяц-год(01-01-1970) - */ @Override public String parseDate(LocalDate localDate) { @@ -24,12 +14,6 @@ public String parseDate(LocalDate localDate) { return formatDate; } - /** - * Метод парсит строку в дату - * - * @param string строка в формате год-месяц-день часы:минуты (1970-01-01 00:00) - * @return дата и время - */ @Override public LocalDateTime parseString(String string) { @@ -38,24 +22,12 @@ public LocalDateTime parseString(String string) { return resultDateTime; } - /** - * Метод конвертирует дату в строку с заданным форматом - * - * @param localDate исходная дата - * @param formatter формат даты - * @return полученная строка - */ @Override public String convertToCustomFormat(LocalDate localDate, DateTimeFormatter formatter) { return localDate.format(formatter); } - /** - * Метод получает следующий високосный год - * - * @return високосный год - */ @Override public long getNextLeapYear() { @@ -67,11 +39,6 @@ public long getNextLeapYear() { return year; } - /** - * Метод считает число секунд в заданном году - * - * @return число секунд - */ @Override public long getSecondsInYear(int year) { 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 2d4b484d..56f78e93 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 @@ -6,13 +6,6 @@ public class SimpleRegExpService implements RegExpService { - /** - * Метод должен читать файл sensitive_data.txt (из директории resources) и маскировать в нем конфиденциальную информацию. - * Номер счета должен содержать только первые 4 и последние 4 цифры (1234 **** **** 5678). Метод должен содержать регулярное - * выражение для поиска счета. - * - * @return обработанный текст - */ @Override public String maskSensitiveData() { @@ -53,12 +46,6 @@ public String maskSensitiveData() { return result; } - /** - * Метод должен считыввать файл sensitive_data.txt (из директории resources) и заменять плейсхолдер ${payment_amount} и ${balance} на заданные числа. Метод должен - * содержать регулярное выражение для поиска плейсхолдеров - * - * @return обработанный текст - */ @Override public String replacePlaceholders(double paymentAmount, double balance) { 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 3b5063c8..245adaf6 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 @@ -2,39 +2,18 @@ public class SimpleTextService implements TextService { - /** - * Реализовать функционал удаления строки из другой строки. - * - * Например для базовой строки "Hello, hello, hello, how low?" и строки для удаления ", he" - * метод вернет "Hellollollo, how low?" - * - * @param base - базовая строка с текстом - * @param remove - строка которую необходимо удалить - */ @Override public String removeString(String base, String remove) { return base.replace(remove, ""); } - /** - * Реализовать функционал проверки на то, что строка заканчивается знаком вопроса. - * - * Например для строки "Hello, hello, hello, how low?" метод вернет true - * Например для строки "Hello, hello, hello!" метод вернет false - */ @Override public boolean isQuestionString(String text) { return text.endsWith("?"); } - /** - * Реализовать функционал соединения переданных строк. - * - * Например для параметров {"Smells", " ", "Like", " ", "Teen", " ", "Spirit"} - * метод вернет "Smells Like Teen Spirit" - */ @Override public String concatenate(String... elements) { @@ -47,13 +26,6 @@ public String concatenate(String... elements) { return stringBuilder.toString(); } - /** - * Реализовать функционал изменения регистра в вид лесенки. - * Возвращаемый текст должен начинаться с прописного регистра. - * - * Например для строки "Load Up On Guns And Bring Your Friends" - * метод вернет "lOaD Up oN GuNs aNd bRiNg yOuR FrIeNdS". - */ @Override public String toJumpCase(String text) { @@ -69,13 +41,6 @@ public String toJumpCase(String text) { return stringBuilder.append(textToChar).toString(); } - /** - * Метод определяет, является ли строка палиндромом. - * - * Палиндром - строка, которая одинаково читается слева направо и справа налево. - * - * Например для строки "а роза упала на лапу Азора" вернется true, а для "я не палиндром" false - */ @Override public boolean isPalindrome(String string) {