Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,27 +1,51 @@
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 {

/**
* Метод рекурсивно подсчитывает количество файлов в директории
*
* @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;
}

/**
* Метод рекурсивно подсчитывает количество папок в директории, считая корень
*
* @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;
}

/**
Expand All @@ -32,7 +56,7 @@ public long countDirsInDirectory(String path) {
*/
@Override
public void copyTXTFiles(String from, String to) {
return;

}

/**
Expand All @@ -44,17 +68,25 @@ 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;
}

/**
* Метод считывает тело файла .txt из папки src/main/resources
*
* @param fileName имя файла
* @return контент
*/
@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;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,28 +2,25 @@

import java.math.BigDecimal;
import java.math.BigInteger;
import java.math.RoundingMode;

public class SimpleBigNumbersService implements BigNumbersService {

/**
* Метод делит первое число на второе с заданной точностью
* Например 1/3 с точностью 2 = 0.33
* @param range точность
* @return результат
*/
@Override
public BigDecimal getPrecisionNumber(int a, int b, int range) {
return null;

return (new BigDecimal(a).divide((new BigDecimal(b)), range, RoundingMode.HALF_UP));
}

/**
* Метод находит простое число по номеру
*
* @param range номер числа, считая с числа 2
* @return простое число
*/
@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;
}
}
53 changes: 19 additions & 34 deletions src/main/java/com/epam/izh/rd/online/service/SimpleDateService.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,58 +6,43 @@

public class SimpleDateService implements DateService {

/**
* Метод парсит дату в строку
*
* @param localDate дата
* @return строка с форматом день-месяц-год(01-01-1970)
*/
@Override
public String parseDate(LocalDate localDate) {
return null;

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-MM-yyyy");
String formatDate = localDate.format(formatter);
return formatDate;
}

/**
* Метод парсит строку в дату
*
* @param string строка в формате год-месяц-день часы:минуты (1970-01-01 00:00)
* @return дата и время
*/
@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;
}

/**
* Метод конвертирует дату в строку с заданным форматом
*
* @param localDate исходная дата
* @param formatter формат даты
* @return полученная строка
*/
@Override
public String convertToCustomFormat(LocalDate localDate, DateTimeFormatter formatter) {
return null;

return localDate.format(formatter);
}

/**
* Метод получает следующий високосный год
*
* @return високосный год
*/
@Override
public long getNextLeapYear() {
return 0;

LocalDate localDate = LocalDate.now();
long year = localDate.getYear();
while (year % 4 != 0) {
year = year + 1;
}
return year;
}

/**
* Метод считает число секунд в заданном году
*
* @return число секунд
*/
@Override
public long getSecondsInYear(int year) {
return 0;

return (LocalDate.of(year, 1, 1).lengthOfYear()) * 24 * 3600;
}


Expand Down
Original file line number Diff line number Diff line change
@@ -1,27 +1,80 @@
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 {

/**
* Метод должен читать файл sensitive_data.txt (из директории resources) и маскировать в нем конфиденциальную информацию.
* Номер счета должен содержать только первые 4 и последние 4 цифры (1234 **** **** 5678). Метод должен содержать регулярное
* выражение для поиска счета.
*
* @return обработанный текст
*/
@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;
}

/**
* Метод должен считыввать файл sensitive_data.txt (из директории resources) и заменять плейсхолдер ${payment_amount} и ${balance} на заданные числа. Метод должен
* содержать регулярное выражение для поиска плейсхолдеров
*
* @return обработанный текст
*/
@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;
}
}
Loading