5: Create FileContentProvider

This commit is contained in:
Bartłomiej Pluta
2019-03-31 15:01:49 +02:00
parent 68b9d87b43
commit 0c8a94903a
4 changed files with 81 additions and 9 deletions

View File

@@ -1,5 +1,6 @@
package com.bartek.esa.file.di;
import com.bartek.esa.file.provider.FileContentProvider;
import com.bartek.esa.file.provider.FileProvider;
import dagger.Module;
import dagger.Provides;
@@ -11,4 +12,9 @@ public class FileModule {
public FileProvider fileProvider() {
return new FileProvider();
}
@Provides
public FileContentProvider fileContentProvider() {
return new FileContentProvider();
}
}

View File

@@ -0,0 +1,12 @@
package com.bartek.esa.file.model;
import lombok.Builder;
import lombok.Data;
@Data
@Builder
public class FoundLine {
private int number;
private String line;
private int position;
}

View File

@@ -0,0 +1,63 @@
package com.bartek.esa.file.provider;
import com.bartek.esa.error.EsaException;
import com.bartek.esa.file.model.FoundLine;
import io.vavr.control.Try;
import javax.inject.Inject;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.LineNumberReader;
import java.nio.file.Files;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Pattern;
public class FileContentProvider {
@Inject
public FileContentProvider() {
}
public List<FoundLine> findPhraseByLines(File file, String regex) {
try {
return tryToFindPhraseByLines(file, regex);
} catch (IOException e) {
throw new EsaException(e);
}
}
private List<FoundLine> tryToFindPhraseByLines(File file, String regex) throws IOException {
LineNumberReader lineNumberReader = readForLines(file);
List<FoundLine> foundLines = new ArrayList<>();
String line;
Pattern pattern = Pattern.compile(regex);
while ((line = lineNumberReader.readLine()) != null) {
if (pattern.matcher(line).find()) {
foundLines.add(FoundLine.builder()
.line(line)
.number(lineNumberReader.getLineNumber())
.build());
}
}
return foundLines;
}
private LineNumberReader readForLines(File file) {
return Try.of(() -> new LineNumberReader(new FileReader(file)))
.getOrElseThrow(EsaException::new);
}
public String readFile(File file) {
StringBuilder content = new StringBuilder();
Try.run(() -> Files.lines(file.toPath())
.map(line -> line + "\n")
.forEach(content::append));
return content.toString();
}
}

View File

@@ -24,15 +24,6 @@ public class FileProvider {
.toFile();
}
public String readFile(File file) {
StringBuilder content = new StringBuilder();
Try.run(() -> Files.lines(file.toPath())
.map(line -> line + "\n")
.forEach(content::append));
return content.toString();
}
public Set<File> findFilesRecursively(String path, String globPattern) {
return findFilesRecursivelyInSubpath(path, "", globPattern);
}