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

Add documentation for result objects.

parent bf17c544
No related branches found
No related tags found
No related merge requests found
Showing
with 283 additions and 47 deletions
...@@ -5,10 +5,19 @@ import java.io.Serializable; ...@@ -5,10 +5,19 @@ import java.io.Serializable;
import java.util.Objects; import java.util.Objects;
import javax.json.bind.annotation.JsonbProperty; 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(); private long id = UniqueIdGenerator.getNextId();
/**
* Get the unique id of the result element.
*
* @return the unique id
*/
@JsonbProperty("id") @JsonbProperty("id")
public long getId() { public long getId() {
return id; return id;
......
...@@ -2,71 +2,127 @@ package de.unikoblenz.fgbks.core.dmn.verification.result; ...@@ -2,71 +2,127 @@ package de.unikoblenz.fgbks.core.dmn.verification.result;
import de.unikoblenz.fgbks.base.builder.DefaultBuilder; import de.unikoblenz.fgbks.base.builder.DefaultBuilder;
import de.unikoblenz.fgbks.base.domain.Message; import de.unikoblenz.fgbks.base.domain.Message;
import de.unikoblenz.fgbks.core.dmn.verification.verifier.Verifier;
import java.util.HashSet; import java.util.HashSet;
import java.util.Set; import java.util.Set;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import javax.json.bind.annotation.JsonbProperty; import javax.json.bind.annotation.JsonbProperty;
import org.apache.commons.lang3.Validate; 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 class VerificationResultEntry extends AbstractResultObject {
public enum VerificationClassification { /**
INFO, * Create a new {@link VerificationResultEntry}.
WARNING, */
ERROR, protected VerificationResultEntry() {
FATAL_ERROR; this.verificationResultEntryElements = ConcurrentHashMap.newKeySet();
} }
private Set<VerificationResultEntryElement> verificationResultEntryElements; private Set<VerificationResultEntryElement> verificationResultEntryElements;
private Message message; private Message message;
private VerificationClassification verificationClassification; 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") @JsonbProperty("size")
private int getAmountOfElements() { private int getAmountOfElements() {
return verificationResultEntryElements.size(); return verificationResultEntryElements.size();
} }
/**
* Get the set of {@link VerificationResultEntryElement}s.
*
* @return the {@link VerificationResultEntryElement}s
*/
@JsonbProperty("elements") @JsonbProperty("elements")
public Set<VerificationResultEntryElement> getVerificationResultEntryElements() { public Set<VerificationResultEntryElement> getVerificationResultEntryElements() {
return new HashSet<>(verificationResultEntryElements); return new HashSet<>(verificationResultEntryElements);
} }
/**
* Get the {@link VerificationClassification}.
*
* @return the {@link VerificationClassification}
*/
@JsonbProperty("verificationClassification") @JsonbProperty("verificationClassification")
public VerificationClassification getVerificationClassification() { public VerificationClassification getVerificationClassification() {
return verificationClassification; return verificationClassification;
} }
/**
* Get the message of the verification, which describes the verification textual.
*
* @return the {@link Message}
*/
@JsonbProperty("message") @JsonbProperty("message")
public Message getMessage() { public Message getMessage() {
return new Message(message); return new Message(message);
} }
private void addVerificationResultEntry( /**
VerificationResultEntryElement verificationResultEntryElement) { * Enum to classify one {@link VerificationResultEntry}.
this.verificationResultEntryElements.add(verificationResultEntryElement); */
} public enum VerificationClassification {
/** Only information. */
public static Builder getBuilder() { INFO,
return new VerificationResultEntry().new Builder(); /** 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> { 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( public Builder addVerificationResultEntryElement(
VerificationResultEntryElement verificationResultEntryElement) { VerificationResultEntryElement verificationResultEntryElement) {
value.addVerificationResultEntry(Validate.notNull(verificationResultEntryElement)); value.verificationResultEntryElements.add(Validate.notNull(verificationResultEntryElement));
return this; return this;
} }
/**
* Set the {@link Message} of the {@link VerificationResultEntry}.
*
* @param message the {@link Message}
* @return the current builder
*/
public Builder withMessage(Message message) { public Builder withMessage(Message message) {
value.message = new Message(message); value.message = new Message(message);
return this; return this;
} }
/**
* Set the {@link VerificationClassification} of the {@link VerificationResultEntry}.
*
* @param verificationClassification the {@link VerificationClassification}
* @return the current builder
*/
public Builder withClassification(VerificationClassification verificationClassification) { public Builder withClassification(VerificationClassification verificationClassification) {
value.verificationClassification = verificationClassification; value.verificationClassification = verificationClassification;
return this; return this;
......
...@@ -9,24 +9,35 @@ import java.util.Map; ...@@ -9,24 +9,35 @@ import java.util.Map;
import javax.json.bind.annotation.JsonbProperty; import javax.json.bind.annotation.JsonbProperty;
import org.apache.commons.lang3.Validate; 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 { public class VerificationResultEntryElement extends AbstractResultObject {
private final Map<String, AbstractId> identifier; private final Map<String, AbstractId> identifier;
@JsonbProperty("identifier") /**
public Map<String, AbstractId> getIdentifier() { * Create a new (empty) {@link VerificationResultEntryElement}. Call {@link
return new HashMap<>(identifier); * VerificationResultEntryElement#withIdentifier(AbstractId)} to add new identifier.
*
* @return the new {@link VerificationResultEntryElement}
*/
public static VerificationResultEntryElement create() {
return new VerificationResultEntryElement();
} }
private VerificationResultEntryElement() { private VerificationResultEntryElement() {
identifier = new HashMap<>(); 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) { public static VerificationResultEntryElement create(VDmnValue vDmnValue) {
return new VerificationResultEntryElement() return new VerificationResultEntryElement()
.withIdentifier(vDmnValue.getDefinitionId()) .withIdentifier(vDmnValue.getDefinitionId())
...@@ -37,6 +48,13 @@ public class VerificationResultEntryElement extends AbstractResultObject { ...@@ -37,6 +48,13 @@ public class VerificationResultEntryElement extends AbstractResultObject {
.withIdentifier(vDmnValue.getId()); .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) { public static VerificationResultEntryElement create(VDmnDecisionTable dmnDecisionTable) {
return new VerificationResultEntryElement() return new VerificationResultEntryElement()
.withIdentifier(dmnDecisionTable.getDmnDefinition().getDefinitionId()) .withIdentifier(dmnDecisionTable.getDmnDefinition().getDefinitionId())
...@@ -44,6 +62,25 @@ public class VerificationResultEntryElement extends AbstractResultObject { ...@@ -44,6 +62,25 @@ public class VerificationResultEntryElement extends AbstractResultObject {
.withIdentifier(dmnDecisionTable.getDecisionTableId()); .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) { public VerificationResultEntryElement withIdentifier(AbstractId value) {
// Check if annotation is present // Check if annotation is present
......
...@@ -5,6 +5,14 @@ import de.unikoblenz.fgbks.core.dmn.verification.result.VerificationResultEntry. ...@@ -5,6 +5,14 @@ import de.unikoblenz.fgbks.core.dmn.verification.result.VerificationResultEntry.
import de.unikoblenz.fgbks.core.dmn.verification.result.VerifierResult.Builder; import de.unikoblenz.fgbks.core.dmn.verification.result.VerifierResult.Builder;
import org.apache.commons.lang3.Validate; 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 { public class VerificationResultEntryFactory {
private VerifierResult.Builder verifierResultBuilder; private VerifierResult.Builder verifierResultBuilder;
...@@ -15,6 +23,12 @@ public class VerificationResultEntryFactory { ...@@ -15,6 +23,12 @@ public class VerificationResultEntryFactory {
verificationResultEntryBuilder = null; 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) { public static VerificationResultEntryFactory create(Builder verifierResultBuilder) {
return new VerificationResultEntryFactory(verifierResultBuilder); return new VerificationResultEntryFactory(verifierResultBuilder);
} }
...@@ -26,21 +40,49 @@ public class VerificationResultEntryFactory { ...@@ -26,21 +40,49 @@ public class VerificationResultEntryFactory {
return verificationResultEntryBuilder; 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( public VerificationResultEntryFactory addElement(
VerificationResultEntryElement verificationResultEntryElement) { VerificationResultEntryElement verificationResultEntryElement) {
getCurrentOrCreate().addVerificationResultEntryElement(verificationResultEntryElement); getCurrentOrCreate().addVerificationResultEntryElement(verificationResultEntryElement);
return this; 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) { public void addToEntry(VerificationClassification verificationClassification, String message) {
addToEntry(verificationClassification, message, null); 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( public void addToEntry(
VerificationClassification verificationClassification, String message, Object... args) { VerificationClassification verificationClassification, String message, Object... args) {
addToEntry(verificationClassification, new Message(String.format(message, 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) { public void addToEntry(VerificationClassification verificationClassification, Message message) {
Validate.notNull( Validate.notNull(
verificationResultEntryBuilder, verificationResultEntryBuilder,
......
package de.unikoblenz.fgbks.core.dmn.verification.result; package de.unikoblenz.fgbks.core.dmn.verification.result;
import de.unikoblenz.fgbks.base.builder.DefaultBuilder; 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 de.unikoblenz.fgbks.core.dmn.verification.verifier.types.VerificationType;
import java.util.HashSet; import java.util.HashSet;
import java.util.Set; import java.util.Set;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ExecutorService;
import javax.json.bind.annotation.JsonbProperty; import javax.json.bind.annotation.JsonbProperty;
import org.apache.commons.lang3.Validate; 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 { public class VerifierResult extends AbstractResultObject {
private VerificationType verificationType; private VerificationType verificationType;
private Long executionTime; private Long executionTime;
private Set<VerificationResultEntry> verificationResultEntries; private Set<VerificationResultEntry> verificationResultEntries;
public VerifierResult() { /**
* Create a new VerifierResult.
*/
protected VerifierResult() {
this.verificationResultEntries = ConcurrentHashMap.newKeySet(); 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") @JsonbProperty("type")
public VerificationType getVerificationType() { public VerificationType getVerificationType() {
return verificationType; 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") @JsonbProperty("entries")
public Set<VerificationResultEntry> getVerificationResultEntries() { public Set<VerificationResultEntry> getVerificationResultEntries() {
return new HashSet<>(verificationResultEntries); return new HashSet<>(verificationResultEntries);
} }
/**
* Get the amount of {@link VerificationResultEntry}ies.
*
* @return the amount of {@link VerificationResultEntry}ies
*/
@JsonbProperty("size") @JsonbProperty("size")
public int getAmountOfEntries() { public int getAmountOfEntries() {
return verificationResultEntries.size(); return verificationResultEntries.size();
} }
/**
* Get the execution time of the verifier in ms.
*
* @return the execution time in ms
*/
@JsonbProperty("executionTime") @JsonbProperty("executionTime")
public Long getExecutionTime() { public Long getExecutionTime() {
return executionTime; return executionTime;
} }
public void setExecutionTime(Long executionTime) { /** A builder class for {@link VerifierResult}. */
this.executionTime = executionTime;
}
public static Builder getBuilder() {
return new VerifierResult().new Builder();
}
public class Builder extends DefaultBuilder<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) { public Builder withVerificationType(VerificationType verificationType) {
value.verificationType = Validate.notNull(verificationType); value.verificationType = Validate.notNull(verificationType);
return this; 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) { public Builder addVerificationResultEntry(VerificationResultEntry verificationResultEntry) {
value.verificationResultEntries.add(Validate.notNull(verificationResultEntry)); value.verificationResultEntries.add(Validate.notNull(verificationResultEntry));
return this; 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) { public Builder withExecutionTime(Long executionTime) {
value.executionTime = executionTime; value.executionTime = executionTime;
return this; 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()); return withVerificationType(Validate.notNull(verifier).getVerificationType());
} }
......
...@@ -7,36 +7,62 @@ import java.util.concurrent.ConcurrentHashMap; ...@@ -7,36 +7,62 @@ import java.util.concurrent.ConcurrentHashMap;
import javax.json.bind.annotation.JsonbProperty; import javax.json.bind.annotation.JsonbProperty;
import org.apache.commons.lang3.Validate; import org.apache.commons.lang3.Validate;
/**
* The verifier result set contains a set of {@link VerifierResult}s.
*/
public class VerifierResultSet extends AbstractResultObject { public class VerifierResultSet extends AbstractResultObject {
private Set<VerifierResult> verifierResults; private Set<VerifierResult> verifierResults;
/** Create a new instance of the VerifierResultSet. */
protected VerifierResultSet() { protected VerifierResultSet() {
this.verifierResults = ConcurrentHashMap.newKeySet(); 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") @JsonbProperty("verifier")
public Set<VerifierResult> getVerifierResults() { public Set<VerifierResult> getVerifierResults() {
return new HashSet<>(verifierResults); return new HashSet<>(verifierResults);
} }
/**
* Get the amount of verifier results, which are currently in the set.
*
* @return the amount of verifier results
*/
@JsonbProperty("size") @JsonbProperty("size")
public int getAmountOfVerifier() { public int getAmountOfVerifier() {
return verifierResults.size(); return verifierResults.size();
} }
private void addVerifierResult(VerifierResult verifierResult) { /**
verifierResults.add(verifierResult); * A builder class for a {@link VerifierResultSet}. Add new {@link VerifierResult}s async with
} * {@link Builder#addVerifierResult(VerifierResult)}.
*/
public static Builder getBuilder() {
return new VerifierResultSet().new Builder();
}
public class Builder extends DefaultBuilder<VerifierResultSet> { 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) { public Builder addVerifierResult(VerifierResult verifierResult) {
value.addVerifierResult(Validate.notNull(verifierResult)); value.verifierResults.add(Validate.notNull(verifierResult));
return this; return this;
} }
} }
......
...@@ -32,6 +32,10 @@ public abstract class AbstractVerifier implements Verifier { ...@@ -32,6 +32,10 @@ public abstract class AbstractVerifier implements Verifier {
private long executionTime = -1; private long executionTime = -1;
/**
* {@inheritDoc}
*/
@Override
public VerificationType getVerificationType() { public VerificationType getVerificationType() {
return verificationType; return verificationType;
} }
...@@ -66,9 +70,7 @@ public abstract class AbstractVerifier implements Verifier { ...@@ -66,9 +70,7 @@ public abstract class AbstractVerifier implements Verifier {
vreFactory = VerificationResultEntryFactory.create(resultBuilder); vreFactory = VerificationResultEntryFactory.create(resultBuilder);
} }
/** /** {@inheritDoc} */
* {@inheritDoc}
*/
public final Future<VerifierResult> verify(ExecutorService executor) { public final Future<VerifierResult> verify(ExecutorService executor) {
Validate.notNull(verifierConfig, "Validation config has to been set."); Validate.notNull(verifierConfig, "Validation config has to been set.");
Validate.notNull(executor); Validate.notNull(executor);
......
package de.unikoblenz.fgbks.core.dmn.verification.verifier; package de.unikoblenz.fgbks.core.dmn.verification.verifier;
import de.unikoblenz.fgbks.core.dmn.verification.result.VerifierResult; 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.ExecutorService;
import java.util.concurrent.Future; import java.util.concurrent.Future;
...@@ -10,6 +11,13 @@ import java.util.concurrent.Future; ...@@ -10,6 +11,13 @@ import java.util.concurrent.Future;
*/ */
public interface Verifier { 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. * Generate a {@link VerifierResult} in a {@link Future} result.
* *
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment