diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/domain/vdmn/utils/VDmnFunctions.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/domain/vdmn/utils/VDmnFunctions.java index 8ce99e980b5f15ed14ba1d0f36ee0b078adbb108..4c504b213a3cc6240488e210727c28f2abd4eb66 100644 --- a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/domain/vdmn/utils/VDmnFunctions.java +++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/domain/vdmn/utils/VDmnFunctions.java @@ -161,11 +161,11 @@ public class VDmnFunctions { return true; } for (int i = 0; i < oneRule.getDmnOutputValues().size(); i++) { - if (oneRule + if (!oneRule .getDmnOutputValues() .get(i) .getText() - .equals(otherRule.getDmnOutputValues().get(0).getText())) { + .equals(otherRule.getDmnOutputValues().get(i).getText())) { return true; } } diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/classification/AbstractClassificationType.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/classification/AbstractClassificationType.java index 3657db50c1401f71decbb454415a34966af4c4db..923bfa55d064d2df49e696f4eb68ec7e9e61c482 100644 --- a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/classification/AbstractClassificationType.java +++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/classification/AbstractClassificationType.java @@ -6,18 +6,29 @@ import de.unikoblenz.fgbks.base.domain.Name; public abstract class AbstractClassificationType implements ClassificationType { protected Name name; + protected Name niceName; protected Description description; - protected AbstractClassificationType(Name name, Description description) { + protected AbstractClassificationType(Name name, Name niceName, Description description) { this.name = name; + this.niceName = niceName; this.description = description; } + protected AbstractClassificationType(Name name, Description description) { + this(name, new Name(name), description); + } + @Override public Name getName() { return name; } + @Override + public Name getNiceName() { + return niceName; + } + @Override public Description getDescription() { return description; diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/classification/ClassificationType.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/classification/ClassificationType.java index e4359deaeef5a4d2fe540b0f4ecc85369ef0e9e2..b70195a0b7b5ce2f5acabed76f8291d691967afd 100644 --- a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/classification/ClassificationType.java +++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/classification/ClassificationType.java @@ -12,6 +12,10 @@ public interface ClassificationType extends Serializable { @JsonbProperty("name") Name getName(); + @NotNull + @JsonbProperty("niceName") + Name getNiceName(); + @NotNull @JsonbProperty("description") Description getDescription(); diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/classification/DecisionLogicLevelVerification.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/classification/DecisionLogicLevelVerification.java index a6e88e7a7b0590fae1c398551526b140999def66..f015e91f24f6449adfae1474c980f3d49c29eb30 100644 --- a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/classification/DecisionLogicLevelVerification.java +++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/classification/DecisionLogicLevelVerification.java @@ -10,7 +10,7 @@ public class DecisionLogicLevelVerification extends AbstractClassificationType { new DecisionLogicLevelVerification(); private DecisionLogicLevelVerification() { - super(new Name("DecisionLogic"), new Description("test")); // TODO + super(new Name("DecisionLogic"), new Name("Decision Logic"), new Description("test")); // TODO } public static DecisionLogicLevelVerification getInstance() { diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/classification/DrdModelingLevelVerification.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/classification/DrdModelingLevelVerification.java index 6de26519a2b797c7da11ef380ae6a4464ea08464..3feb19570b8d8cad8ef3e8f7efa77676d373b8ab 100644 --- a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/classification/DrdModelingLevelVerification.java +++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/classification/DrdModelingLevelVerification.java @@ -6,11 +6,10 @@ import de.unikoblenz.fgbks.base.domain.Name; @Classification public class DrdModelingLevelVerification extends AbstractClassificationType { - private static final DrdModelingLevelVerification instance = - new DrdModelingLevelVerification(); + private static final DrdModelingLevelVerification instance = new DrdModelingLevelVerification(); private DrdModelingLevelVerification() { - super(new Name("DrdModeling"), new Description("test")); // TODO + super(new Name("DrdModeling"), new Name("DRD Modeling"), new Description("test")); // TODO } public static DrdModelingLevelVerification getInstance() { diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/impl/PartialReductionVerifier.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/impl/PartialReductionVerifier.java index f95267dfd25e4ca1dd43d73f51cf53d48d8b6803..38aca480857e44095531b9f35087c071b6c960ea 100644 --- a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/impl/PartialReductionVerifier.java +++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/impl/PartialReductionVerifier.java @@ -32,8 +32,7 @@ public class PartialReductionVerifier extends AbstractVerifier { List<List<VDmnRule>> identicalOutputCluster = VDmnFunctions.getRuleClustersWithIdenticalOutput(dmnDecisionTable); List<VDmnInputColumn> inColumns = dmnDecisionTable.getInputColumns(); - identicalOutputCluster.stream() // do: parallelStream() ? - .forEach(c -> findPartialReduction(inColumns, 0, c, false)); + identicalOutputCluster.forEach(c -> findPartialReduction(inColumns, 0, c, false)); } private void findPartialReduction( @@ -46,7 +45,7 @@ public class PartialReductionVerifier extends AbstractVerifier { VerificationResultEntryElement.create(inColumns.get(0).getDmnDecisionTable()) .withIdentifier(rule.getRuleId()))); vreFactory.addVerificationFix(SHOW_RULES); - vreFactory.addToEntry(VerificationClassification.WARNING, "PartialReduction"); + vreFactory.addToEntry(VerificationClassification.INFO, "PartialReduction"); } } else { List<VDmnInputValue> rules = diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/AbstractVerificationType.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/AbstractVerificationType.java index f81cf28f833dadc2d664222a13e79ac3c136114e..2c66966f9545ce76233cfed1f34655f23fbb4e52 100644 --- a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/AbstractVerificationType.java +++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/AbstractVerificationType.java @@ -7,18 +7,29 @@ import java.util.Objects; public abstract class AbstractVerificationType implements VerificationType { protected Name name; + protected Name niceName; protected Description description; - protected AbstractVerificationType(Name name, Description description) { + protected AbstractVerificationType(Name name, Name niceName, Description description) { this.name = name; + this.niceName = niceName; this.description = description; } + protected AbstractVerificationType(Name name, Description description) { + this(name, new Name(name), description); + } + @Override public Name getName() { return name; } + @Override + public Name getNiceName() { + return niceName; + } + @Override public Description getDescription() { return description; diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/DateVerification.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/DateVerification.java index 01f7b7bba5bcc4d6ac0f19e57da3932ce22351f2..64ea2417a3c1373bbff9487170f984cdf176a169 100644 --- a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/DateVerification.java +++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/DateVerification.java @@ -12,7 +12,10 @@ public class DateVerification extends AbstractVerificationType { private static final DateVerification instance = new DateVerification(); private DateVerification() { - super(new Name("DateFormatCheck"), new Description("test")); // TODO + super( + new Name("DateFormatVerification"), + new Name("Date Format Check"), + new Description("test")); // TODO } public static DateVerification getInstance() { diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/EmptyOutputVerification.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/EmptyOutputVerification.java index 5c7c7a14e3a796acfbf465f4bb4b13a80a038aef..842123728b944f2cbaecb3f9984b164b55fcff76 100644 --- a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/EmptyOutputVerification.java +++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/EmptyOutputVerification.java @@ -12,7 +12,10 @@ public class EmptyOutputVerification extends AbstractVerificationType { private static final EmptyOutputVerification instance = new EmptyOutputVerification(); private EmptyOutputVerification() { - super(new Name("EmptyOutputVerification"), new Description("test")); // TODO + super( + new Name("EmptyOutputVerification"), + new Name("Empty Output"), + new Description("test")); // TODO } public static EmptyOutputVerification getInstance() { diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/EquivalentStringVerification.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/EquivalentStringVerification.java index d6285899bd424bc2573cdf23464ff66aec5f12cc..90803b7eb3f5df8f87324ecbcace54910425a0aa 100644 --- a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/EquivalentStringVerification.java +++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/EquivalentStringVerification.java @@ -12,7 +12,10 @@ public class EquivalentStringVerification extends AbstractVerificationType { private static final EquivalentStringVerification instance = new EquivalentStringVerification(); private EquivalentStringVerification() { - super(new Name("EquivalentStringVerification"), new Description("test")); // TODO + super( + new Name("EquivalentStringVerification"), + new Name("Equivalent Strings"), + new Description("test")); // TODO } public static EquivalentStringVerification getInstance() { diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/IdenticalBusinessRuleVerification.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/IdenticalBusinessRuleVerification.java index eb60d8e39b1e7afd49fb73f6d1a58fb3056759d3..749bd5b0dd06f77a8013876d58634f3b636f1602 100644 --- a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/IdenticalBusinessRuleVerification.java +++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/IdenticalBusinessRuleVerification.java @@ -13,7 +13,7 @@ public class IdenticalBusinessRuleVerification extends AbstractVerificationType new IdenticalBusinessRuleVerification(); private IdenticalBusinessRuleVerification() { - super(new Name("IdenticalBusinessRuleVerification"), new Description("test")); // TODO + super(new Name("Identical Rules"), new Description("test")); // TODO } public static IdenticalBusinessRuleVerification getInstance() { diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/InputValueSyntaxVerification.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/InputValueSyntaxVerification.java index da582ddef3368cf69fe5d155de30b3579f3aed12..a4112152d1eccbcd449a5f74c33cb77cfb8a4b9d 100644 --- a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/InputValueSyntaxVerification.java +++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/InputValueSyntaxVerification.java @@ -14,6 +14,7 @@ public class InputValueSyntaxVerification extends AbstractVerificationType { private InputValueSyntaxVerification() { super( new Name("InputValueSyntaxVerification"), + new Name("Input Value Syntax Check"), new Description("Check values for syntactical correctness.")); } diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/LonelyDataInputVerification.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/LonelyDataInputVerification.java index 201bfa5aef1e5354d907e2096ca0f81be6075d0e..f4a03689c663dc915cbbe823933090b2d83fff76 100644 --- a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/LonelyDataInputVerification.java +++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/LonelyDataInputVerification.java @@ -14,6 +14,7 @@ public class LonelyDataInputVerification extends AbstractVerificationType { private LonelyDataInputVerification() { super( new Name("LonelyDataInputVerification"), + new Name("Lonely Data Input"), new Description( "Checks for any input data node, if it has no connection to at least one decision table.")); } diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/MissingInputColumnVerification.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/MissingInputColumnVerification.java index 01a42585cf32705d3d038dff4c32474e3f298dd2..6a5ce32fc2d841bf68fd0c1d283b371edefff137 100644 --- a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/MissingInputColumnVerification.java +++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/MissingInputColumnVerification.java @@ -15,8 +15,8 @@ public class MissingInputColumnVerification extends AbstractVerificationType { private MissingInputColumnVerification() { super( new Name("MissingInputColumnVerification"), - new Description( - "todo")); // TODO englisch + new Name("Missing Input Column"), + new Description("todo")); // TODO } public static MissingInputColumnVerification getInstance() { diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/MissingInputDataVerification.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/MissingInputDataVerification.java index 1aea630323759b6d0877b853ee7f7679f05f3a44..64cdb7a1a13065a101ded20df616a3cd3652c205 100644 --- a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/MissingInputDataVerification.java +++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/MissingInputDataVerification.java @@ -15,8 +15,9 @@ public class MissingInputDataVerification extends AbstractVerificationType { private MissingInputDataVerification() { super( new Name("MissingInputDataVerification"), + new Name("Missing Input Data"), new Description( - "todo")); // TODO englisch + "todo")); // TODO } public static MissingInputDataVerification getInstance() { diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/MissingRuleVerification.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/MissingRuleVerification.java index 3fbcb580bb56bc6dbe1881cab2a6157289f1f465..7143891d88502d879f063fbcb2e2c6e2e862480f 100644 --- a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/MissingRuleVerification.java +++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/MissingRuleVerification.java @@ -12,7 +12,10 @@ public class MissingRuleVerification extends AbstractVerificationType { private static final MissingRuleVerification instance = new MissingRuleVerification(); private MissingRuleVerification() { - super(new Name("MissingRuleVerification"), new Description("test")); // TODO + super( + new Name("MissingRuleVerification"), + new Name("Missing Rule"), + new Description("test")); // TODO } public static MissingRuleVerification getInstance() { diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/OverlappingVerification.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/OverlappingVerification.java index ccf21864b6c935bcaa6338ac3bcd89d06d7106d1..c46f899de87d925b17292dcde594811269f8a2b6 100644 --- a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/OverlappingVerification.java +++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/OverlappingVerification.java @@ -12,7 +12,10 @@ public class OverlappingVerification extends AbstractVerificationType { private static final OverlappingVerification instance = new OverlappingVerification(); private OverlappingVerification() { - super(new Name("OverlappingVerification"), new Description("test")); // TODO + super( + new Name("OverlappingVerification"), + new Name("Overlapping Rules"), + new Description("test")); // TODO } public static OverlappingVerification getInstance() { diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/PartialReductionVerification.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/PartialReductionVerification.java index f8d1476982396ad6c49f4c9027b418d1eae6f173..16f050f857f3d76a39d269ed56a0f2504c254222 100644 --- a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/PartialReductionVerification.java +++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/PartialReductionVerification.java @@ -12,7 +12,10 @@ public class PartialReductionVerification extends AbstractVerificationType { private static final PartialReductionVerification instance = new PartialReductionVerification(); private PartialReductionVerification() { - super(new Name("PartialReductionVerification"), new Description("test")); // TODO + super( + new Name("PartialReductionVerification"), + new Name("Partial Reductions"), + new Description("test")); // TODO } public static PartialReductionVerification getInstance() { diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/PredefinedExistingValueVerification.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/PredefinedExistingValueVerification.java index c15ae69f9f7d523f445fc9b22389a0c4d778f8f2..f8b941b013911ebf6dd8b95ae09160692849e855 100644 --- a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/PredefinedExistingValueVerification.java +++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/PredefinedExistingValueVerification.java @@ -14,6 +14,7 @@ public class PredefinedExistingValueVerification extends AbstractVerificationTyp private PredefinedExistingValueVerification() { super( new Name("PredefinedExistingValueVerification"), + new Name("Predefined Existing Values"), new Description( "Es gibt in einer Tabellen-Zelle einen String Value, der aber nicht in der Liste der " + "Predefines Values vorgesehen ist.")); // TODO englisch diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/PredefinedMissingValueVerification.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/PredefinedMissingValueVerification.java index 5e1026be663aa41f95d6bff4944655c5e757d317..803cc04aee026f7324ce36099b448bf608a4c386 100644 --- a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/PredefinedMissingValueVerification.java +++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/PredefinedMissingValueVerification.java @@ -15,6 +15,7 @@ public class PredefinedMissingValueVerification extends AbstractVerificationType private PredefinedMissingValueVerification() { super( new Name("PredefinedMissingValueVerification"), + new Name("Predefined Missing Values"), new Description( "Es gibt in einer Tabellen-Zelle predefines values, die jedoch nicht in der spalte vorhanden sind.")); // TODO englisch } diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/SubsumptionVerification.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/SubsumptionVerification.java index 5bd61e143163bdd88cc84c4ddbf2b61b96d21b6d..f62160003aa2cb23a8145fa58114a3f20c15416e 100644 --- a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/SubsumptionVerification.java +++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/SubsumptionVerification.java @@ -12,7 +12,10 @@ public class SubsumptionVerification extends AbstractVerificationType { private static final SubsumptionVerification instance = new SubsumptionVerification(); private SubsumptionVerification() { - super(new Name("SubsumptionVerification"), new Description("test")); // TODO + super( + new Name("SubsumptionVerification"), + new Name("Rule Subsumptions"), + new Description("test")); // TODO } public static SubsumptionVerification getInstance() { diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/VerificationType.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/VerificationType.java index b9a06e118bed98ee8c0ea0937b19b0fb92a7a779..795af33b7307ba4c097cc5c466dc81ec61184d59 100644 --- a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/VerificationType.java +++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/VerificationType.java @@ -17,6 +17,10 @@ public interface VerificationType extends ValueObject { @JsonbProperty("name") Name getName(); + @NotNull + @JsonbProperty("niceName") + Name getNiceName(); + @NotNull @JsonbProperty("description") Description getDescription(); diff --git a/dmnverifierapi/src/main/resources/application.properties b/dmnverifierapi/src/main/resources/application.properties index 268acffe8af465516e386fcef0c95dbd0c6ce1f9..edf2982dad7df27af650d5837f62c75a3c36b63e 100644 --- a/dmnverifierapi/src/main/resources/application.properties +++ b/dmnverifierapi/src/main/resources/application.properties @@ -1,9 +1,10 @@ # Configuration file # Quarkus cors settings quarkus.http.cors=true -quarkus.http.cors.origins=http://localhost:8081,http://localhost:80 +%dev.quarkus.http.cors.origins=http://localhost:8081,http://192.168.2.109:8081 +quarkus.http.cors.origins=http://localhost,http://dmn.fg-bks.uni-koblenz.de,http://141.26.209.83 quarkus.http.cors.headers=accept,authorization,content-type,x-requested-with -quarkus.http.cors.methods=GET, POST, OPTIONS +quarkus.http.cors.methods=GET,POST,OPTIONS # Amount of threads for calculating the verifications verifier.threads=8 # No parallel execution in dev mode diff --git a/dmnverifierfrontend/src/main/resources/META-INF/resources/css/img/download.png b/dmnverifierfrontend/src/main/resources/META-INF/resources/css/img/download.png new file mode 100644 index 0000000000000000000000000000000000000000..118d3b511c4a005e1a060b2ec8eb82e8d8345b2e Binary files /dev/null and b/dmnverifierfrontend/src/main/resources/META-INF/resources/css/img/download.png differ diff --git a/dmnverifierfrontend/src/main/resources/META-INF/resources/css/img/emptyFile.png b/dmnverifierfrontend/src/main/resources/META-INF/resources/css/img/emptyFile.png new file mode 100644 index 0000000000000000000000000000000000000000..95019a7052813523866796d1a3dee5f66cac2a1d Binary files /dev/null and b/dmnverifierfrontend/src/main/resources/META-INF/resources/css/img/emptyFile.png differ diff --git a/dmnverifierfrontend/src/main/resources/META-INF/resources/css/img/upload.png b/dmnverifierfrontend/src/main/resources/META-INF/resources/css/img/upload.png new file mode 100644 index 0000000000000000000000000000000000000000..5bb7a0204efdd0579e2bf95c9b81a7f3af5072b8 Binary files /dev/null and b/dmnverifierfrontend/src/main/resources/META-INF/resources/css/img/upload.png differ diff --git a/dmnverifierfrontend/src/main/resources/META-INF/resources/css/stylesheets.css b/dmnverifierfrontend/src/main/resources/META-INF/resources/css/stylesheets.css index 9e325afc19c6b8a900c70941d6735e44bd1978ab..5f71bf1044bd933905aee94e64c7ebda19e27956 100644 --- a/dmnverifierfrontend/src/main/resources/META-INF/resources/css/stylesheets.css +++ b/dmnverifierfrontend/src/main/resources/META-INF/resources/css/stylesheets.css @@ -1,20 +1,153 @@ +/** General configuration */ html, body { - height: 100%; padding: 0; - margin: 0; - font-size: 10pt; + font-size: 11pt; +} + +h1 { + font-weight: 400; + line-height: 1.2; + font-size: 1.8em; + font-family: Impact, Charcoal, sans-serif; + margin-top: 8px; + color: #0b3004; } h2 { margin: 10px; } -input { - color: blue; +select { + -moz-appearance: none; + -webkit-appearance: none; + appearance: none; + border: none; + border-radius: 2px; + color: #0b3004; + cursor: pointer; + font-family: 'Open Sans', sans-serif; + font-size: 14px; + height: 35px; + outline: none; + padding-left: 5px; +} + +select option { + color: #000; +} + +select optgroup { + color: #111; +} + +select::-ms-expand { + display: none; +} + +select:focus::-ms-value { + background-color: transparent; +} + +.clickable { + box-shadow: 2px 2px 3px 2px rgba(0, 0, 0, .3); +} + +.clickable:hover { + box-shadow: 1px 1px 2px 1px rgba(0, 0, 0, .3); +} + +.clickable:active { + box-shadow: 0 0 1px 0 rgba(0, 0, 0, .3); +} + +/** Top-line configuration */ + +.dmn-root { + margin: -2px; +} + +.dmn-top { + height: 60px; + padding-left: 6px; + padding-top: 6px; + display: flex; + flex-direction: row; + justify-content: space-around; +} + +.dmn-top-item { + flex-grow: 20; +} + +.dmn-top-item > input { + display: none; +} + +.dmn-top-item > label { + height: 52px; + border: 2px solid #0b3004; + border-radius: 5px; + display: block; + background-size: cover; + background-position: center; +} + +.dmn-upload { + flex-grow: 1; + border: 2px black; +} + +.dmn-upload > label { + background-image: url("img/upload.png"); + width: 50px; +} + +.dmn-empty-file { + flex-grow: 1; +} + +.dmn-empty-file > label { + background-image: url("img/emptyFile.png"); + width: 50px; +} + +.dmn-download { + flex-grow: 1; +} + +.dmn-download > label { + background-image: url("img/download.png"); + width: 50px; +} + +/** Verifier configuration */ + +#dmn-verifier-header { + padding: 3px; + display: flex; + justify-content: flex-start; + align-items: flex-start; +} + +#dmn-button-verify { + flex-grow: 1; + max-width: 90px; + height: 35px; + background: white; + border-radius: 2px; +} + +.dmn-verifier-header-item { + margin: 8px 12px; +} + +.dmn-verifier-select { + flex-grow: 4; } -#dmn-file-upload { - width: 100%; +#dmn-verifier-types { + flex-grow: 1; + max-width: 200px; } .dmn-ERROR { @@ -29,6 +162,6 @@ input { list-style-image: url("img/FATAL_ERROR.png"); } -.dmn-INFORMATION { +.dmn-INFO { list-style-image: url("img/INFO.png"); } diff --git a/dmnverifierfrontend/src/main/resources/META-INF/resources/dmn/emptyDMN.dmn b/dmnverifierfrontend/src/main/resources/META-INF/resources/dmn/emptyDMN.dmn new file mode 100644 index 0000000000000000000000000000000000000000..73f512d15fe89bed7f3029e37912e153ce10ef34 --- /dev/null +++ b/dmnverifierfrontend/src/main/resources/META-INF/resources/dmn/emptyDMN.dmn @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="UTF-8"?> +<definitions xmlns="http://www.omg.org/spec/DMN/20151101/dmn.xsd" xmlns:biodi="http://bpmn.io/schema/dmn/biodi/1.0" id="Definitions_1kjh9a2" name="DRD" namespace="http://camunda.org/schema/1.0/dmn"> + <decision id="Decision_13nychf" name="Decision 1"> + <extensionElements> + <biodi:bounds x="120" y="145" width="180" height="80" /> + </extensionElements> + <decisionTable id="decisionTable_1"> + <input id="input_1"> + <inputExpression id="inputExpression_1" typeRef="string"> + <text></text> + </inputExpression> + </input> + <output id="output_1" typeRef="string" /> + </decisionTable> + </decision> +</definitions> diff --git a/dmnverifierfrontend/src/main/resources/META-INF/resources/index.html b/dmnverifierfrontend/src/main/resources/META-INF/resources/index.html index 1f17fa29f2f82c43bf2231cd731746d0793530f6..3044c8079aaa6eff2f8684cc55530ce75759066a 100644 --- a/dmnverifierfrontend/src/main/resources/META-INF/resources/index.html +++ b/dmnverifierfrontend/src/main/resources/META-INF/resources/index.html @@ -18,22 +18,42 @@ <link href="css/dmnEditorTabs.css" rel="stylesheet" type="text/css"/> </head> <body> -<input id="dmn-file-upload" type="file"> -<div id="content-dmn"> - <div class="editor-parent"> - <div class="editor-container"></div> - <div class="editor-tabs"></div> +<div class="dmn-root"> + <div class="dmn-top"> + <div class="dmn-top-item dmn-upload"> + <label class="clickable" for="dmn-file-upload"> + </label> + <input id="dmn-file-upload" type="file"/> + </div> + <div class="dmn-top-item dmn-empty-file"> + <label class="clickable" for="dmn-file-empty"> + </label> + <input id="dmn-file-empty" type="button"/> + </div> + <div class="dmn-top-item dmn-download"> + <label class="clickable" for="dmn-file-download"> + </label> + <input id="dmn-file-download" type="button"/> + </div> + <div class="dmn-top-item"> + <h1>Verification for Decision Modeling Notation</h1> + </div> </div> + <div id="content-dmn"> + <div class="editor-parent"> + <div class="editor-container"></div> + <div class="editor-tabs"></div> + </div> + </div> + <div id="root-dmn-verifier"></div> </div> -<div id="root-dmn-verifier"></div> -</div> - <!-- load jquery --> <script src="https://unpkg.com/jquery@3.4.1/dist/jquery.js" type="text/javascript"></script> <!-- load dmn modeler --> <script src="https://unpkg.com/dmn-js@7.0.1/dist/dmn-modeler.development.js"></script> -<script src="js/upload.js" type="text/javascript"></script> +<script src="js/dmnUpload.js" type="text/javascript"></script> +<script src="js/dmnDownload.js" type="text/javascript"></script> <script src="js/dmnViewer.js" type="text/javascript"></script> <script src="js/dmnVerifier.js" type="text/javascript"></script> </body> diff --git a/dmnverifierfrontend/src/main/resources/META-INF/resources/js/dmnDownload.js b/dmnverifierfrontend/src/main/resources/META-INF/resources/js/dmnDownload.js new file mode 100644 index 0000000000000000000000000000000000000000..7b627084e44eb89c8dbdfeab58565efc3af1bc7b --- /dev/null +++ b/dmnverifierfrontend/src/main/resources/META-INF/resources/js/dmnDownload.js @@ -0,0 +1,14 @@ +document.addEventListener("DOMContentLoaded", function () { + $('#dmn-file-download').on('click', exportDiagram()); +}); + +function download(filename, dmnXml) { + let el = document.createElement('a'); + el.setAttribute('href', + 'data:text/xml;charset=utf-8,' + encodeURIComponent(dmnXml)); + el.setAttribute('download', filename); + el.style.display = 'none'; + document.body.appendChild(el); + el.click(); + document.body.removeChild(el); +} diff --git a/dmnverifierfrontend/src/main/resources/META-INF/resources/js/upload.js b/dmnverifierfrontend/src/main/resources/META-INF/resources/js/dmnUpload.js similarity index 65% rename from dmnverifierfrontend/src/main/resources/META-INF/resources/js/upload.js rename to dmnverifierfrontend/src/main/resources/META-INF/resources/js/dmnUpload.js index 9cdc772b5acab39645c8fc5c4efa6fd460ca1d15..7de06eb124733af9e7736399b0ab2e0476cd8042 100644 --- a/dmnverifierfrontend/src/main/resources/META-INF/resources/js/upload.js +++ b/dmnverifierfrontend/src/main/resources/META-INF/resources/js/dmnUpload.js @@ -1,5 +1,6 @@ document.addEventListener("DOMContentLoaded", function () { $('#dmn-file-upload').on('change', loadDmnFromFile); + $('#dmn-file-empty').on('click', loadEmptyFile); }); function loadDmnFromFile(evt) { @@ -13,4 +14,15 @@ function loadDmnFromFile(evt) { fileReader.readAsText(dmnFile, "UTF-8"); } +function loadEmptyFile() { + $.ajax({ + url: 'dmn/emptyDMN.dmn', + type: 'GET', + contentType: 'text/xml', + success: function (data) { + openDiagram(data); + } + }); +} + diff --git a/dmnverifierfrontend/src/main/resources/META-INF/resources/js/dmnVerificationResultSet..js b/dmnverifierfrontend/src/main/resources/META-INF/resources/js/dmnVerificationResultSet..js index 6161d2df8908769ea025d88b54fc848cf54c0e9a..999e64ea7eec9d898389d7904dc33eb28af335d5 100644 --- a/dmnverifierfrontend/src/main/resources/META-INF/resources/js/dmnVerificationResultSet..js +++ b/dmnverifierfrontend/src/main/resources/META-INF/resources/js/dmnVerificationResultSet..js @@ -55,6 +55,7 @@ * @type {object} * @property {string} description * @property {string} name + * @property {string} niceName * @property {VerificationClassification} classification */ @@ -63,4 +64,5 @@ * @type {object} * @property {string} description * @property {string} name + * * @property {string} niceName */ diff --git a/dmnverifierfrontend/src/main/resources/META-INF/resources/js/dmnVerifier.js b/dmnverifierfrontend/src/main/resources/META-INF/resources/js/dmnVerifier.js index c18f6716558d763be7959765ebcc48442be9e38e..25d9d6fdf738d13ff4041f8807b8bf5ccdff45f7 100644 --- a/dmnverifierfrontend/src/main/resources/META-INF/resources/js/dmnVerifier.js +++ b/dmnverifierfrontend/src/main/resources/META-INF/resources/js/dmnVerifier.js @@ -1,4 +1,4 @@ -let rootUrl = 'http://localhost:8080/'; +let rootUrl = 'http://192.168.2.109:8080/'; let dmnApi = rootUrl + 'api/dmn/'; /** @@ -7,16 +7,61 @@ let dmnApi = rootUrl + 'api/dmn/'; */ let verifierResults = {}; +/** + * + * @type {Array.<VerificationType>} + */ +let types = []; + +let $verifierTypes; + +// load types +$.ajax({ + url: dmnApi + 'verification/type', + type: 'GET', + contentType: 'text/xml', + success: function (data) { + types = data; + // sort types by classification and name + types.sort(function ( + /** VerificationType */ firstEl, /** VerificationType */ secondEl) { + if (firstEl.classification.name + === secondEl.classification.name) { + if (firstEl.niceName === secondEl.niceName) { + return 0; + } + return firstEl.niceName < secondEl.niceName ? -1 : 1; + } else if (firstEl.classification.name + < secondEl.classification.name) { + return -1; + } else { + return 1; + } + }); + $verifierTypes = renderTypeOptions(); + } +}); + function cleanDmnVerifierRoot() { let $root = $('#root-dmn-verifier').empty(); - $root.append($(` - <button id="button-dmn-verify" onClick="checkVerifications()"> - Get verifications</button> + let $header = $(` + <div id="dmn-verifier-header"> + `); + // add types + $header.append($verifierTypes); + // Add Button + $header.append($(` + <button class="clickable dmn-verifier-header-item" id="dmn-button-verify" onClick="checkVerifications()"> + Verify</button> `)); + // add header to root + $root.append($header); + $root.append($(`<div id="dmn-verifier-content">`)); return $root; } function checkVerifications() { + cleanDmnVerifierRoot(); getVerifications(); } @@ -28,8 +73,13 @@ function getVerifications() { } else { console.log('Requesting dmn verifications..'); } + let apiPath = dmnApi + 'verification'; + // check, if a verifier is preselected + if ($verifierTypes[0].selectedOptions[0].value !== 'all') { + apiPath += "/type/" + $verifierTypes[0].selectedOptions[0].value; + } $.ajax({ - url: dmnApi + 'verification', + url: apiPath, type: 'POST', contentType: 'text/xml', data: xml, @@ -63,31 +113,73 @@ function getVerifications() { }); } +function renderTypeOptions() { + let $select = $(` + <select name="verifier" id="dmn-verifier-types" + class="dmn-verifier-header-item dmn-verifier-select clickable"> + `); + $select.append($(`<option value="all">All verifier</option>`)); + let currentOpt = ''; + let $curGroup; + for (let i = 0; i < types.length; i++) { + let bolNewGroup = currentOpt + !== types[i].classification.niceName; + if (bolNewGroup) { + if (currentOpt === currentOpt) { + $select.append($curGroup); + } + $curGroup = ($( + `<optgroup label="${types[i].classification.niceName}"> + `)); + currentOpt = types[i].classification.niceName; + } + $curGroup.append($(` + <option value="${types[i].name}">${types[i].niceName}</option>` + )); + + } + $select.append($curGroup); + return $select; +} + function renderDmnVerifierOptions() { - // reset div - let $root = cleanDmnVerifierRoot(); + let $header = $('#dmn-verifier-header'); let $select = $(` - <select name="verifier" id="verifier" onchange="renderVerifierResult(this)"> + <select name="verifier" id="verifier" + class="dmn-verifier-header-item dmn-verifier-select clickable" + onchange="renderVerifierResult(this)"> `); $select.append($(`<option>Select a verifier</option>`)); let currentOpt = ''; let $curGroup; for (let i = 0; i < verifierResults.verifier.length; i++) { + let verifier = verifierResults.verifier[i]; let bolNewGroup = currentOpt - !== verifierResults.verifier[i].type.classification.name; + !== verifier.type.classification.niceName; if (bolNewGroup) { if (currentOpt === currentOpt) { $select.append($curGroup); } $curGroup = ($( - `<optgroup label="${verifierResults.verifier[i].type.classification.name}"> + `<optgroup label="${verifier.type.classification.niceName}"> `)); - currentOpt = verifierResults.verifier[i].type.classification.name; + currentOpt = verifier.type.classification.niceName; } - $curGroup.append(renderSelectEntry(verifierResults.verifier[i])); + if (verifierResults.verifier.length === 1) { + $curGroup.append($(` + <option value="${verifier.type.name}" selected>${verifier.type.niceName} (${verifier.size})</option> + `)); + } else { + $curGroup.append($(` + <option value="${verifier.type.name}">${verifier.type.niceName} (${verifier.size})</option> + `)); + } + } + $select.append($curGroup); + $header.append($select); + if (verifierResults.verifier.length === 1) { + renderVerifierResult($select[0].selectedOptions[0]); } - $root.append($select); - $root.append($(`<div id="verifier-entries">`)); } /** @@ -97,7 +189,7 @@ function renderDmnVerifierOptions() { */ function renderSelectEntry(verifier) { return $(` - <option value="${verifier.type.name}">${verifier.type.name} (${verifier.size})</option> + <option value="${verifier.type.name}">${verifier.type.niceName} (${verifier.size})</option> `); } @@ -108,11 +200,11 @@ function renderSelectEntry(verifier) { */ function renderVerifierResult(verifierSelect) { let verifier = findVerifierByName(verifierSelect.value); - let $verifierEntries = $('#verifier-entries'); + let $verifierEntries = $('#dmn-verifier-content'); $verifierEntries.empty(); if (verifier !== undefined) { $verifierEntries.append($(` - <div>${verifier.type.name}: ${verifier.type.description}</div> + <div>${verifier.type.niceName}: ${verifier.type.description}</div> `)); let $entryList = $(`<ul>`); $verifierEntries.append($entryList); diff --git a/dmnverifierfrontend/src/main/resources/META-INF/resources/js/dmnViewer.js b/dmnverifierfrontend/src/main/resources/META-INF/resources/js/dmnViewer.js index 71e766c42110353ac8f5ca166e9eb60cfafceecc..19788d5eac86c567f6aae408845e991dcfe6265b 100644 --- a/dmnverifierfrontend/src/main/resources/META-INF/resources/js/dmnViewer.js +++ b/dmnverifierfrontend/src/main/resources/META-INF/resources/js/dmnViewer.js @@ -12,13 +12,15 @@ $tabs.delegate('.tab', 'click', function (e) { dmnModeler.open(view); }); +// calc height +let dmnModelerHeight = $(window).height() / 2.5; /** * * @type {DmnJS} */ let dmnModeler = new DmnJS({ container: $container, - height: 450, + height: dmnModelerHeight, width: '100%', keyboard: { bindTo: window @@ -52,7 +54,7 @@ function exportDiagram() { } else { console.log('saving dmn..'); } - // TODO, download + download("dmnTable.dmn", xml); }); }