diff --git a/dmn-verifier-app/src/main/java/de/unikoblenz/fgbks/dmn/beans/TableDataBean.java b/dmn-verifier-app/src/main/java/de/unikoblenz/fgbks/dmn/beans/TableDataBean.java index bc24d74970ef19a94b6e7dc7a29f99714a30d668..60e625178ed6774f3654feabd75363962b4666c3 100644 --- a/dmn-verifier-app/src/main/java/de/unikoblenz/fgbks/dmn/beans/TableDataBean.java +++ b/dmn-verifier-app/src/main/java/de/unikoblenz/fgbks/dmn/beans/TableDataBean.java @@ -1,10 +1,12 @@ package de.unikoblenz.fgbks.dmn.beans; import de.unikoblenz.fgbks.dmn.core.DmnService; +import de.unikoblenz.fgbks.dmn.core.models.VerifierCollectionResult; import de.unikoblenz.fgbks.dmn.core.models.VerifierResult; import java.io.Serializable; import java.util.Collections; import java.util.List; +import java.util.function.Supplier; import javax.annotation.PostConstruct; import javax.enterprise.context.SessionScoped; import javax.inject.Inject; @@ -18,11 +20,11 @@ public class TableDataBean implements Serializable { private DmnService dmnService; - private List<VerifierResult> verifierResultList; + private VerifierCollectionResult verifierResults; @PostConstruct public void init() { - verifierResultList = Collections.emptyList(); + verifierResults = null; if (dmnBean.getDmnXML() != null && !dmnBean.getDmnXML().isEmpty()) { try { dmnService = DmnService.getDmnServiceFromXml(dmnBean.getDmnXML()); @@ -33,16 +35,31 @@ public class TableDataBean implements Serializable { } public List<VerifierResult> getVerifierResultList() { - return verifierResultList; + return accept(() -> verifierResults.getVerifierResults()); } - public List<VerifierResult> calculateVerifierResults(boolean calculateMultiTable) { + public List<VerifierResult> getVerifierResultListSingleTables() { + return accept(() -> verifierResults.getVerifierResultsSingleTables()); + } + + public List<VerifierResult> getVerifierResultListMultiTables() { + return accept(() -> verifierResults.getVerifierResultsMultiTables()); + } + + private List<VerifierResult> accept(Supplier<List<VerifierResult>> supplier) { + if (verifierResults != null) { + return supplier.get(); + } + return Collections.emptyList(); + } + + public VerifierCollectionResult calculateVerifierResults(boolean calculateMultiTable) { init(); if (dmnService == null) { - verifierResultList = Collections.emptyList(); + verifierResults = null; } else { - verifierResultList = dmnService.getAllVerifier(calculateMultiTable).getVerifierResults(); + verifierResults = dmnService.getAllVerifier(calculateMultiTable); } - return verifierResultList; + return verifierResults; } } diff --git a/dmn-verifier-app/src/main/java/de/unikoblenz/fgbks/dmn/core/models/VerificationResult.java b/dmn-verifier-app/src/main/java/de/unikoblenz/fgbks/dmn/core/models/VerificationResult.java index 0fe95d4b96712e227932f1c90367ffbe0e35da0b..a4e7296fbe91c122cdbab59d12308fe2eb88752c 100644 --- a/dmn-verifier-app/src/main/java/de/unikoblenz/fgbks/dmn/core/models/VerificationResult.java +++ b/dmn-verifier-app/src/main/java/de/unikoblenz/fgbks/dmn/core/models/VerificationResult.java @@ -23,7 +23,7 @@ public class VerificationResult implements Serializable { protected VerificationResult() { super(); - rules = new ArrayList<>(); + rules = new ArrayList<>(5); } @XmlElement(name = "ruleCount") diff --git a/dmn-verifier-app/src/main/java/de/unikoblenz/fgbks/dmn/core/models/VerifierCollectionResult.java b/dmn-verifier-app/src/main/java/de/unikoblenz/fgbks/dmn/core/models/VerifierCollectionResult.java index f1737831619fc4e6cb2fd8ac5d4ace4629b31a99..ddda4bd937d2cfe22acdc58734d04d6eadfbeb7b 100644 --- a/dmn-verifier-app/src/main/java/de/unikoblenz/fgbks/dmn/core/models/VerifierCollectionResult.java +++ b/dmn-verifier-app/src/main/java/de/unikoblenz/fgbks/dmn/core/models/VerifierCollectionResult.java @@ -6,6 +6,7 @@ import java.util.Comparator; import java.util.List; import java.util.Objects; import java.util.concurrent.CopyOnWriteArrayList; +import java.util.stream.Collectors; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; @@ -23,6 +24,18 @@ public class VerifierCollectionResult { return new ArrayList<>(verifierResults); } + public List<VerifierResult> getVerifierResultsSingleTables() { + return getVerifierResults().stream() + .filter(r -> !r.isMultiTable()) + .collect(Collectors.toList()); + } + + public List<VerifierResult> getVerifierResultsMultiTables() { + return getVerifierResults().stream() + .filter(VerifierResult::isMultiTable) + .collect(Collectors.toList()); + } + public static Builder getBuilder() { return new VerifierCollectionResult().new Builder(); } diff --git a/dmn-verifier-app/src/main/webapp/index.xhtml b/dmn-verifier-app/src/main/webapp/index.xhtml index d692b52fa101a74aa335e5841f8e75efb0b97b89..9a9a8d074ae8c3e04718a27b7f8427ecbbc61912 100644 --- a/dmn-verifier-app/src/main/webapp/index.xhtml +++ b/dmn-verifier-app/src/main/webapp/index.xhtml @@ -38,91 +38,135 @@ <script src="js/dmnViewer.js"></script> </h:panelGroup> - <h:form> - <p:commandButton value="Verify" - id="verify-button" - styleClass="dmn-button" - onclick="exportDiagram()" - action="#{buttonBean.validateDmn}" - update="content" - disabled="#{buttonBean.disabled}"/> - - <!-- - <p:selectBooleanCheckbox value="#{buttonBean.calculateMultiTable}" - disabled="#{buttonBean.disabled}" - itemLabel="Calculate Multi Table"/> - --> - <p:commandButton value="Empty DMN" - id="clear-button" - styleClass="dmn-button" - action="#{buttonBean.setEmptyDmn}" - update="content" - ajax="true"/> - - <p:commandButton value="Sample DMN" - id="sample-button" - styleClass="dmn-button" - action="#{buttonBean.setSampleDmn}" - update="content" - ajax="true"/> - - <p:commandButton value="Sample Multi" - id="sample2-button" - styleClass="dmn-button" - action="#{buttonBean.setSampleMultiDmn}" - update="content" - ajax="true"/> - - <p:commandButton value="Download" - id="download-button" - styleClass="dmn-button" - onclick="exportDiagram()" - ajax="false" - disabled="#{buttonBean.disabled}"> - <p:fileDownload value="#{buttonBean.downloadDmn}"/> - </p:commandButton> - </h:form> - <p:ajaxStatus style="display:block;"> - <f:facet name="default"> - </f:facet> - - <f:facet name="start"> - <p:graphicImage style="margin-left: 20px;" name="img/Spinner.gif"/> - </f:facet> - - <f:facet name="complete"> - <p:dataTable var="verifier" - value="#{tableDataBean.verifierResultList}" - emptyMessage="No records found, check syntax!"> - <p:column style="width:16px"> - <p:rowToggler/> - </p:column> - - <p:column styleClass="col-dataType" headerText="Type"> - <h:outputText value="#{verifier.verifierType}"/> - </p:column> - - <p:column styleClass="col-description" headerText="Description"> - <h:outputText value="#{verifier.verificationDescription}"/> - </p:column> - - <p:column styleClass="col-quantity" headerText="Quantity"> - <h:outputText value="#{verifier.verificationsCount}"/> - </p:column> - - <p:rowExpansion> - <p:dataTable var="results" value="#{verifier.verifications}"> - <p:column styleClass="subcol-message" headerText="Message"> - <h:outputText value="#{results.message}"/> - </p:column> - <p:column styleClass="subcol-rules" headerText="Rules"> - <h:panelGroup rendered="#{not verifier.multiTable}"> + <h:panelGroup id="content-buttons" layout="block"> + <h:form> + <p:commandButton value="Verify" + id="verify-button" + styleClass="dmn-button" + onclick="exportDiagram()" + action="#{buttonBean.validateDmn}" + update="content" + disabled="#{buttonBean.disabled}"/> + + <!-- + <p:selectBooleanCheckbox value="#{buttonBean.calculateMultiTable}" + disabled="#{buttonBean.disabled}" + itemLabel="Calculate Multi Table"/> + --> + <p:commandButton value="Empty DMN" + id="clear-button" + styleClass="dmn-button" + action="#{buttonBean.setEmptyDmn}" + update="content" + ajax="true"/> + + <p:commandButton value="Sample DMN" + id="sample-button" + styleClass="dmn-button" + action="#{buttonBean.setSampleDmn}" + update="content" + ajax="true"/> + + <p:commandButton value="Sample Multi" + id="sample2-button" + styleClass="dmn-button" + action="#{buttonBean.setSampleMultiDmn}" + update="content" + ajax="true"/> + + <p:commandButton value="Download" + id="download-button" + styleClass="dmn-button" + onclick="exportDiagram()" + ajax="false" + disabled="#{buttonBean.disabled}"> + <p:fileDownload value="#{buttonBean.downloadDmn}"/> + </p:commandButton> + </h:form> + </h:panelGroup> + <h:panelGroup id="content-tables" layout="block"> + <!-- Single Table --> + <p:ajaxStatus style="display:block;"> + <f:facet name="default"> + </f:facet> + + <f:facet name="start"> + <p:graphicImage style="margin-left: 20px;" name="img/Spinner.gif"/> + </f:facet> + + <f:facet name="complete"> + <h2>Single table results</h2> + <p:dataTable var="verifier" + value="#{tableDataBean.verifierResultListSingleTables}" + emptyMessage="No records found, check syntax!"> + <p:column style="width:16px"> + <p:rowToggler/> + </p:column> + + <p:column styleClass="col-dataType" headerText="Type"> + <h:outputText value="#{verifier.verifierType}"/> + </p:column> + + <p:column styleClass="col-description" headerText="Description"> + <h:outputText value="#{verifier.verificationDescription}"/> + </p:column> + + <p:column styleClass="col-quantity" headerText="Quantity"> + <h:outputText value="#{verifier.verificationsCount}"/> + </p:column> + + <p:rowExpansion> + <p:dataTable var="results" value="#{verifier.verifications}"> + <p:column styleClass="subcol-message" headerText="Message"> + <h:outputText value="#{results.message}"/> + </p:column> + <p:column styleClass="subcol-rules" headerText="Rules"> <p:commandButton styleClass="ruleselect-button" style="width: 95%;" onclick="addHighlightCss(#{results.rulesAsJson});" value="Show"/> - </h:panelGroup> - <h:panelGroup rendered="#{verifier.multiTable}"> + </p:column> + </p:dataTable> + </p:rowExpansion> + </p:dataTable> + </f:facet> + </p:ajaxStatus> + + <!-- Multi Table --> + <p:ajaxStatus style="display:block;"> + <f:facet name="default"> + </f:facet> + + <f:facet name="start"> + </f:facet> + + <f:facet name="complete"> + <h2>Multi table results</h2> + <p:dataTable var="verifier" + value="#{tableDataBean.verifierResultListMultiTables}" + emptyMessage="No records found, check syntax!"> + <p:column style="width:16px"> + <p:rowToggler/> + </p:column> + + <p:column styleClass="col-dataType" headerText="Type"> + <h:outputText value="#{verifier.verifierType}"/> + </p:column> + + <p:column styleClass="col-description" headerText="Description"> + <h:outputText value="#{verifier.verificationDescription}"/> + </p:column> + + <p:column styleClass="col-quantity" headerText="Quantity"> + <h:outputText value="#{verifier.verificationsCount}"/> + </p:column> + + <p:rowExpansion> + <p:dataTable var="results" value="#{verifier.verifications}"> + <p:column styleClass="subcol-message" headerText="Message"> + <h:outputText value="#{results.message}"/> + </p:column> + <p:column styleClass="subcol-rules" headerText="Rules"> <p:dataTable var="rule" value="#{results.rules}"> <p:column style="padding: 0px"> <p:commandButton styleClass="ruleselect-button" @@ -131,13 +175,13 @@ value="#{rule.tableName.concat(' (').concat(rule.rowNumber).concat(')')}"/> </p:column> </p:dataTable> - </h:panelGroup> - </p:column> - </p:dataTable> - </p:rowExpansion> - </p:dataTable> - </f:facet> - </p:ajaxStatus> + </p:column> + </p:dataTable> + </p:rowExpansion> + </p:dataTable> + </f:facet> + </p:ajaxStatus> + </h:panelGroup> </h:panelGroup> </ui:define> </ui:composition> diff --git a/dmn-verifier-app/src/main/webapp/resources/css/stylesheet.css b/dmn-verifier-app/src/main/webapp/resources/css/stylesheet.css index 8a5498fa0e32ba2ddc042258fd72f4580104f536..8759380d43a2226c90111cabab76dd409a0375c7 100644 --- a/dmn-verifier-app/src/main/webapp/resources/css/stylesheet.css +++ b/dmn-verifier-app/src/main/webapp/resources/css/stylesheet.css @@ -2,6 +2,11 @@ html, body { height: 100%; padding: 0; margin: 0; + font-size: 10pt; +} + +h2 { + margin: 10px; } .col-type { @@ -29,7 +34,7 @@ html, body { .highlight { background-color: darkred; - color:white; + color: white; } .dmn-button { @@ -46,6 +51,17 @@ html, body { #content-dmn { margin: 5px; + position: relative; +} + +#content-buttons { + margin: 5px; + position: relative; +} + +#content-tables { + margin: 5px; + position: relative; } .dmn-js-parent {