Skip to content
Snippets Groups Projects
Commit 7f5a42d2 authored by Jonas Blatt's avatar Jonas Blatt :ant:
Browse files

Add predefined values existing verifier

parent 1da590fa
No related branches found
No related tags found
No related merge requests found
......@@ -20,6 +20,26 @@ public interface VDmnColumn extends VDmnElement {
*/
VDmnDecisionTable getDmnDecisionTable();
/**
* Check, if the given column is a {@link VDmnInputColumn}. If this method returns true, than
* {@link VDmnColumn#isOutputColumn()} returns false.
*
* @return true, if the current column is a input column
*/
default boolean isInputColumn() {
return this instanceof VDmnInputColumn;
}
/**
* Check, if the given column is a {@link VDmnOutputColumn}. If this method returns true, than
* {@link VDmnColumn#isInputColumn()} returns false.
*
* @return true, if the current column is a output column
*/
default boolean isOutputColumn() {
return this instanceof VDmnOutputColumn;
}
/**
* Get the list of predefined {@link StringValue}s, if the column has the type {@link
* VTypeRef#STRING} and the model contains these values.
......
......@@ -115,7 +115,7 @@ public interface VDmnValue extends VDmnElement {
* @return true, if the value is a input value
*/
default boolean isInputValue() {
return getDmnColumn() instanceof VDmnInputColumn;
return getDmnColumn().isInputColumn();
}
/**
......@@ -124,7 +124,7 @@ public interface VDmnValue extends VDmnElement {
* @return true, if the value is a output value
*/
default boolean isOutputValue() {
return getDmnColumn() instanceof VDmnOutputColumn;
return getDmnColumn().isOutputColumn();
}
/**
......
package de.unikoblenz.fgbks.core.dmn.verification.verifier.classification;
import de.unikoblenz.fgbks.base.domain.Description;
import de.unikoblenz.fgbks.base.domain.Name;
@Classification
public class ModelingLevelVerification extends AbstractClassificationType {
private static final ModelingLevelVerification instance =
new ModelingLevelVerification();
private ModelingLevelVerification() {
super(new Name("Modeling"), new Description("test")); // TODO
}
public static ModelingLevelVerification getInstance() {
return instance;
}
}
package de.unikoblenz.fgbks.core.dmn.verification.verifier.impl;
import static de.unikoblenz.fgbks.core.dmn.verification.result.actions.VerificationFix.SHOW_INPUT_ENTRIES;
import static de.unikoblenz.fgbks.core.dmn.verification.result.actions.VerificationFix.SHOW_OUTPUT_ENTRIES;
import de.unikoblenz.fgbks.base.domain.StringValue;
import de.unikoblenz.fgbks.base.utils.boundary.impl.StringBoundary;
import de.unikoblenz.fgbks.core.dmn.domain.vdmn.VDmnColumn;
import de.unikoblenz.fgbks.core.dmn.domain.vdmn.VDmnInputValue;
import de.unikoblenz.fgbks.core.dmn.domain.vdmn.VDmnOutputValue;
import de.unikoblenz.fgbks.core.dmn.domain.vdmn.VDmnValue;
import de.unikoblenz.fgbks.core.dmn.domain.vdmn.VTypeRef;
import de.unikoblenz.fgbks.core.dmn.domain.vdmn.utils.VDmnFunctions;
import de.unikoblenz.fgbks.core.dmn.verification.result.VerificationResultEntry.VerificationClassification;
import de.unikoblenz.fgbks.core.dmn.verification.result.VerificationResultEntryElement;
import de.unikoblenz.fgbks.core.dmn.verification.verifier.AbstractVerifier;
import de.unikoblenz.fgbks.core.dmn.verification.verifier.DmnVerifier;
import de.unikoblenz.fgbks.core.dmn.verification.verifier.types.PredefinedExistingValueVerification;
import java.util.HashSet;
import java.util.Set;
import java.util.stream.Collectors;
@DmnVerifier(verifierType = PredefinedExistingValueVerification.class)
public class PredefinedExistingValueVerifier extends AbstractVerifier {
@Override
protected void doVerification() {
for (VDmnColumn stringColumn :
VDmnFunctions.getColumnsByTypeRef(
dmnObjectContainer.getVDmnDefinition(), VTypeRef.STRING)) {
checkStringColumns(stringColumn);
}
}
private void checkStringColumns(VDmnColumn stringColumn) {
// Check, if there are PredefinedValues defined
boolean predefinedValuesArePresent = stringColumn.getPredefinedValues().isPresent();
Set<String> predefinedValues = new HashSet<>();
if (predefinedValuesArePresent) {
predefinedValues =
stringColumn.getPredefinedValues().get().stream()
.map(StringValue::getValue)
.collect(Collectors.toSet());
}
for (VDmnValue stringValue : stringColumn.getValues()) {
// do not check empty values
if (!stringValue.getText().getValue().isEmpty()) {
if (stringValue.isInputValue()) {
checkStringValue((VDmnInputValue) stringValue, predefinedValues);
} else {
checkStringValue((VDmnOutputValue) stringValue, predefinedValues);
}
}
}
}
private void checkStringValue(VDmnOutputValue stringValue, Set<String> predefinedValues) {
// get the Text and remove the "
String parsedOutputText = stringValue.getText().getValue().replace('"', '\0').trim();
if (!predefinedValues.contains(parsedOutputText)) {
addToResult(stringValue, parsedOutputText);
}
}
private void checkStringValue(VDmnInputValue stringValue, Set<String> predefinedValues) {
// Do check with input boundary
if (stringValue.getBoundary() instanceof StringBoundary) {
StringBoundary sb = (StringBoundary) stringValue.getBoundary();
for (String s : sb.getValues()) {
if (!predefinedValues.contains(s)) {
addToResult(stringValue, s);
}
}
}
}
private void addToResult(VDmnValue stringValue, String missingStringValue) {
vreFactory.addElement(VerificationResultEntryElement.create(stringValue));
vreFactory.addVerificationFix(
stringValue.isInputValue() ? SHOW_INPUT_ENTRIES : SHOW_OUTPUT_ENTRIES);
vreFactory.addToEntry(
VerificationClassification.WARNING,
"String value \"%s\" was not found in the list of predefined values.",
missingStringValue);
}
}
package de.unikoblenz.fgbks.core.dmn.verification.verifier.types;
import de.unikoblenz.fgbks.base.domain.Description;
import de.unikoblenz.fgbks.base.domain.Name;
import de.unikoblenz.fgbks.core.dmn.verification.verifier.classification.ClassificationType;
import de.unikoblenz.fgbks.core.dmn.verification.verifier.classification.ModelingLevelVerification;
import javax.validation.constraints.NotNull;
@Type
public class PredefinedExistingValueVerification extends AbstractVerificationType {
private static final PredefinedExistingValueVerification instance = new PredefinedExistingValueVerification();
private PredefinedExistingValueVerification() {
super(
new Name("PredefinedExistingValueVerification"),
new Description(
"Es gibt in einer Tabellen-Zelle einen String Value, der aber nicht in der Liste der "
+ "Predefines Values vorgesehen ist.")); // TODO englisch
}
public static PredefinedExistingValueVerification getInstance() {
return instance;
}
@Override
public @NotNull ClassificationType getClassification() {
return ModelingLevelVerification.getInstance();
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment