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

New logic for verifier instantiation

parent 08b528ad
No related branches found
No related tags found
No related merge requests found
Showing
with 158 additions and 86 deletions
......@@ -43,6 +43,12 @@
<artifactId>commons-lang3</artifactId>
<version>3.7</version>
</dependency>
<dependency>
<groupId>org.reflections</groupId>
<artifactId>reflections</artifactId>
<version>0.9.11</version>
</dependency>
</dependencies>
<build>
......
package de.unikoblenz.fgbks.api.test;
import de.unikoblenz.fgbks.core.test.Name;
import de.unikoblenz.fgbks.core.dmn.domain.Name;
import de.unikoblenz.fgbks.core.test.Person;
import de.unikoblenz.fgbks.core.test.Synonyms;
import javax.inject.Inject;
......
package de.unikoblenz.fgbks.api.test;
import de.unikoblenz.fgbks.core.dmn.verfication.VerificationGenerator;
import de.unikoblenz.fgbks.core.dmn.verification.VerificationGenerator;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
......
package de.unikoblenz.fgbks.core.dmn.domain;
import de.unikoblenz.fgbks.base.value.AbstractStringValueObject;
public class Description extends AbstractStringValueObject {
public Description(Description initialValue) {
this(initialValue.getValue());
}
public Description(String initialValue) {
super(initialValue);
}
@Override
protected Integer getMaxLength() {
return 1000;
}
}
......@@ -4,6 +4,10 @@ import de.unikoblenz.fgbks.base.value.AbstractStringValueObject;
public class Message extends AbstractStringValueObject {
public Message(Message initialValue) {
this(initialValue.getValue());
}
public Message(String initialValue) {
super(initialValue);
}
......
package de.unikoblenz.fgbks.core.test;
package de.unikoblenz.fgbks.core.dmn.domain;
import de.unikoblenz.fgbks.base.value.AbstractStringValueObject;
public class Name extends AbstractStringValueObject {
public Name(String name) {
super(name);
public Name(Name initialValue) {
this(initialValue.getValue());
}
public Name(String initialValue) {
super(initialValue);
}
@Override
......
......@@ -4,6 +4,10 @@ import de.unikoblenz.fgbks.base.value.AbstractStringValueObject;
public abstract class AbstractId extends AbstractStringValueObject {
public AbstractId(AbstractId initialValue) {
this(initialValue.getValue());
}
public AbstractId(String initialValue) {
super(initialValue);
}
......
......@@ -2,6 +2,10 @@ package de.unikoblenz.fgbks.core.dmn.domain.id;
public class DecisionId extends AbstractId {
public DecisionId(DecisionId initialValue) {
this(initialValue.getValue());
}
public DecisionId(String initialValue) {
super(initialValue);
}
......
......@@ -3,6 +3,10 @@ package de.unikoblenz.fgbks.core.dmn.domain.id;
@JsonIdentifier("decisionTableId")
public class DecisionTableId extends AbstractId {
public DecisionTableId(DecisionTableId initialValue) {
this(initialValue.getValue());
}
public DecisionTableId(String initialValue) {
super(initialValue);
}
......
......@@ -3,6 +3,10 @@ package de.unikoblenz.fgbks.core.dmn.domain.id;
@JsonIdentifier("inputEntryId")
public class InputEntryId extends AbstractId {
public InputEntryId(InputEntryId initialValue) {
this(initialValue.getValue());
}
public InputEntryId(String initialValue) {
super(initialValue);
}
......
......@@ -3,6 +3,10 @@ package de.unikoblenz.fgbks.core.dmn.domain.id;
@JsonIdentifier("inputExpressionId")
public class InputExpressionId extends AbstractId {
public InputExpressionId(InputExpressionId initialValue) {
this(initialValue.getValue());
}
public InputExpressionId(String initialValue) {
super(initialValue);
}
......
......@@ -3,6 +3,10 @@ package de.unikoblenz.fgbks.core.dmn.domain.id;
@JsonIdentifier("inputId")
public class InputId extends AbstractId {
public InputId(InputId initialValue) {
this(initialValue.getValue());
}
public InputId(String initialValue) {
super(initialValue);
}
......
......@@ -3,6 +3,10 @@ package de.unikoblenz.fgbks.core.dmn.domain.id;
@JsonIdentifier("outputEntryId")
public class OutputEntryId extends AbstractId {
public OutputEntryId(OutputEntryId initialValue) {
this(initialValue.getValue());
}
public OutputEntryId(String initialValue) {
super(initialValue);
}
......
......@@ -3,6 +3,10 @@ package de.unikoblenz.fgbks.core.dmn.domain.id;
@JsonIdentifier("OutputId")
public class OutputId extends AbstractId {
public OutputId(OutputId initialValue) {
super(initialValue.getValue());
}
public OutputId(String initialValue) {
super(initialValue);
}
......
......@@ -3,6 +3,10 @@ package de.unikoblenz.fgbks.core.dmn.domain.id;
@JsonIdentifier("ruleId")
public class RuleId extends AbstractId {
public RuleId(RuleId initialValue) {
this(initialValue.getValue());
}
public RuleId(String initialValue) {
super(initialValue);
}
......
package de.unikoblenz.fgbks.core.dmn.verfication;
import static de.unikoblenz.fgbks.core.dmn.verfication.VerificationTypeClassification.DECISION_LOGIC_LEVEL_VERIFICATION;
import de.unikoblenz.fgbks.core.dmn.verfication.verifier.AbstractVerifier;
import de.unikoblenz.fgbks.core.dmn.verfication.verifier.SampleVerifier;
import java.io.Serializable;
import javax.json.bind.annotation.JsonbProperty;
import org.apache.commons.lang3.Validate;
public enum VerificationType implements Serializable {
IDENTICAL_BUSINESS_RULE_VERIFICATION(
DECISION_LOGIC_LEVEL_VERIFICATION, "Identical Business Rules");
private VerificationTypeClassification classification;
private String name;
private String description;
private Class<? extends AbstractVerifier> verifierClass;
@JsonbProperty("classification")
public VerificationTypeClassification getClassification() {
return classification;
}
public String getName() {
return name;
}
public String getDescription() {
return description;
}
public AbstractVerifier createNewInstance() {
return new SampleVerifier();
}
VerificationType(VerificationTypeClassification classification, String name) {
this.classification = Validate.notNull(classification);
this.name = Validate.notBlank(name);
}
}
package de.unikoblenz.fgbks.core.dmn.verfication;
import java.io.Serializable;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
public enum VerificationTypeClassification implements Serializable {
DECISION_LOGIC_LEVEL_VERIFICATION(
"Decision Logic Verification",
"",
new HashSet<>(Arrays.asList(VerificationType.IDENTICAL_BUSINESS_RULE_VERIFICATION)));
private String name;
private String description;
private Set<VerificationType> verificationTypes;
public String getName() {
return name;
}
public String getDescription() {
return description;
}
public Set<VerificationType> getVerificationTypes() {
return new HashSet<>(verificationTypes);
}
VerificationTypeClassification(
String name, String description, Set<VerificationType> verificationTypes) {
this.name = name;
this.description = description;
this.verificationTypes = verificationTypes;
}
}
package de.unikoblenz.fgbks.core.dmn.verfication;
package de.unikoblenz.fgbks.core.dmn.verification;
import de.unikoblenz.fgbks.core.dmn.verfication.result.VerifierResult;
import de.unikoblenz.fgbks.core.dmn.verfication.result.VerifierResultSet;
import de.unikoblenz.fgbks.core.dmn.verification.result.VerifierResult;
import de.unikoblenz.fgbks.core.dmn.verification.result.VerifierResultSet;
import de.unikoblenz.fgbks.core.dmn.verification.result.VerifierResultSet.Builder;
import de.unikoblenz.fgbks.core.dmn.verification.verifier.AbstractVerifier;
import de.unikoblenz.fgbks.core.dmn.verification.verifier.DmnVerifier;
import de.unikoblenz.fgbks.core.dmn.verification.verifier.config.AbstractVerificationConfig;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import org.eclipse.microprofile.config.Config;
import org.eclipse.microprofile.config.ConfigProvider;
import org.reflections.Reflections;
public class VerificationGenerator {
public static final String CONF_VERIFIER_THREADS = "verifier.threads";
public static final String DEFAULT_PACKAGE = "de.unikoblenz.fgbks.core.dmn.verification.verifier";
public static final Integer DEFAULT_MAX_THREADS = 1;
public static VerifierResultSet generate() {
return generate(DEFAULT_PACKAGE, DEFAULT_MAX_THREADS);
}
public static VerifierResultSet generate(String packagePath, Integer maxThreads) {
Config config = ConfigProvider.getConfig();
Integer maxThreads = config.getOptionalValue(CONF_VERIFIER_THREADS, Integer.class).orElse(1);
maxThreads = config.getOptionalValue(CONF_VERIFIER_THREADS, Integer.class).orElse(maxThreads);
ExecutorService executor = Executors.newFixedThreadPool(maxThreads);
VerifierResultSet.Builder resultBuilder = VerifierResultSet.getBuilder();
Builder resultBuilder = VerifierResultSet.getBuilder();
List<Future<VerifierResult>> results = new ArrayList<>(VerificationType.values().length);
List<Future<VerifierResult>> results = new ArrayList<>(10);
System.out.println("Starting calculation with " + maxThreads + " threads.");
for (VerificationType vType : VerificationType.values()) {
results.add(vType.createNewInstance().verify(executor));
Reflections reflections = new Reflections(packagePath);
Set<Class<?>> verifierClasses = reflections.getTypesAnnotatedWith(DmnVerifier.class);
for (Class<?> verifierClass : verifierClasses) {
AbstractVerifier av = null;
try {
av = (AbstractVerifier) verifierClass.newInstance();
} catch (InstantiationException | IllegalAccessException e) {
e.printStackTrace();
}
if (av != null) {
// Create Configuration
AbstractVerificationConfig vConfig = null;
try {
vConfig =
av.getClass()
.getAnnotation(DmnVerifier.class)
.verifierVerificationConfigClass()
.newInstance();
} catch (InstantiationException | IllegalAccessException ignored) {
}
results.add(av.withConfiguration(vConfig).verify(executor));
}
}
results.forEach(
......
package de.unikoblenz.fgbks.core.dmn.verfication.result;
package de.unikoblenz.fgbks.core.dmn.verification.result;
import de.unikoblenz.fgbks.base.utils.UniqueIdGenerator;
import java.io.Serializable;
......
package de.unikoblenz.fgbks.core.dmn.verfication.result;
package de.unikoblenz.fgbks.core.dmn.verification.result;
import de.unikoblenz.fgbks.base.builder.DefaultBuilder;
import de.unikoblenz.fgbks.core.dmn.domain.Message;
......@@ -42,7 +42,7 @@ public class VerificationResultEntry extends AbstractResultObject {
@JsonbProperty("message")
public Message getMessage() {
return new Message(message.getValue());
return new Message(message);
}
private void addVerificationResultEntry(
......@@ -63,7 +63,7 @@ public class VerificationResultEntry extends AbstractResultObject {
}
public Builder withMessage(Message message) {
value.message = new Message(message.getValue());
value.message = new Message(message);
return this;
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment