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

Small fix for next verifiers

parent e80a84f3
No related branches found
No related tags found
No related merge requests found
...@@ -2,13 +2,16 @@ package de.unikoblenz.fgbks.core.dmn.domain.vdmn.utils; ...@@ -2,13 +2,16 @@ package de.unikoblenz.fgbks.core.dmn.domain.vdmn.utils;
import de.unikoblenz.fgbks.core.dmn.domain.ids.RuleId; import de.unikoblenz.fgbks.core.dmn.domain.ids.RuleId;
import de.unikoblenz.fgbks.core.dmn.domain.vdmn.VDmnColumn; import de.unikoblenz.fgbks.core.dmn.domain.vdmn.VDmnColumn;
import de.unikoblenz.fgbks.core.dmn.domain.vdmn.VDmnDecisionTable;
import de.unikoblenz.fgbks.core.dmn.domain.vdmn.VDmnDefinition; import de.unikoblenz.fgbks.core.dmn.domain.vdmn.VDmnDefinition;
import de.unikoblenz.fgbks.core.dmn.domain.vdmn.VDmnInputColumn; import de.unikoblenz.fgbks.core.dmn.domain.vdmn.VDmnInputColumn;
import de.unikoblenz.fgbks.core.dmn.domain.vdmn.VDmnInputValue; import de.unikoblenz.fgbks.core.dmn.domain.vdmn.VDmnInputValue;
import de.unikoblenz.fgbks.core.dmn.domain.vdmn.VDmnOutputColumn; import de.unikoblenz.fgbks.core.dmn.domain.vdmn.VDmnOutputColumn;
import de.unikoblenz.fgbks.core.dmn.domain.vdmn.VDmnRule;
import de.unikoblenz.fgbks.core.dmn.domain.vdmn.VDmnValue; 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.VTypeRef;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import org.apache.commons.lang3.Validate; import org.apache.commons.lang3.Validate;
...@@ -43,21 +46,36 @@ public class VDmnFunctions { ...@@ -43,21 +46,36 @@ public class VDmnFunctions {
.collect(Collectors.toList()); .collect(Collectors.toList());
} }
public static List<VDmnValue> getColumnValuesInRules(VDmnColumn column, List<RuleId> ruleIds) { public static List<VDmnValue> getColumnValuesInRules(VDmnColumn column, List<VDmnRule> rules) {
return getColumnValuesInRuleIds(
column, rules.stream().map(VDmnRule::getRuleId).collect(Collectors.toList()));
}
public static List<VDmnValue> getColumnValuesInRuleIds(VDmnColumn column, List<RuleId> ruleIds) {
return column.getValues().stream() return column.getValues().stream()
.filter(v -> ruleIds.contains(v.getRuleId())) .filter(v -> ruleIds.contains(v.getRuleId()))
.collect(Collectors.toList()); .collect(Collectors.toList());
} }
public static List<VDmnInputValue> getColumnValuesInRules( public static List<VDmnInputValue> getColumnValuesInRules(
VDmnInputColumn column, List<VDmnRule> rules) {
return getColumnValuesInRuleIds(
column, rules.stream().map(VDmnRule::getRuleId).collect(Collectors.toList()));
}
public static List<VDmnInputValue> getColumnValuesInRuleIds(
VDmnInputColumn column, List<RuleId> ruleIds) { VDmnInputColumn column, List<RuleId> ruleIds) {
return column.getInputValues().stream() return column.getInputValues().stream()
.filter(v -> ruleIds.contains(v.getRuleId())) .filter(v -> ruleIds.contains(v.getRuleId()))
.collect(Collectors.toList()); .collect(Collectors.toList());
} }
public boolean differentConclusions(List<RuleId> ruleIds) { public boolean differentConclusions(List<VDmnRule> ruleIds) {
// TODO // TODO
return false; return false;
} }
public List<VDmnRule> getRulesWithEqualOutput(VDmnDecisionTable dmnDecisionTable) {
return Collections.emptyList();
}
} }
...@@ -2,7 +2,6 @@ package de.unikoblenz.fgbks.core.dmn.verification.verifier.impl; ...@@ -2,7 +2,6 @@ package de.unikoblenz.fgbks.core.dmn.verification.verifier.impl;
import static de.unikoblenz.fgbks.base.utils.boundary.checker.BoundaryCheckType.IS_EQUAL; import static de.unikoblenz.fgbks.base.utils.boundary.checker.BoundaryCheckType.IS_EQUAL;
import de.unikoblenz.fgbks.core.dmn.domain.ids.RuleId;
import de.unikoblenz.fgbks.core.dmn.domain.vdmn.VDmnDecision; import de.unikoblenz.fgbks.core.dmn.domain.vdmn.VDmnDecision;
import de.unikoblenz.fgbks.core.dmn.domain.vdmn.VDmnDecisionTable; import de.unikoblenz.fgbks.core.dmn.domain.vdmn.VDmnDecisionTable;
import de.unikoblenz.fgbks.core.dmn.domain.vdmn.VDmnInputColumn; import de.unikoblenz.fgbks.core.dmn.domain.vdmn.VDmnInputColumn;
...@@ -35,30 +34,25 @@ public class IdenticalVerifier extends AbstractVerifier { ...@@ -35,30 +34,25 @@ public class IdenticalVerifier extends AbstractVerifier {
private void checkDecisionTable(VDmnDecisionTable dmnDecisionTable) { private void checkDecisionTable(VDmnDecisionTable dmnDecisionTable) {
checkForIdenticalRules( checkForIdenticalRules(
dmnDecisionTable, dmnDecisionTable, dmnDecisionTable.getInputColumns(), 0, dmnDecisionTable.getRules());
dmnDecisionTable.getInputColumns(),
0,
new ArrayList<>(
dmnDecisionTable.getRules().stream()
.map(VDmnRule::getRuleId)
.collect(Collectors.toList())));
} }
protected void checkForIdenticalRules( protected void checkForIdenticalRules(
VDmnDecisionTable dmnDecisionTable, VDmnDecisionTable dmnDecisionTable,
List<VDmnInputColumn> inputs, List<VDmnInputColumn> inputs,
int i, int i,
List<RuleId> currentRuleIds) { List<VDmnRule> currentRules) {
if (i == inputs.size()) { if (i == inputs.size()) {
currentRuleIds.forEach( currentRules.forEach(
ruleId -> rule ->
vref.addElement( vref.addElement(
VerificationResultEntryElement.create(dmnDecisionTable).withIdentifier(ruleId))); VerificationResultEntryElement.create(dmnDecisionTable)
.withIdentifier(rule.getRuleId())));
vref.addToEntry(VerificationClassification.WARNING, "identical"); vref.addToEntry(VerificationClassification.WARNING, "identical");
} else { } else {
List<VDmnInputValue> curInVals = new ArrayList<>(); List<VDmnInputValue> curInVals = new ArrayList<>();
List<VDmnInputValue> sortInVals = List<VDmnInputValue> sortInVals =
VDmnFunctions.getColumnValuesInRules(inputs.get(i), currentRuleIds); VDmnFunctions.getColumnValuesInRules(inputs.get(i), currentRules);
sortInVals.sort(Comparator.comparing(VDmnInputValue::getBoundary)); sortInVals.sort(Comparator.comparing(VDmnInputValue::getBoundary));
VDmnInputValue lastVal = null; VDmnInputValue lastVal = null;
for (VDmnInputValue curVal : sortInVals) { for (VDmnInputValue curVal : sortInVals) {
...@@ -72,7 +66,7 @@ public class IdenticalVerifier extends AbstractVerifier { ...@@ -72,7 +66,7 @@ public class IdenticalVerifier extends AbstractVerifier {
dmnDecisionTable, dmnDecisionTable,
inputs, inputs,
i + 1, i + 1,
curInVals.stream().map(VDmnValue::getRuleId).collect(Collectors.toList())); curInVals.stream().map(VDmnValue::getDmnRule).collect(Collectors.toList()));
} }
curInVals.clear(); curInVals.clear();
} }
...@@ -85,7 +79,7 @@ public class IdenticalVerifier extends AbstractVerifier { ...@@ -85,7 +79,7 @@ public class IdenticalVerifier extends AbstractVerifier {
dmnDecisionTable, dmnDecisionTable,
inputs, inputs,
i + 1, i + 1,
curInVals.stream().map(VDmnValue::getRuleId).collect(Collectors.toList())); curInVals.stream().map(VDmnValue::getDmnRule).collect(Collectors.toList()));
} }
} }
} }
......
...@@ -4,11 +4,11 @@ import static de.unikoblenz.fgbks.base.utils.boundary.checker.BoundaryCheckType. ...@@ -4,11 +4,11 @@ import static de.unikoblenz.fgbks.base.utils.boundary.checker.BoundaryCheckType.
import static de.unikoblenz.fgbks.base.utils.boundary.checker.BoundaryCheckType.IS_OVERLAPPING; import static de.unikoblenz.fgbks.base.utils.boundary.checker.BoundaryCheckType.IS_OVERLAPPING;
import static de.unikoblenz.fgbks.base.utils.boundary.checker.BoundaryCheckType.SUBSUMES; import static de.unikoblenz.fgbks.base.utils.boundary.checker.BoundaryCheckType.SUBSUMES;
import de.unikoblenz.fgbks.core.dmn.domain.ids.RuleId;
import de.unikoblenz.fgbks.core.dmn.domain.vdmn.VDmnDecision; import de.unikoblenz.fgbks.core.dmn.domain.vdmn.VDmnDecision;
import de.unikoblenz.fgbks.core.dmn.domain.vdmn.VDmnDecisionTable; import de.unikoblenz.fgbks.core.dmn.domain.vdmn.VDmnDecisionTable;
import de.unikoblenz.fgbks.core.dmn.domain.vdmn.VDmnInputColumn; import de.unikoblenz.fgbks.core.dmn.domain.vdmn.VDmnInputColumn;
import de.unikoblenz.fgbks.core.dmn.domain.vdmn.VDmnInputValue; import de.unikoblenz.fgbks.core.dmn.domain.vdmn.VDmnInputValue;
import de.unikoblenz.fgbks.core.dmn.domain.vdmn.VDmnRule;
import de.unikoblenz.fgbks.core.dmn.domain.vdmn.VDmnValue; import de.unikoblenz.fgbks.core.dmn.domain.vdmn.VDmnValue;
import de.unikoblenz.fgbks.core.dmn.domain.vdmn.utils.VDmnFunctions; 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.VerificationResultEntry.VerificationClassification;
...@@ -39,7 +39,7 @@ public class OverlappingVerifier extends AbstractVerifier { ...@@ -39,7 +39,7 @@ public class OverlappingVerifier extends AbstractVerifier {
checkOverlapping( checkOverlapping(
new ArrayList<>(dmnDecisionTable.getInputColumns()), new ArrayList<>(dmnDecisionTable.getInputColumns()),
0, 0,
dmnDecisionTable.getRulesIds(), dmnDecisionTable.getRules(),
false, false,
Collections.emptyList()); Collections.emptyList());
} }
...@@ -47,9 +47,9 @@ public class OverlappingVerifier extends AbstractVerifier { ...@@ -47,9 +47,9 @@ public class OverlappingVerifier extends AbstractVerifier {
private void checkOverlapping( private void checkOverlapping(
List<VDmnInputColumn> inColumns, List<VDmnInputColumn> inColumns,
int i, int i,
List<RuleId> currentRuleIds, List<VDmnRule> currentRuleIds,
boolean hasOverlap, boolean hasOverlap,
List<RuleId> subsumptionRules) { List<VDmnRule> subsumptionRules) {
// no more columns to check // no more columns to check
if (i == inColumns.size()) { if (i == inColumns.size()) {
// do nothing, if there was no real overlap found prev.. // do nothing, if there was no real overlap found prev..
...@@ -57,10 +57,10 @@ public class OverlappingVerifier extends AbstractVerifier { ...@@ -57,10 +57,10 @@ public class OverlappingVerifier extends AbstractVerifier {
// add to rules to result // add to rules to result
// TODO // TODO
currentRuleIds.forEach( currentRuleIds.forEach(
ruleId -> rule ->
vref.addElement( vref.addElement(
VerificationResultEntryElement.create(inColumns.get(0).getDmnDecisionTable()) VerificationResultEntryElement.create(inColumns.get(0).getDmnDecisionTable())
.withIdentifier(ruleId))); .withIdentifier(rule.getRuleId())));
vref.addToEntry(VerificationClassification.WARNING, "overlapping"); vref.addToEntry(VerificationClassification.WARNING, "overlapping");
} }
} else { } else {
...@@ -93,11 +93,11 @@ public class OverlappingVerifier extends AbstractVerifier { ...@@ -93,11 +93,11 @@ public class OverlappingVerifier extends AbstractVerifier {
} }
} }
if (foundNotInContact && currentBoundsCpy.size() > 1) { if (foundNotInContact && currentBoundsCpy.size() > 1) {
List<RuleId> newSubsumtionRules = searchSubsubmtionElement(currentBoundsCpy); List<VDmnRule> newSubsumtionRules = searchSubsubmtionElement(currentBoundsCpy);
checkOverlapping( checkOverlapping(
inColumns, inColumns,
i + 1, i + 1,
currentBoundsCpy.stream().map(VDmnValue::getRuleId).collect(Collectors.toList()), currentBoundsCpy.stream().map(VDmnValue::getDmnRule).collect(Collectors.toList()),
hasOverlap hasOverlap
|| foundPOverlap || foundPOverlap
|| (newSubsumtionRules.size() > 0 || (newSubsumtionRules.size() > 0
...@@ -107,12 +107,12 @@ public class OverlappingVerifier extends AbstractVerifier { ...@@ -107,12 +107,12 @@ public class OverlappingVerifier extends AbstractVerifier {
foundPOverlap = false; foundPOverlap = false;
} }
if (z == sortedBounds.size() && currentBounds.size() > 1) { if (z == sortedBounds.size() && currentBounds.size() > 1) {
List<RuleId> newSubsumtionRules = searchSubsubmtionElement(currentBounds); List<VDmnRule> newSubsumtionRules = searchSubsubmtionElement(currentBounds);
// check if // check if
checkOverlapping( checkOverlapping(
inColumns, inColumns,
i + 1, i + 1,
currentBounds.stream().map(VDmnValue::getRuleId).collect(Collectors.toList()), currentBounds.stream().map(VDmnValue::getDmnRule).collect(Collectors.toList()),
hasOverlap hasOverlap
|| foundOverlap || foundOverlap
|| (newSubsumtionRules.size() > 0 || (newSubsumtionRules.size() > 0
...@@ -125,10 +125,10 @@ public class OverlappingVerifier extends AbstractVerifier { ...@@ -125,10 +125,10 @@ public class OverlappingVerifier extends AbstractVerifier {
} }
} }
private boolean containsNoDuplicateRows(List<RuleId> ri1, List<RuleId> ri2) { private boolean containsNoDuplicateRows(List<VDmnRule> ri1, List<VDmnRule> ri2) {
for (RuleId r1 : ri1) { for (VDmnRule r1 : ri1) {
for (RuleId r2 : ri2) { for (VDmnRule r2 : ri2) {
if (r1.equals(r2)) { if (r1.getRuleId().equals(r2.getRuleId())) {
return false; return false;
} }
} }
...@@ -136,8 +136,8 @@ public class OverlappingVerifier extends AbstractVerifier { ...@@ -136,8 +136,8 @@ public class OverlappingVerifier extends AbstractVerifier {
return true; return true;
} }
private List<RuleId> searchSubsubmtionElement(List<VDmnInputValue> inValues) { private List<VDmnRule> searchSubsubmtionElement(List<VDmnInputValue> inValues) {
List<RuleId> subsubmtionRules = new ArrayList<>(); List<VDmnRule> subsubmtionRules = new ArrayList<>();
outer: outer:
for (VDmnInputValue value : inValues) { for (VDmnInputValue value : inValues) {
boolean containsSubsumption = false; boolean containsSubsumption = false;
...@@ -150,7 +150,7 @@ public class OverlappingVerifier extends AbstractVerifier { ...@@ -150,7 +150,7 @@ public class OverlappingVerifier extends AbstractVerifier {
} }
} }
if (containsSubsumption) { if (containsSubsumption) {
subsubmtionRules.add(value.getRuleId()); subsubmtionRules.add(value.getDmnRule());
} }
} }
return subsubmtionRules; return subsubmtionRules;
......
...@@ -3,7 +3,6 @@ package de.unikoblenz.fgbks.core.dmn.verification.verifier.impl; ...@@ -3,7 +3,6 @@ package de.unikoblenz.fgbks.core.dmn.verification.verifier.impl;
import static de.unikoblenz.fgbks.base.utils.boundary.checker.BoundaryCheckType.IS_EQUAL; import static de.unikoblenz.fgbks.base.utils.boundary.checker.BoundaryCheckType.IS_EQUAL;
import static de.unikoblenz.fgbks.base.utils.boundary.checker.BoundaryCheckType.SUBSUMES; import static de.unikoblenz.fgbks.base.utils.boundary.checker.BoundaryCheckType.SUBSUMES;
import de.unikoblenz.fgbks.core.dmn.domain.ids.RuleId;
import de.unikoblenz.fgbks.core.dmn.domain.vdmn.VDmnDecision; import de.unikoblenz.fgbks.core.dmn.domain.vdmn.VDmnDecision;
import de.unikoblenz.fgbks.core.dmn.domain.vdmn.VDmnDecisionTable; import de.unikoblenz.fgbks.core.dmn.domain.vdmn.VDmnDecisionTable;
import de.unikoblenz.fgbks.core.dmn.domain.vdmn.VDmnInputColumn; import de.unikoblenz.fgbks.core.dmn.domain.vdmn.VDmnInputColumn;
...@@ -38,14 +37,15 @@ public class SubsumptionVerifier extends AbstractVerifier { ...@@ -38,14 +37,15 @@ public class SubsumptionVerifier extends AbstractVerifier {
checkSubsumptions( checkSubsumptions(
new ArrayList<>(dmnDecisionTable.getInputColumns()), new ArrayList<>(dmnDecisionTable.getInputColumns()),
0, 0,
dmnDecisionTable.getRulesIds(), dmnDecisionTable.getRules(),
false, false,
Collections.emptyList()); Collections.emptyList());
} }
private void checkSubsumptions(List<VDmnInputColumn> inColumns, private void checkSubsumptions(
List<VDmnInputColumn> inColumns,
int i, int i,
List<RuleId> currentRuleIds, List<VDmnRule> currentRuleIds,
boolean hasSubsumption, boolean hasSubsumption,
List<VDmnRule> currentRootSubsumptionElements) { List<VDmnRule> currentRootSubsumptionElements) {
if (i == inColumns.size()) { if (i == inColumns.size()) {
...@@ -53,10 +53,10 @@ public class SubsumptionVerifier extends AbstractVerifier { ...@@ -53,10 +53,10 @@ public class SubsumptionVerifier extends AbstractVerifier {
// add to rules to result // add to rules to result
// TODO // TODO
currentRuleIds.forEach( currentRuleIds.forEach(
ruleId -> rule ->
vref.addElement( vref.addElement(
VerificationResultEntryElement.create(inColumns.get(0).getDmnDecisionTable()) VerificationResultEntryElement.create(inColumns.get(0).getDmnDecisionTable())
.withIdentifier(ruleId))); .withIdentifier(rule.getRuleId())));
vref.addToEntry(VerificationClassification.WARNING, "subsumption"); vref.addToEntry(VerificationClassification.WARNING, "subsumption");
} }
} else { } else {
...@@ -139,10 +139,10 @@ public class SubsumptionVerifier extends AbstractVerifier { ...@@ -139,10 +139,10 @@ public class SubsumptionVerifier extends AbstractVerifier {
if (clusters.get(y) != null) { if (clusters.get(y) != null) {
List<VDmnInputValue> c2 = clusters.get(y); List<VDmnInputValue> c2 = clusters.get(y);
if (x != y if (x != y
&& ((!subsumptionValue.get(x).isEmpty() && !subsumptionValue.get(y).isEmpty()) && ((!subsumptionValue.get(x).isEmpty() && !subsumptionValue.get(y).isEmpty())
|| ((subsumptionValue.get(x).isEmpty() && subsumptionValue.get(y).isEmpty()) || ((subsumptionValue.get(x).isEmpty() && subsumptionValue.get(y).isEmpty())
&& c1.containsAll(c2) && c1.containsAll(c2)
&& c2.containsAll(c1)))) { && c2.containsAll(c1)))) {
if (c1.containsAll(c2)) { if (c1.containsAll(c2)) {
clusters.set(y, null); clusters.set(y, null);
} }
...@@ -158,15 +158,13 @@ public class SubsumptionVerifier extends AbstractVerifier { ...@@ -158,15 +158,13 @@ public class SubsumptionVerifier extends AbstractVerifier {
checkSubsumptions( checkSubsumptions(
inColumns, inColumns,
i + 1, i + 1,
vals.stream().map(VDmnInputValue::getRuleId).collect(Collectors.toList()), vals.stream().map(VDmnInputValue::getDmnRule).collect(Collectors.toList()),
subsumptions.get(x) || hasSubsumption, subsumptions.get(x) || hasSubsumption,
subsumptionValue.get(x) subsumptionValue.get(x).stream()
.stream().map(VDmnValue::getDmnRule) .map(VDmnValue::getDmnRule)
.collect(Collectors.toList())); .collect(Collectors.toList()));
} }
} }
} }
} }
} }
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