validator/src/main/java/de/kosit/validationtool/config/FallbackBuilder.java
Andreas Penski 7dc62012a6 some cleanup
2020-05-03 16:52:55 +02:00

97 lines
2.9 KiB
Java

package de.kosit.validationtool.config;
import java.net.URI;
import java.nio.file.Path;
import org.apache.commons.lang3.tuple.Pair;
import de.kosit.validationtool.impl.ContentRepository;
import de.kosit.validationtool.impl.Scenario;
import de.kosit.validationtool.impl.Scenario.Transformation;
import de.kosit.validationtool.impl.model.Result;
import de.kosit.validationtool.model.scenarios.CreateReportType;
import de.kosit.validationtool.model.scenarios.ScenarioType;
/**
* Create a fallback {@link Scenario} configuration.
*
* @author Andreas Penski
*/
public class FallbackBuilder implements Builder<Scenario> {
private final ReportBuilder internal = new ReportBuilder().name("fallback");
@Override
public Result<Scenario, String> build(final ContentRepository repository) {
final ScenarioType object = createObject();
final Result<Pair<CreateReportType, Transformation>, String> build = this.internal.build(repository);
final Result<Scenario, String> result;
if (build.isValid()) {
object.setCreateReport(build.getObject().getLeft());
final Scenario s = new Scenario(object);
s.setFallback(true);
s.setReportTransformation(build.getObject().getRight());
result = new Result<>(s);
} else {
result = new Result<>(build.getErrors());
}
return result;
}
private static ScenarioType createObject() {
final ScenarioType t = new ScenarioType();
t.setName("Fallback-Scenario");
t.setMatch("count(/)<0");
// always reject
t.setAcceptMatch("count(/)<0");
return t;
}
/**
* Specifices a source for this report. This is either used to compile the report transformation or as documentation for
* a precompiled tranformation.
*
* @param source the source
* @return this
*/
public FallbackBuilder source(final String source) {
this.internal.source(source);
return this;
}
/**
* Specifices a source for this report. This is either used to compile the report transformation or as documentation for
* a precompiled tranformation.
*
* @param source the source
* @return this
*/
public FallbackBuilder source(final URI source) {
this.internal.source(source);
return this;
}
/**
* Specifices a source for this report. This is either used to compile the report transformation or as documentation for
* a precompiled tranformation.
*
* @param source the source
* @return this
*/
public FallbackBuilder source(final Path source) {
this.internal.source(source);
return this;
}
/**
* Sets the name of the report source to a specific value.
*
* @param name the name
* @return this
*/
public FallbackBuilder name(final String name) {
this.internal.name(name);
return this;
}
}