diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/result/AbstractResultObject.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/result/AbstractResultObject.java index 9a1955613a5a2dd0c054d57c7e5d4c2662aeaad1..7a5ce05ff5485920ef2426eac68ee324d47d6656 100644 --- a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/result/AbstractResultObject.java +++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/result/AbstractResultObject.java @@ -5,10 +5,19 @@ import java.io.Serializable; import java.util.Objects; import javax.json.bind.annotation.JsonbProperty; -public class AbstractResultObject implements Serializable { +/** + * A Abstract Result object is a container for other parts for the result elements. All result + * elements have a unique id and are serializable. + */ +public abstract class AbstractResultObject implements Serializable { private long id = UniqueIdGenerator.getNextId(); + /** + * Get the unique id of the result element. + * + * @return the unique id + */ @JsonbProperty("id") public long getId() { return id; diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/result/VerificationResultEntry.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/result/VerificationResultEntry.java index 70322b5d2aeec63a0f8cc3b54bdef188f8a55938..8da780ecb8a0f2dc186850d1d0f3f6ffe43a7db8 100644 --- a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/result/VerificationResultEntry.java +++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/result/VerificationResultEntry.java @@ -2,71 +2,127 @@ package de.unikoblenz.fgbks.core.dmn.verification.result; import de.unikoblenz.fgbks.base.builder.DefaultBuilder; import de.unikoblenz.fgbks.base.domain.Message; +import de.unikoblenz.fgbks.core.dmn.verification.verifier.Verifier; import java.util.HashSet; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import javax.json.bind.annotation.JsonbProperty; import org.apache.commons.lang3.Validate; +/** + * A verification result entry represents on single error, or warning, which was calculated by one + * {@link Verifier}. One {@link VerificationResultEntry} contains a set of {@link + * VerificationResultEntryElement}s. These elements represents one rule / one table / one column or + * one cell of the dmn. + */ public class VerificationResultEntry extends AbstractResultObject { - public enum VerificationClassification { - INFO, - WARNING, - ERROR, - FATAL_ERROR; + /** + * Create a new {@link VerificationResultEntry}. + */ + protected VerificationResultEntry() { + this.verificationResultEntryElements = ConcurrentHashMap.newKeySet(); } private Set<VerificationResultEntryElement> verificationResultEntryElements; private Message message; private VerificationClassification verificationClassification; - protected VerificationResultEntry() { - this.verificationResultEntryElements = ConcurrentHashMap.newKeySet(); + /** + * Get a new instance of a {@link Builder} for a {@link VerificationResultEntry}. + * + * @return a new {@link Builder} + */ + public static Builder getBuilder() { + return new VerificationResultEntry().new Builder(); } + /** + * Get the amount of verification result entry elements. + * + * @return the amount of verification result entry elements + */ @JsonbProperty("size") private int getAmountOfElements() { return verificationResultEntryElements.size(); } + /** + * Get the set of {@link VerificationResultEntryElement}s. + * + * @return the {@link VerificationResultEntryElement}s + */ @JsonbProperty("elements") public Set<VerificationResultEntryElement> getVerificationResultEntryElements() { return new HashSet<>(verificationResultEntryElements); } + /** + * Get the {@link VerificationClassification}. + * + * @return the {@link VerificationClassification} + */ @JsonbProperty("verificationClassification") public VerificationClassification getVerificationClassification() { return verificationClassification; } + /** + * Get the message of the verification, which describes the verification textual. + * + * @return the {@link Message} + */ @JsonbProperty("message") public Message getMessage() { return new Message(message); } - private void addVerificationResultEntry( - VerificationResultEntryElement verificationResultEntryElement) { - this.verificationResultEntryElements.add(verificationResultEntryElement); - } - - public static Builder getBuilder() { - return new VerificationResultEntry().new Builder(); + /** + * Enum to classify one {@link VerificationResultEntry}. + */ + public enum VerificationClassification { + /** Only information. */ + INFO, + /** Warning. No action needed. */ + WARNING, + /** Error. Action needed. */ + ERROR, + /** Fatal error. Must be fixed, so that the dmn is executable. */ + FATAL_ERROR } + /** A builder class for {@link VerificationResultEntry}. */ public class Builder extends DefaultBuilder<VerificationResultEntry> { + /** + * Add a new {@link VerificationResultEntryElement} to the {@link VerificationResultEntry}. + * + * @param verificationResultEntryElement the {@link VerificationResultEntryElement} + * @return the current builder + */ public Builder addVerificationResultEntryElement( VerificationResultEntryElement verificationResultEntryElement) { - value.addVerificationResultEntry(Validate.notNull(verificationResultEntryElement)); + value.verificationResultEntryElements.add(Validate.notNull(verificationResultEntryElement)); return this; } + /** + * Set the {@link Message} of the {@link VerificationResultEntry}. + * + * @param message the {@link Message} + * @return the current builder + */ public Builder withMessage(Message message) { value.message = new Message(message); return this; } + /** + * Set the {@link VerificationClassification} of the {@link VerificationResultEntry}. + * + * @param verificationClassification the {@link VerificationClassification} + * @return the current builder + */ public Builder withClassification(VerificationClassification verificationClassification) { value.verificationClassification = verificationClassification; return this; diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/result/VerificationResultEntryElement.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/result/VerificationResultEntryElement.java index ebf67c554a81054c0749259a1c006abe16e066e4..97d16d07cae461de1f7a8bb92874287785373f31 100644 --- a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/result/VerificationResultEntryElement.java +++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/result/VerificationResultEntryElement.java @@ -9,24 +9,35 @@ import java.util.Map; import javax.json.bind.annotation.JsonbProperty; import org.apache.commons.lang3.Validate; -// @JsonbTypeSerializer(VerificationResultEntryElementJsonSerializer.class) +/** + * A verification result entry element represents one dmn tabel / rule / column or single cell of + * the dmn. The identification of this elements works with {@link VerificationResultEntryElement#getIdentifier()}. + */ public class VerificationResultEntryElement extends AbstractResultObject { private final Map<String, AbstractId> identifier; - @JsonbProperty("identifier") - public Map<String, AbstractId> getIdentifier() { - return new HashMap<>(identifier); + /** + * Create a new (empty) {@link VerificationResultEntryElement}. Call {@link + * VerificationResultEntryElement#withIdentifier(AbstractId)} to add new identifier. + * + * @return the new {@link VerificationResultEntryElement} + */ + public static VerificationResultEntryElement create() { + return new VerificationResultEntryElement(); } private VerificationResultEntryElement() { identifier = new HashMap<>(); } - public static VerificationResultEntryElement create() { - return new VerificationResultEntryElement(); - } - + /** + * Create a new {@link VerificationResultEntryElement} with the initial identifier from a {@link + * VDmnValue}. Call {@link VerificationResultEntryElement#withIdentifier(AbstractId)} to add + * further identifier. + * + * @return the new {@link VerificationResultEntryElement} + */ public static VerificationResultEntryElement create(VDmnValue vDmnValue) { return new VerificationResultEntryElement() .withIdentifier(vDmnValue.getDefinitionId()) @@ -37,6 +48,13 @@ public class VerificationResultEntryElement extends AbstractResultObject { .withIdentifier(vDmnValue.getId()); } + /** + * Create a new {@link VerificationResultEntryElement} with the initial identifier from a {@link + * VDmnDecisionTable}. Call {@link VerificationResultEntryElement#withIdentifier(AbstractId)} to + * add further identifier. + * + * @return the new {@link VerificationResultEntryElement} + */ public static VerificationResultEntryElement create(VDmnDecisionTable dmnDecisionTable) { return new VerificationResultEntryElement() .withIdentifier(dmnDecisionTable.getDmnDefinition().getDefinitionId()) @@ -44,6 +62,25 @@ public class VerificationResultEntryElement extends AbstractResultObject { .withIdentifier(dmnDecisionTable.getDecisionTableId()); } + /** + * Get all required ids ({@link AbstractId}) of the {@link VerificationResultEntryElement}. + * + * @return a map with the identifiers + */ + @JsonbProperty("identifier") + public Map<String, AbstractId> getIdentifier() { + return new HashMap<>(identifier); + } + + /** + * Add a new {@link AbstractId} to the identifier map. The key for the value (the id) is the name + * of the concrete class with the annotation {@link JsonIdentifier}. One identifier can not be + * added twice. + * + * @param value the {@link AbstractId}, which must be annotated with the {@link JsonIdentifier} + * class + * @return the current {@link VerificationResultEntryElement} + */ public VerificationResultEntryElement withIdentifier(AbstractId value) { // Check if annotation is present diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/result/VerificationResultEntryFactory.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/result/VerificationResultEntryFactory.java index aa91b5f164d78d03a9819a2871849ca91515a7cc..44411342d11689437f040066f52f7e5525a935e2 100644 --- a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/result/VerificationResultEntryFactory.java +++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/result/VerificationResultEntryFactory.java @@ -5,6 +5,14 @@ import de.unikoblenz.fgbks.core.dmn.verification.result.VerificationResultEntry. import de.unikoblenz.fgbks.core.dmn.verification.result.VerifierResult.Builder; import org.apache.commons.lang3.Validate; +/** + * A factory to help creating a {@link VerifierResult}. First, call {@link + * VerificationResultEntryFactory#create(Builder)} with and instance of the {@link + * VerifierResult.Builder}. Than, for each new result for one verifier first call {@link + * VerificationResultEntryFactory#addElement(VerificationResultEntryElement)} for every element you + * want to add. Finally call {@link VerificationResultEntryFactory#addToEntry(VerificationClassification, + * String)} to add the result. + */ public class VerificationResultEntryFactory { private VerifierResult.Builder verifierResultBuilder; @@ -15,6 +23,12 @@ public class VerificationResultEntryFactory { verificationResultEntryBuilder = null; } + /** + * Create a new {@link VerificationResultEntryFactory}. + * + * @param verifierResultBuilder the instance of a {@link VerifierResult.Builder} + * @return the new {@link VerificationResultEntryFactory} + */ public static VerificationResultEntryFactory create(Builder verifierResultBuilder) { return new VerificationResultEntryFactory(verifierResultBuilder); } @@ -26,21 +40,49 @@ public class VerificationResultEntryFactory { return verificationResultEntryBuilder; } + /** + * Add a {@link VerificationResultEntryElement} to the current {@link VerificationResultEntry}. + * + * @param verificationResultEntryElement the {@link VerificationResultEntryElement} to add + * @return the current {@link VerificationResultEntryFactory} + */ public VerificationResultEntryFactory addElement( VerificationResultEntryElement verificationResultEntryElement) { getCurrentOrCreate().addVerificationResultEntryElement(verificationResultEntryElement); return this; } + /** + * Add the previous added {@link VerificationResultEntryElement}s to the {@link VerifierResult} + * with the given {@link VerificationClassification} and the given message. + * + * @param verificationClassification the {@link VerificationClassification} + * @param message as String + */ public void addToEntry(VerificationClassification verificationClassification, String message) { addToEntry(verificationClassification, message, null); } + /** + * Add the previous added {@link VerificationResultEntryElement}s to the {@link VerifierResult} + * with the given {@link VerificationClassification} and the given message. + * + * @param verificationClassification the {@link VerificationClassification} + * @param message as String + * @param args the additional arguments for formatting the message + */ public void addToEntry( VerificationClassification verificationClassification, String message, Object... args) { addToEntry(verificationClassification, new Message(String.format(message, args))); } + /** + * Add the previous added {@link VerificationResultEntryElement}s to the {@link VerifierResult} + * with the given {@link VerificationClassification} and the given {@link Message}. + * + * @param verificationClassification the {@link VerificationClassification} + * @param message as {@link Message} + */ public void addToEntry(VerificationClassification verificationClassification, Message message) { Validate.notNull( verificationResultEntryBuilder, diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/result/VerifierResult.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/result/VerifierResult.java index cf5d8399f4219118dec94a76b87949e3c9b2469f..5c92a0e7e3fa70d6b63984321c313e0e5de15256 100644 --- a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/result/VerifierResult.java +++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/result/VerifierResult.java @@ -1,70 +1,126 @@ package de.unikoblenz.fgbks.core.dmn.verification.result; import de.unikoblenz.fgbks.base.builder.DefaultBuilder; -import de.unikoblenz.fgbks.core.dmn.verification.verifier.AbstractVerifier; +import de.unikoblenz.fgbks.core.dmn.verification.verifier.Verifier; import de.unikoblenz.fgbks.core.dmn.verification.verifier.types.VerificationType; import java.util.HashSet; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ExecutorService; import javax.json.bind.annotation.JsonbProperty; import org.apache.commons.lang3.Validate; +/** + * A verifier result represents the output of one {@link Verifier#verify(ExecutorService)}. So it + * contains a {@link VerificationType} and a set of {@link VerificationResultEntry}ies. These are + * single verification errors, which were determined by the verifier. + */ public class VerifierResult extends AbstractResultObject { private VerificationType verificationType; private Long executionTime; private Set<VerificationResultEntry> verificationResultEntries; - public VerifierResult() { + /** + * Create a new VerifierResult. + */ + protected VerifierResult() { this.verificationResultEntries = ConcurrentHashMap.newKeySet(); } + /** + * Get a new instance of a builder for a {@link VerifierResult}. + * + * @return the instance of a {@link Builder} + */ + public static Builder getBuilder() { + return new VerifierResult().new Builder(); + } + + /** + * Get the {@link VerificationType} of the {@link Verifier}. + * + * @return + */ @JsonbProperty("type") public VerificationType getVerificationType() { return verificationType; } + /** + * Get the set of {@link VerificationResultEntry}ies. Each {@link VerificationResultEntry} + * expresses one verification error. + * + * @return the set of {@link VerificationResultEntry}ies + */ @JsonbProperty("entries") public Set<VerificationResultEntry> getVerificationResultEntries() { return new HashSet<>(verificationResultEntries); } + /** + * Get the amount of {@link VerificationResultEntry}ies. + * + * @return the amount of {@link VerificationResultEntry}ies + */ @JsonbProperty("size") public int getAmountOfEntries() { return verificationResultEntries.size(); } + /** + * Get the execution time of the verifier in ms. + * + * @return the execution time in ms + */ @JsonbProperty("executionTime") public Long getExecutionTime() { return executionTime; } - public void setExecutionTime(Long executionTime) { - this.executionTime = executionTime; - } - - public static Builder getBuilder() { - return new VerifierResult().new Builder(); - } - + /** A builder class for {@link VerifierResult}. */ public class Builder extends DefaultBuilder<VerifierResult> { + /** + * Set the {@link VerificationType} of {@link VerifierResult}. + * + * @param verificationType the {@link VerificationType} + * @return the current builder + */ public Builder withVerificationType(VerificationType verificationType) { value.verificationType = Validate.notNull(verificationType); return this; } + /** + * Add a new {@link VerificationResultEntry} to the {@link VerifierResult}. + * + * @param verificationResultEntry the {@link VerificationResultEntry} + * @return the current builder + */ public Builder addVerificationResultEntry(VerificationResultEntry verificationResultEntry) { value.verificationResultEntries.add(Validate.notNull(verificationResultEntry)); return this; } + /** + * Set the execution time of {@link VerifierResult}. + * + * @param executionTime the execution time of the verifier + * @return the current builder + */ public Builder withExecutionTime(Long executionTime) { value.executionTime = executionTime; return this; } - public Builder fromVerifier(AbstractVerifier verifier) { + /** + * Set the properties from the given {@link Verifier}. + * + * @param verifier the {@link Verifier} + * @return the current builder + */ + public Builder fromVerifier(Verifier verifier) { return withVerificationType(Validate.notNull(verifier).getVerificationType()); } diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/result/VerifierResultSet.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/result/VerifierResultSet.java index 52ccf5d589501af118e3c5f70bf072245551f31a..f01f353edfe1c5c05f54c20625e68f506467a3da 100644 --- a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/result/VerifierResultSet.java +++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/result/VerifierResultSet.java @@ -7,36 +7,62 @@ import java.util.concurrent.ConcurrentHashMap; import javax.json.bind.annotation.JsonbProperty; import org.apache.commons.lang3.Validate; +/** + * The verifier result set contains a set of {@link VerifierResult}s. + */ public class VerifierResultSet extends AbstractResultObject { private Set<VerifierResult> verifierResults; + /** Create a new instance of the VerifierResultSet. */ protected VerifierResultSet() { this.verifierResults = ConcurrentHashMap.newKeySet(); } + /** + * Get a new instance of a builder for a {@link VerifierResultSet}. The {@link VerifierResult}s + * can be added async with {@link Builder#addVerifierResult(VerifierResult)}. + * + * @return a new {@link Builder} + */ + public static Builder getBuilder() { + return new VerifierResultSet().new Builder(); + } + + /** + * Get the set verifier results. + * + * @return the set of {@link VerifierResult}s + */ @JsonbProperty("verifier") public Set<VerifierResult> getVerifierResults() { return new HashSet<>(verifierResults); } + /** + * Get the amount of verifier results, which are currently in the set. + * + * @return the amount of verifier results + */ @JsonbProperty("size") public int getAmountOfVerifier() { return verifierResults.size(); } - private void addVerifierResult(VerifierResult verifierResult) { - verifierResults.add(verifierResult); - } - - public static Builder getBuilder() { - return new VerifierResultSet().new Builder(); - } - + /** + * A builder class for a {@link VerifierResultSet}. Add new {@link VerifierResult}s async with + * {@link Builder#addVerifierResult(VerifierResult)}. + */ public class Builder extends DefaultBuilder<VerifierResultSet> { + /** + * Add a new {@link VerifierResult} to the set. This method can be called async. + * + * @param verifierResult the {@link VerifierResult} + * @return the current {@link Builder} + */ public Builder addVerifierResult(VerifierResult verifierResult) { - value.addVerifierResult(Validate.notNull(verifierResult)); + value.verifierResults.add(Validate.notNull(verifierResult)); return this; } } diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/AbstractVerifier.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/AbstractVerifier.java index d4cf0a78b64d46a846172b1bc7604ce189856f29..62c8e1fb96a9e2e0cad24b26f8dc307e3665f127 100644 --- a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/AbstractVerifier.java +++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/AbstractVerifier.java @@ -32,6 +32,10 @@ public abstract class AbstractVerifier implements Verifier { private long executionTime = -1; + /** + * {@inheritDoc} + */ + @Override public VerificationType getVerificationType() { return verificationType; } @@ -66,9 +70,7 @@ public abstract class AbstractVerifier implements Verifier { vreFactory = VerificationResultEntryFactory.create(resultBuilder); } - /** - * {@inheritDoc} - */ + /** {@inheritDoc} */ public final Future<VerifierResult> verify(ExecutorService executor) { Validate.notNull(verifierConfig, "Validation config has to been set."); Validate.notNull(executor); diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/Verifier.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/Verifier.java index 0cafadb1ad482fc8bf63f7d7e13658b62fb8d2fc..67a16f19191b6e5d9dd4bb77bca5c84a4c87b75d 100644 --- a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/Verifier.java +++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/Verifier.java @@ -1,6 +1,7 @@ package de.unikoblenz.fgbks.core.dmn.verification.verifier; import de.unikoblenz.fgbks.core.dmn.verification.result.VerifierResult; +import de.unikoblenz.fgbks.core.dmn.verification.verifier.types.VerificationType; import java.util.concurrent.ExecutorService; import java.util.concurrent.Future; @@ -10,6 +11,13 @@ import java.util.concurrent.Future; */ public interface Verifier { + /** + * Get the {@link VerificationType} of the verifier. + * + * @return the {@link VerificationType} + */ + VerificationType getVerificationType(); + /** * Generate a {@link VerifierResult} in a {@link Future} result. *