From 066974886b335cedeb3502f572388ec28583fc20 Mon Sep 17 00:00:00 2001 From: apenski Date: Thu, 7 Feb 2019 15:29:31 +0100 Subject: [PATCH] #19 Sequentialisierung der Verarbeitung (#21) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Dateien werden erst gelesen, wenn sie verarbeitet werden. Ergebnisse von vorherigen Läufen werden nicht mehr Speicher gehalten bis alle Dateien verarbeitet sind --- .../cmd/CommandLineApplication.java | 18 ++++++--- .../validationtool/cmd/InternalCheck.java | 38 ++++++++----------- 2 files changed, 28 insertions(+), 28 deletions(-) diff --git a/src/main/java/de/kosit/validationtool/cmd/CommandLineApplication.java b/src/main/java/de/kosit/validationtool/cmd/CommandLineApplication.java index eb89024..1ce602d 100644 --- a/src/main/java/de/kosit/validationtool/cmd/CommandLineApplication.java +++ b/src/main/java/de/kosit/validationtool/cmd/CommandLineApplication.java @@ -28,10 +28,15 @@ import java.nio.file.Paths; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; -import java.util.List; import java.util.stream.Collectors; -import org.apache.commons.cli.*; +import org.apache.commons.cli.CommandLine; +import org.apache.commons.cli.CommandLineParser; +import org.apache.commons.cli.DefaultParser; +import org.apache.commons.cli.HelpFormatter; +import org.apache.commons.cli.Option; +import org.apache.commons.cli.Options; +import org.apache.commons.cli.ParseException; import org.apache.commons.lang3.StringUtils; import lombok.extern.slf4j.Slf4j; @@ -151,9 +156,12 @@ public class CommandLineApplication { final Collection targets = determineTestTargets(cmd); start = System.currentTimeMillis(); - final List input = targets.stream().map(InputFactory::read).collect(Collectors.toList()); - boolean result = check.checkInput(input); - log.info("Processing {} object(s) completed in {}ms", input.size(), System.currentTimeMillis() - start); + for (Path p : targets) { + final Input input = InputFactory.read(p); + check.checkInput(input); + } + boolean result = check.printAndEvaluate(); + log.info("Processing {} object(s) completed in {}ms", targets.size(), System.currentTimeMillis() - start); return result ? 0 : 1; } catch (Exception e) { diff --git a/src/main/java/de/kosit/validationtool/cmd/InternalCheck.java b/src/main/java/de/kosit/validationtool/cmd/InternalCheck.java index 471f7c7..06a45f4 100644 --- a/src/main/java/de/kosit/validationtool/cmd/InternalCheck.java +++ b/src/main/java/de/kosit/validationtool/cmd/InternalCheck.java @@ -19,16 +19,12 @@ package de.kosit.validationtool.cmd; +import lombok.extern.slf4j.Slf4j; + import de.kosit.validationtool.api.CheckConfiguration; import de.kosit.validationtool.api.Input; import de.kosit.validationtool.impl.DefaultCheck; -import de.kosit.validationtool.impl.model.Result; import de.kosit.validationtool.impl.tasks.CheckAction; -import lombok.extern.slf4j.Slf4j; - -import java.util.ArrayList; -import java.util.List; -import java.util.stream.Collectors; /** * Simple Erweiterung der Klasse {@link DefaultCheck} um das Ergebnis der Assertion-Prüfung auszwerten und auszugeben. @@ -39,12 +35,16 @@ import java.util.stream.Collectors; @Slf4j class InternalCheck extends DefaultCheck { + private int checkAssertions = 0; + + private int failedAssertions = 0; + /** * Erzeugt eine neue Instanz mit der angegebenen Konfiguration. * * @param configuration die Konfiguration */ - public InternalCheck(CheckConfiguration configuration) { + InternalCheck(CheckConfiguration configuration) { super(configuration); } @@ -54,24 +54,16 @@ class InternalCheck extends DefaultCheck { * @param input die Prüflinge * @return false wenn es Assertion-Fehler gibt, sonst true */ - public boolean checkInput(List input) { - List results = new ArrayList<>(); - input.forEach(i -> { - CheckAction.Bag bag = new CheckAction.Bag(i, createReport()); - runCheckInternal(bag); - results.add(bag); - }); - - return printAndEvaluate(results); - + void checkInput(Input input) { + CheckAction.Bag bag = new CheckAction.Bag(input, createReport()); + runCheckInternal(bag); + if (bag.getAssertionResult() != null) { + checkAssertions += bag.getAssertionResult().getObject(); + failedAssertions += bag.getAssertionResult().getErrors().size(); + } } - private boolean printAndEvaluate(List results) { - final List> asserts = results.stream().filter(r -> r.getAssertionResult() != null) - .map(CheckAction.Bag::getAssertionResult).collect(Collectors.toList()); - int checkAssertions = asserts.stream().mapToInt(e -> e.getObject()).sum(); - int failedAssertions = asserts.stream().mapToInt(e -> e.getErrors().size()).sum(); - + public boolean printAndEvaluate() { if (failedAssertions > 0) { log.error("Assertion check failed.\n\nAssertions run: {}, Assertions failed: {}\n", checkAssertions, failedAssertions); } else if (checkAssertions > 0) {