#19 Sequentialisierung der Verarbeitung

Dateien werden erst gelesen, wenn sie verarbeitet werden. Ergebnisse von vorherigen Läufen werden nicht mehr Speicher gehalten bis alle Dateien verarbeitet sind
This commit is contained in:
Andreas Penski (init) 2019-02-07 13:54:47 +01:00
parent 7992024451
commit 5e5f7df700
2 changed files with 28 additions and 28 deletions

View file

@ -28,10 +28,15 @@ import java.nio.file.Paths;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.Collections; import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors; 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 org.apache.commons.lang3.StringUtils;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@ -151,9 +156,12 @@ public class CommandLineApplication {
final Collection<Path> targets = determineTestTargets(cmd); final Collection<Path> targets = determineTestTargets(cmd);
start = System.currentTimeMillis(); start = System.currentTimeMillis();
final List<Input> input = targets.stream().map(InputFactory::read).collect(Collectors.toList()); for (Path p : targets) {
boolean result = check.checkInput(input); final Input input = InputFactory.read(p);
log.info("Processing {} object(s) completed in {}ms", input.size(), System.currentTimeMillis() - start); check.checkInput(input);
}
boolean result = check.printAndEvaluate();
log.info("Processing {} object(s) completed in {}ms", targets.size(), System.currentTimeMillis() - start);
return result ? 0 : 1; return result ? 0 : 1;
} catch (Exception e) { } catch (Exception e) {

View file

@ -19,16 +19,12 @@
package de.kosit.validationtool.cmd; package de.kosit.validationtool.cmd;
import lombok.extern.slf4j.Slf4j;
import de.kosit.validationtool.api.CheckConfiguration; import de.kosit.validationtool.api.CheckConfiguration;
import de.kosit.validationtool.api.Input; import de.kosit.validationtool.api.Input;
import de.kosit.validationtool.impl.DefaultCheck; import de.kosit.validationtool.impl.DefaultCheck;
import de.kosit.validationtool.impl.model.Result;
import de.kosit.validationtool.impl.tasks.CheckAction; 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. * 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 @Slf4j
class InternalCheck extends DefaultCheck { class InternalCheck extends DefaultCheck {
private int checkAssertions = 0;
private int failedAssertions = 0;
/** /**
* Erzeugt eine neue Instanz mit der angegebenen Konfiguration. * Erzeugt eine neue Instanz mit der angegebenen Konfiguration.
* *
* @param configuration die Konfiguration * @param configuration die Konfiguration
*/ */
public InternalCheck(CheckConfiguration configuration) { InternalCheck(CheckConfiguration configuration) {
super(configuration); super(configuration);
} }
@ -54,24 +54,16 @@ class InternalCheck extends DefaultCheck {
* @param input die Prüflinge * @param input die Prüflinge
* @return false wenn es Assertion-Fehler gibt, sonst true * @return false wenn es Assertion-Fehler gibt, sonst true
*/ */
public boolean checkInput(List<Input> input) { void checkInput(Input input) {
List<CheckAction.Bag> results = new ArrayList<>(); CheckAction.Bag bag = new CheckAction.Bag(input, createReport());
input.forEach(i -> { runCheckInternal(bag);
CheckAction.Bag bag = new CheckAction.Bag(i, createReport()); if (bag.getAssertionResult() != null) {
runCheckInternal(bag); checkAssertions += bag.getAssertionResult().getObject();
results.add(bag); failedAssertions += bag.getAssertionResult().getErrors().size();
}); }
return printAndEvaluate(results);
} }
private boolean printAndEvaluate(List<CheckAction.Bag> results) { public boolean printAndEvaluate() {
final List<Result<Integer, String>> 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();
if (failedAssertions > 0) { if (failedAssertions > 0) {
log.error("Assertion check failed.\n\nAssertions run: {}, Assertions failed: {}\n", checkAssertions, failedAssertions); log.error("Assertion check failed.\n\nAssertions run: {}, Assertions failed: {}\n", checkAssertions, failedAssertions);
} else if (checkAssertions > 0) { } else if (checkAssertions > 0) {