Skip to content

Commit c7c900c

Browse files
committed
Rendering the report into a basic, non-styled HTML
1 parent d28aedd commit c7c900c

File tree

6 files changed

+348
-5
lines changed

6 files changed

+348
-5
lines changed

src/main/java/cryptid/parsegrind/Application.java

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,15 @@
11
package cryptid.parsegrind;
22

3+
import cryptid.parsegrind.source.SourceReader;
34
import cryptid.parsegrind.valgrind.ValgrindPublisher;
5+
import cryptid.parsegrind.valgrind.model.ValgrindReport;
6+
import cryptid.parsegrind.valgrind.render.ValgrindReportRenderer;
7+
import j2html.tags.Tag;
48
import picocli.CommandLine;
59

10+
import java.io.BufferedWriter;
11+
import java.io.FileWriter;
12+
import java.io.IOException;
613
import java.nio.file.Paths;
714
import java.util.List;
815

@@ -41,18 +48,39 @@ public static void main(String[] args) throws Exception {
4148
defaultValue = "5")
4249
public int linesAfter;
4350

51+
@CommandLine.Option(names = {"-o", "--output"},
52+
description = "Output file into which the rendered report is written.",
53+
required = true)
54+
public String outputFile;
55+
4456
@Override
4557
public void run() {
4658
final Configuration configuration = configurationFromApplication();
4759

4860
final ValgrindPublisher valgrindPublisher = new ValgrindPublisher();
4961
try {
50-
valgrindPublisher.perform(configuration);
62+
final ValgrindReport report = valgrindPublisher.perform(configuration);
63+
64+
final SourceReader sourceReader = new SourceReader(configuration);
65+
66+
final ValgrindReportRenderer renderer = new ValgrindReportRenderer(configuration, report, sourceReader);
67+
68+
final Tag document = renderer.render();
69+
70+
final String renderedDocument = document.render();
71+
72+
writeOutput(renderedDocument, configuration.outputFile);
5173
} catch (final Exception e) {
5274
e.printStackTrace(System.err);
5375
}
5476
}
5577

78+
private void writeOutput(final String output, final String path) throws IOException {
79+
try (final var writer = new BufferedWriter(new FileWriter(path))) {
80+
writer.write(output);
81+
}
82+
}
83+
5684
private Configuration configurationFromApplication() {
5785
final Configuration configuration = new Configuration();
5886

@@ -61,6 +89,7 @@ private Configuration configurationFromApplication() {
6189
configuration.sourceGlobs = sourceGlobs;
6290
configuration.linesBefore = linesBefore;
6391
configuration.linesAfter = linesAfter;
92+
configuration.outputFile = outputFile;
6493

6594
return configuration;
6695
}

src/main/java/cryptid/parsegrind/Configuration.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,6 @@ public final class Configuration {
1212
public int linesBefore;
1313

1414
public int linesAfter;
15+
16+
public String outputFile;
1517
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package cryptid.parsegrind.source;
2+
3+
import static java.util.Objects.requireNonNull;
4+
5+
public final class SourceFragment {
6+
private final int sourceFileStartLine;
7+
8+
private final int sourceFileErrorLine;
9+
10+
private final String lines;
11+
12+
public SourceFragment(final int sourceFileStartLine, final int sourceFileErrorLine, final String lines) {
13+
this.sourceFileStartLine = sourceFileStartLine;
14+
this.sourceFileErrorLine = sourceFileErrorLine;
15+
this.lines = requireNonNull(lines);
16+
}
17+
18+
public int getSourceFileStartLine() {
19+
return sourceFileStartLine;
20+
}
21+
22+
public int getSourceFileErrorLine() {
23+
return sourceFileErrorLine;
24+
}
25+
26+
public String getLines() {
27+
return lines;
28+
}
29+
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package cryptid.parsegrind.source;
2+
3+
import cryptid.parsegrind.Configuration;
4+
5+
import java.io.IOException;
6+
import java.nio.file.Files;
7+
import java.nio.file.Paths;
8+
import java.util.stream.Collectors;
9+
import java.util.stream.Stream;
10+
11+
import static java.util.Objects.requireNonNull;
12+
13+
public class SourceReader {
14+
private static final String NEW_LINE = "\n";
15+
16+
private final Configuration configuration;
17+
18+
private final int lineCount;
19+
20+
public SourceReader(final Configuration configuration) {
21+
this.configuration = requireNonNull(configuration);
22+
23+
this.lineCount = configuration.linesBefore + 1 + configuration.linesAfter;
24+
}
25+
26+
public SourceFragment read(final String path, final int line) throws IOException {
27+
final int startLine = Math.max(0, line - configuration.linesBefore);
28+
29+
try (final Stream<String> lines = Files.lines(Paths.get(path))) {
30+
final String contents = lines
31+
.skip(startLine)
32+
.limit(lineCount)
33+
.collect(Collectors.joining(NEW_LINE));
34+
35+
return new SourceFragment(startLine, line, contents);
36+
}
37+
}
38+
}

src/main/java/cryptid/parsegrind/valgrind/ValgrindPublisher.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,13 @@
66
import cryptid.parsegrind.valgrind.parser.ValgrindParser;
77

88
import java.io.IOException;
9-
import java.util.Collections;
109

1110
import static java.util.Objects.nonNull;
1211

1312
public final class ValgrindPublisher {
14-
public void perform(final Configuration configuration) throws IOException {
13+
public ValgrindReport perform(final Configuration configuration) throws IOException {
1514
final ValgrindParser parser = new ValgrindParser();
1615

17-
final ValgrindResult valgrindResult = new ValgrindResult();
1816
final ValgrindReport valgrindReport = parser.parse(configuration);
1917

2018
// Remove workspace path from executable name.
@@ -34,6 +32,6 @@ public void perform(final Configuration configuration) throws IOException {
3432
}
3533
}
3634

37-
valgrindResult.setSourceFiles(Collections.emptyMap());
35+
return valgrindReport;
3836
}
3937
}

0 commit comments

Comments
 (0)