diff --git a/fileRepository/copy/TestFileToCopy.txt b/fileRepository/copy/TestFileToCopy.txt
new file mode 100644
index 00000000..e4c32287
--- /dev/null
+++ b/fileRepository/copy/TestFileToCopy.txt
@@ -0,0 +1,4 @@
+test
+1
+2
+текст
\ No newline at end of file
diff --git a/java-data-handling-template.iml b/java-data-handling-template.iml
new file mode 100644
index 00000000..e5f71190
--- /dev/null
+++ b/java-data-handling-template.iml
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index d02d643e..90de165a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -33,8 +33,8 @@
org.apache.maven.plugins
maven-compiler-plugin
- ${java.version}
- ${java.version}
+ 9
+ 9
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..35818371 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 {
@@ -7,10 +10,10 @@ public interface FileRepository {
long countDirsInDirectory(String path);
- void copyTXTFiles(String from, String to);
+ void copyTXTFiles(String from, String to) throws IOException;
- 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..561f1b0d 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,12 @@
package com.epam.izh.rd.online.repository;
+import java.io.*;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+
+
+
public class SimpleFileRepository implements FileRepository {
/**
@@ -10,9 +17,23 @@ public class SimpleFileRepository implements FileRepository {
*/
@Override
public long countFilesInDirectory(String path) {
- return 0;
+
+ long filesThisDir=0;
+ File f = new File(path);
+ File[] files = f.listFiles();
+ for (File item : files) {
+ if (item.isFile()) {
+ filesThisDir++;
+ }
+ if (item.isDirectory()) {
+ filesThisDir += countFilesInDirectory(item.getAbsolutePath());
+ }
+ }
+ return filesThisDir;
+
}
+
/**
* Метод рекурсивно подсчитывает количество папок в директории, считая корень
*
@@ -21,7 +42,17 @@ public long countFilesInDirectory(String path) {
*/
@Override
public long countDirsInDirectory(String path) {
- return 0;
+ File file = new File (path);
+ File[] files = file.listFiles();
+ long DirsThisDir = 1;
+
+ for(File item: files)
+ {
+ if (item.isDirectory()) {
+ DirsThisDir += countDirsInDirectory(item.getAbsolutePath());
+ }
+ }
+ return DirsThisDir;
}
/**
@@ -31,8 +62,20 @@ public long countDirsInDirectory(String path) {
* @param to путь куда
*/
@Override
- public void copyTXTFiles(String from, String to) {
- return;
+ public void copyTXTFiles(String from, String to) throws IOException {
+ File fileFrom = new File(from);
+ File fileTo = new File(to);
+ Path pathFrom = Paths.get(fileFrom.getParent());
+ Path pathTo = Paths.get(fileTo.getParent());
+
+ if (!Files.exists(pathTo)) {
+ Files.createDirectories(pathTo);
+ }
+ for(File item: pathFrom.toFile().listFiles()){
+ if(item.getAbsolutePath().endsWith(".txt")) {
+ Files.copy(fileFrom.toPath(), fileTo.toPath());
+ }
+ }
}
/**
@@ -43,8 +86,17 @@ public void copyTXTFiles(String from, String to) {
* @return был ли создан файл
*/
@Override
- public boolean createFile(String path, String name) {
- return false;
+ public boolean createFile(String path, String name) throws IOException {
+ File file = new File(path+"./"+name);
+ Path dir = Paths.get(file.getParent());
+ if (!Files.exists(dir)) {
+ Files.createDirectory(dir);
+ }
+ if (!file.exists()) {
+ file.createNewFile();
+ return true;
+ }
+ return file.exists();
}
/**
@@ -54,7 +106,17 @@ public boolean createFile(String path, String name) {
* @return контент
*/
@Override
- public String readFileFromResources(String fileName) {
- return null;
+ public String readFileFromResources(String fileName) throws IOException {
+ String absoluteFilePath = "C:/java-data-handling-template/src/main/resources/" + fileName;
+ String content = new String();
+ FileReader fileReader = new FileReader(absoluteFilePath);
+ BufferedReader buffReader = new BufferedReader(fileReader);
+ try {
+ while (buffReader.ready()) {
+ content = buffReader.readLine();
+ }
+ }catch (IOException e){System.out.println(e.getMessage());}
+ buffReader.close();
+ return content;
}
}
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..a1ce46f8 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,9 @@ public class SimpleBigNumbersService implements BigNumbersService {
*/
@Override
public BigDecimal getPrecisionNumber(int a, int b, int range) {
- return null;
+ BigDecimal firstNumber = new BigDecimal(a);
+ BigDecimal secondNumber = new BigDecimal(b);
+ return firstNumber.divide(secondNumber, range, RoundingMode.HALF_UP);
}
/**
@@ -24,6 +27,24 @@ public BigDecimal getPrecisionNumber(int a, int b, int range) {
*/
@Override
public BigInteger getPrimaryNumber(int range) {
- return null;
+ Integer[] arr = new Integer[range+1];
+ int numberArr = 1;
+ int i = 3;
+ boolean isPrime = true;
+ while (arr[range] == null){
+ for (int j = 2; j <= i/j; j++){
+ if (i % j == 0 ) {
+ isPrime = false;
+ }
+
+ }
+ if (isPrime){
+ arr[numberArr] = i ;
+ numberArr++;
+ }
+ i++;
+ isPrime = true;
+ }
+ return BigInteger.valueOf(arr[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 70d64dfd..ad13cef1 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
@@ -4,6 +4,7 @@
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
+
public class SimpleDateService implements DateService {
/**
@@ -14,7 +15,9 @@ public class SimpleDateService implements DateService {
*/
@Override
public String parseDate(LocalDate localDate) {
- return null;
+ DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-MM-yyyy");
+ String localDate1 = localDate.format(formatter);
+ return localDate1;
}
/**
@@ -25,7 +28,9 @@ public String parseDate(LocalDate localDate) {
*/
@Override
public LocalDateTime parseString(String string) {
- return null;
+ DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
+ LocalDateTime dateTime = LocalDateTime.parse(string, formatter);
+ return dateTime;
}
/**
@@ -37,7 +42,7 @@ public LocalDateTime parseString(String string) {
*/
@Override
public String convertToCustomFormat(LocalDate localDate, DateTimeFormatter formatter) {
- return null;
+ return localDate.format(formatter);
}
/**
@@ -47,7 +52,14 @@ public String convertToCustomFormat(LocalDate localDate, DateTimeFormatter forma
*/
@Override
public long getNextLeapYear() {
- return 0;
+ LocalDate temp = LocalDate.now();
+ long year = temp.getYear() + 1;
+ while(true) {
+ if ((year % 400 == 0 && year % 100 == 0) || (year % 4 == 0 && year % 100 > 0)) {
+ return year;
+ }
+ year++;
+ }
}
/**
@@ -57,7 +69,11 @@ public long getNextLeapYear() {
*/
@Override
public long getSecondsInYear(int year) {
- return 0;
+ if ((year % 400 == 0 && year % 100 == 0) || (year % 4 == 0 && year % 100 > 0)) {
+ return 366*24*60*60;
+ } else {
+ return 365*24*60*60;
+ }
}
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..38f0dc47 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,10 @@
package com.epam.izh.rd.online.service;
+import java.io.*;
+import java.text.DecimalFormat;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
public class SimpleRegExpService implements RegExpService {
/**
@@ -10,8 +15,22 @@ public class SimpleRegExpService implements RegExpService {
* @return обработанный текст
*/
@Override
- public String maskSensitiveData() {
- return null;
+ public String maskSensitiveData() throws IOException {
+ BufferedReader br = new BufferedReader(new FileReader("C:/java-data-handling-template/src/main/resources/sensitive_data.txt"));
+ String content = br.readLine();
+ br.close();
+
+ Pattern pattern = Pattern.compile("\\d{4} \\d{4} \\d{4} \\d{4}");
+ Matcher matcher = pattern.matcher(content);
+
+ StringBuffer sbNewContent = new StringBuffer(content.length());
+ String sNewContent = "";
+ while (matcher.find()){
+ sNewContent = matcher.group().substring(0,4) + " **** " + "**** " + matcher.group().substring(15,19);
+ matcher.appendReplacement(sbNewContent, sNewContent);
+ }
+ matcher.appendTail(sbNewContent);
+ return sbNewContent.toString();
}
/**
@@ -21,7 +40,20 @@ public String maskSensitiveData() {
* @return обработанный текст
*/
@Override
- public String replacePlaceholders(double paymentAmount, double balance) {
- return null;
+ public String replacePlaceholders(double paymentAmount, double balance) throws IOException {
+ BufferedReader bufferedReader = new BufferedReader(new FileReader("C:/java-data-handling-template/src/main/resources/sensitive_data.txt"));
+ String content = bufferedReader.readLine();
+ bufferedReader.close();
+ String sPaymentAmount = DecimalFormat.getNumberInstance().format(paymentAmount);
+ String sBalance = DecimalFormat.getInstance().format(balance);
+
+ Pattern pPayment = Pattern.compile("\\$\\{payment_amount\\}");
+ Matcher mPayment = pPayment.matcher(content);
+ content = mPayment.replaceAll(sPaymentAmount);
+
+ Pattern pBalance = Pattern.compile("\\$\\{balance\\}");
+ Matcher mBalance = pBalance.matcher(content);
+ content = mBalance.replaceAll(sBalance);
+ return content;
}
}
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..048849df 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,16 @@ public class SimpleTextService implements TextService {
*/
@Override
public String removeString(String base, String remove) {
- return null; //TODO
+ StringBuilder sb1 = new StringBuilder(base);
+ StringBuilder sb2 = new StringBuilder(remove);
+
+ while (sb1.indexOf(remove)>0) {
+ sb1 = sb1.delete(sb1.indexOf(remove),sb1.indexOf(remove)+sb2.length());
+
+ }
+
+
+ return sb1.toString();
}
/**
@@ -24,7 +33,7 @@ public String removeString(String base, String remove) {
*/
@Override
public boolean isQuestionString(String text) {
- return false; //TODO
+ return text.endsWith("?");
}
/**
@@ -35,7 +44,11 @@ public boolean isQuestionString(String text) {
*/
@Override
public String concatenate(String... elements) {
- return null; //TODO
+ StringBuilder sb1 = new StringBuilder(elements[0]);
+ for(int i = 1; i < elements.length; i++) {
+ sb1.append(elements[i]);
+ }
+ return sb1.toString();
}
/**
@@ -47,7 +60,14 @@ public String concatenate(String... elements) {
*/
@Override
public String toJumpCase(String text) {
- return null; //TODO
+ StringBuilder sb1 = new StringBuilder(text);
+ for(int i = 0; i < sb1.length(); i+=2) {
+ sb1.setCharAt(i, Character.toLowerCase(sb1.charAt(i)));
+ }
+ for(int i = 1; i < sb1.length(); i+=2) {
+ sb1.setCharAt(i, Character.toUpperCase(sb1.charAt(i)));
+ }
+ return sb1.toString();
}
/**
@@ -59,6 +79,13 @@ public String toJumpCase(String text) {
*/
@Override
public boolean isPalindrome(String string) {
- return false; //TODO
+ if (string.equals("")){
+ return false;
+ }
+ String workCopy = string.replaceAll(" ","");
+ StringBuffer reversCopy = new StringBuffer(new StringBuffer(workCopy).reverse());
+ String str = reversCopy.toString();
+ return str.equalsIgnoreCase(workCopy);
+
}
}
diff --git a/src/main/resources/sensitive_data2.txt b/src/main/resources/sensitive_data2.txt
new file mode 100644
index 00000000..e426f557
--- /dev/null
+++ b/src/main/resources/sensitive_data2.txt
@@ -0,0 +1 @@
+Вчера вечером со счета номер 4301 0234 2145 2140 был совершен перевод на счет 5042 2012 0532 2043 в размере 1.0 рублей. На счету осталось 2.0 рублей
\ No newline at end of file
diff --git a/src/main/resources/testDirCreateFile/newFile.txt b/src/main/resources/testDirCreateFile/newFile.txt
new file mode 100644
index 00000000..f771248c
--- /dev/null
+++ b/src/main/resources/testDirCreateFile/newFile.txt
@@ -0,0 +1 @@
+sdfghj
\ No newline at end of file
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..de4c58f8 100644
--- a/src/test/java/com/epam/izh/rd/online/FileRepositoryTest.java
+++ b/src/test/java/com/epam/izh/rd/online/FileRepositoryTest.java
@@ -20,11 +20,11 @@
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 = "C:/java-data-handling-template/src/main/resources/testDirCountFiles";
+ private static final String TEST_DIR_CREATE_PATH = "C:/java-data-handling-template/src/main/resources/testDirCreateFile";
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";
+ private static final String SOURCE_FILE = "C:/java-data-handling-template/fileRepository/source/TestFileToCopy.txt";
+ private static final String COPY_FILE = "C:/java-data-handling-template/fileRepository/copy/TestFileToCopy.txt";
private static FileRepository fileRepository;
@@ -55,7 +55,7 @@ void testCountFilesInDirectory() {
@Test
@DisplayName("Тест метода FileRepository.copyTXTFiles(String from, String to)")
- void testCopyTXTFiles() {
+ void testCopyTXTFiles() throws IOException {
final File emptyFile = getFile(COPY_FILE);
assertEquals("", emptyFile.getName());
fileRepository.copyTXTFiles(SOURCE_FILE, COPY_FILE);
@@ -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"));
}
@@ -98,8 +98,10 @@ private String readLineByLineJava(String filePath) {
}
private File getFile(String path) {
+ File file = new File(path);
ClassLoader classLoader = getClass().getClassLoader();
- URL resource = classLoader.getResource(path);
+ URL resource = classLoader.getResource(String.valueOf(file));
+
if (resource != null) {
return new File(resource.getFile());
}
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..7973b00b 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,9 @@
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+
import static org.junit.jupiter.api.Assertions.assertEquals;
public class RegExpServiceTest {
@@ -19,7 +22,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 +30,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));