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

Restructure project

for singleton for verification type and classification type
parent d2114bdd
Branches
Tags
No related merge requests found
Showing
with 313 additions and 93 deletions
package de.unikoblenz.fgbks.api.test;
import de.unikoblenz.fgbks.core.dmn.utils.DmnService;
import de.unikoblenz.fgbks.core.dmn.verification.VerificationService;
import de.unikoblenz.fgbks.core.dmn.verification.DmnVerificationService;
import javax.inject.Inject;
import javax.ws.rs.Consumes;
import javax.ws.rs.POST;
......@@ -19,12 +19,12 @@ public class TestApi {
@Inject protected DmnService dmnService;
@Inject protected VerificationService verificationService;
@Inject protected DmnVerificationService dmnVerificationService;
@POST
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.TEXT_XML)
public Response helloBuilder(String payload) {
return Response.accepted(verificationService.generate(payload)).build();
return Response.accepted(dmnVerificationService.generate(payload)).build();
}
}
......@@ -6,9 +6,15 @@ 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.classification.Classification;
import de.unikoblenz.fgbks.core.dmn.verification.verifier.classification.ClassificationType;
import de.unikoblenz.fgbks.core.dmn.verification.verifier.config.AbstractDmnVerifierConfig;
import de.unikoblenz.fgbks.core.dmn.verification.verifier.config.DefaultConfiguration;
import de.unikoblenz.fgbks.core.dmn.verification.verifier.types.Type;
import de.unikoblenz.fgbks.core.dmn.verification.verifier.types.VerificationType;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Set;
......@@ -24,7 +30,7 @@ import org.eclipse.microprofile.config.inject.ConfigProperty;
import org.reflections.Reflections;
@ApplicationScoped
public class VerificationService {
public class DmnVerificationService {
@ConfigProperty(name = "verifier.threads", defaultValue = "2")
Integer maxThreads;
......@@ -36,24 +42,61 @@ public class VerificationService {
private ExecutorService executor;
private Set<Class<?>> verifierClasses;
private List<VerificationType> verificationTypes;
private List<ClassificationType> verificationClassificationTypes;
@Inject protected DmnService dmnService;
protected VerificationService() {
protected DmnVerificationService() {
super();
}
private void initVerifier() {
executor = Executors.newFixedThreadPool(maxThreads);
System.out.println("Creating thread pool with " + maxThreads + " threads!"); // TODO remove
Reflections reflections = new Reflections(packagePath);
verifierClasses = reflections.getTypesAnnotatedWith(DmnVerifier.class);
if (executor == null || verifierClasses == null) {
System.out.println("Creating thread pool with " + maxThreads + " threads!"); // TODO remove
executor = Executors.newFixedThreadPool(maxThreads);
Reflections reflections = new Reflections(packagePath);
verifierClasses = reflections.getTypesAnnotatedWith(DmnVerifier.class);
verificationTypes = new ArrayList<>();
Set<Class<?>> clVts = reflections.getTypesAnnotatedWith(Type.class);
for (Class<?> clVt : clVts) {
try {
verificationTypes.add(
(VerificationType) clVt.getMethod("getInstance").invoke(null, null));
} catch (IllegalAccessException | NoSuchMethodException | InvocationTargetException e) {
e.printStackTrace();
}
}
verificationClassificationTypes = new ArrayList<>();
Set<Class<?>> clCts = reflections.getTypesAnnotatedWith(Classification.class);
for (Class<?> clCt : clCts) {
try {
verificationClassificationTypes.add(
(ClassificationType) clCt.getMethod("getInstance").invoke(null, null));
} catch (IllegalAccessException | NoSuchMethodException | InvocationTargetException e) {
e.printStackTrace();
}
}
}
}
public VerifierResultSet generate(String dmnXml) {
if (executor == null) {
initVerifier();
}
return generateWithFilter(dmnXml, null, null);
}
public VerifierResultSet generateFromType(String type, String dmnXml) {
return generateWithFilter(dmnXml, type, null);
}
public VerifierResultSet generateFromClassification(String classification, String dmnXml) {
return generateWithFilter(dmnXml, null, classification);
}
private VerifierResultSet generateWithFilter(
String dmnXml, String typeName, String classificationName) {
initVerifier();
Validate.notNull(dmnXml);
Map<Class<? extends AbstractDmnVerifierConfig>, AbstractDmnVerifierConfig> configs =
getConfigs(dmnXml);
......@@ -68,7 +111,14 @@ public class VerificationService {
} catch (InstantiationException | IllegalAccessException e) {
e.printStackTrace();
}
if (av != null) {
if (av != null
&& (typeName == null || av.getVerificationType().getName().getValue().equals(typeName))
&& (classificationName == null
|| av.getVerificationType()
.getClassification()
.getName()
.getValue()
.equals(classificationName))) {
// Create Configuration
AbstractDmnVerifierConfig vConfig =
configs.get(av.getClass().getAnnotation(DmnVerifier.class).verifierConfig());
......@@ -103,4 +153,14 @@ public class VerificationService {
.build());
return map;
}
public List<VerificationType> getVerificationTypes() {
initVerifier();
return Collections.unmodifiableList(verificationTypes);
}
public List<ClassificationType> getVerificationClassificationTypes() {
initVerifier();
return Collections.unmodifiableList(verificationClassificationTypes);
}
}
......@@ -6,6 +6,7 @@ import de.unikoblenz.fgbks.core.dmn.verification.result.VerifierResult;
import de.unikoblenz.fgbks.core.dmn.verification.verifier.config.AbstractDmnVerifierConfig;
import de.unikoblenz.fgbks.core.dmn.verification.verifier.config.DefaultConfiguration;
import de.unikoblenz.fgbks.core.dmn.verification.verifier.types.VerificationType;
import java.lang.reflect.InvocationTargetException;
import java.util.Objects;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
......@@ -34,8 +35,17 @@ public abstract class AbstractVerifier implements Verifier {
protected AbstractVerifier() {
try {
this.verificationType =
this.getClass().getAnnotation(DmnVerifier.class).verifierType().newInstance();
} catch (InstantiationException | IllegalAccessException e) {
(VerificationType)
this.getClass()
.getAnnotation(DmnVerifier.class)
.verifierType()
.getMethod("getInstance")
.invoke(null, null);
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
resultBuilder = VerifierResult.getBuilder().fromVerifier(this);
......
package de.unikoblenz.fgbks.core.dmn.verification.verifier.classification;
import de.unikoblenz.fgbks.base.domain.Description;
import de.unikoblenz.fgbks.base.domain.Name;
public abstract class AbstractClassificationType implements ClassificationType {
protected Name name;
protected Description description;
protected AbstractClassificationType(Name name, Description description) {
this.name = name;
this.description = description;
}
@Override
public Name getName() {
return name;
}
@Override
public Description getDescription() {
return description;
}
}
package de.unikoblenz.fgbks.core.dmn.verification.verifier.classification;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface Classification {}
package de.unikoblenz.fgbks.core.dmn.verification.verifier.classification;
import de.unikoblenz.fgbks.base.domain.Description;
import de.unikoblenz.fgbks.base.domain.Name;
import java.io.Serializable;
import javax.json.bind.annotation.JsonbProperty;
import javax.validation.constraints.NotNull;
public interface ClassificationType extends Serializable {
@NotNull
@JsonbProperty("name")
Name getName();
@NotNull
@JsonbProperty("description")
Description getDescription();
}
package de.unikoblenz.fgbks.core.dmn.verification.verifier.classification;
import de.unikoblenz.fgbks.base.domain.Description;
import de.unikoblenz.fgbks.base.domain.Name;
@Classification
public class DecisionLogicLevelVerification extends AbstractClassificationType {
private static final DecisionLogicLevelVerification instance =
new DecisionLogicLevelVerification();
private DecisionLogicLevelVerification() {
super(new Name("DecisionLogic"), new Description("test")); // TODO
}
public static DecisionLogicLevelVerification getInstance() {
return instance;
}
}
package de.unikoblenz.fgbks.core.dmn.verification.verifier.classification;
import de.unikoblenz.fgbks.base.domain.Description;
import de.unikoblenz.fgbks.base.domain.Name;
@Classification
public class SyntaxLevelVerification extends AbstractClassificationType {
private static final SyntaxLevelVerification instance = new SyntaxLevelVerification();
private SyntaxLevelVerification() {
super(new Name("Syntax"), new Description("test")); // TODO
}
public static SyntaxLevelVerification getInstance() {
return instance;
}
}
package de.unikoblenz.fgbks.core.dmn.verification.verifier.types;
public abstract class AbstractVerificationType implements VerificationType {}
import de.unikoblenz.fgbks.base.domain.Description;
import de.unikoblenz.fgbks.base.domain.Name;
public abstract class AbstractVerificationType implements VerificationType {
protected Name name;
protected Description description;
protected AbstractVerificationType(Name name, Description description) {
this.name = name;
this.description = description;
}
@Override
public Name getName() {
return name;
}
@Override
public Description getDescription() {
return description;
}
}
......@@ -2,21 +2,25 @@ package de.unikoblenz.fgbks.core.dmn.verification.verifier.types;
import de.unikoblenz.fgbks.base.domain.Description;
import de.unikoblenz.fgbks.base.domain.Name;
import de.unikoblenz.fgbks.core.dmn.verification.verifier.classification.ClassificationType;
import de.unikoblenz.fgbks.core.dmn.verification.verifier.classification.SyntaxLevelVerification;
import javax.validation.constraints.NotNull;
@Type
public class DateVerification extends AbstractVerificationType {
@Override
public VerificationTypeClassification getClassification() {
return VerificationTypeClassification.SYNTAX_LEVEL_VERIFICATION;
private static final DateVerification instance = new DateVerification();
private DateVerification() {
super(new Name("DateFormatCheck"), new Description("test")); // TODO
}
@Override
public Name getName() {
return new Name("Date format check");
public static DateVerification getInstance() {
return instance;
}
@Override
public Description getDescription() {
return new Description("Test"); // TODO
public @NotNull ClassificationType getClassification() {
return SyntaxLevelVerification.getInstance();
}
}
......@@ -2,22 +2,25 @@ package de.unikoblenz.fgbks.core.dmn.verification.verifier.types;
import de.unikoblenz.fgbks.base.domain.Description;
import de.unikoblenz.fgbks.base.domain.Name;
import de.unikoblenz.fgbks.core.dmn.verification.verifier.classification.ClassificationType;
import de.unikoblenz.fgbks.core.dmn.verification.verifier.classification.SyntaxLevelVerification;
import javax.validation.constraints.NotNull;
@Type
public class EmptyOutputVerification extends AbstractVerificationType {
@Override
public @NotNull VerificationTypeClassification getClassification() {
return VerificationTypeClassification.SYNTAX_LEVEL_VERIFICATION;
private static final EmptyOutputVerification instance = new EmptyOutputVerification();
private EmptyOutputVerification() {
super(new Name("EmptyOutputVerification"), new Description("test")); // TODO
}
@Override
public @NotNull Name getName() {
return new Name("Empty output check");
public static EmptyOutputVerification getInstance() {
return instance;
}
@Override
public Description getDescription() {
return new Description("Test"); // TODO
public @NotNull ClassificationType getClassification() {
return SyntaxLevelVerification.getInstance();
}
}
package de.unikoblenz.fgbks.core.dmn.verification.verifier.types;
import static de.unikoblenz.fgbks.core.dmn.verification.verifier.types.VerificationTypeClassification.DECISION_LOGIC_LEVEL_VERIFICATION;
import de.unikoblenz.fgbks.base.domain.Description;
import de.unikoblenz.fgbks.base.domain.Name;
import de.unikoblenz.fgbks.core.dmn.verification.verifier.classification.ClassificationType;
import de.unikoblenz.fgbks.core.dmn.verification.verifier.classification.DecisionLogicLevelVerification;
import javax.validation.constraints.NotNull;
@Type
public class EquivalentStringVerification extends AbstractVerificationType {
@Override
public @NotNull VerificationTypeClassification getClassification() {
return DECISION_LOGIC_LEVEL_VERIFICATION;
private static final EquivalentStringVerification instance = new EquivalentStringVerification();
private EquivalentStringVerification() {
super(new Name("EquivalentStringVerification"), new Description("test")); // TODO
}
@Override
public @NotNull Name getName() {
return new Name(this.getClass().getSimpleName());
public static EquivalentStringVerification getInstance() {
return instance;
}
@Override
public @NotNull Description getDescription() {
return new Description("test"); // TODO
public @NotNull ClassificationType getClassification() {
return DecisionLogicLevelVerification.getInstance();
}
}
package de.unikoblenz.fgbks.core.dmn.verification.verifier.types;
import static de.unikoblenz.fgbks.core.dmn.verification.verifier.types.VerificationTypeClassification.DECISION_LOGIC_LEVEL_VERIFICATION;
import de.unikoblenz.fgbks.base.domain.Description;
import de.unikoblenz.fgbks.base.domain.Name;
import de.unikoblenz.fgbks.core.dmn.verification.verifier.classification.ClassificationType;
import de.unikoblenz.fgbks.core.dmn.verification.verifier.classification.DecisionLogicLevelVerification;
import javax.validation.constraints.NotNull;
@Type
public class IdenticalBusinessRuleVerification extends AbstractVerificationType {
@Override
public @NotNull VerificationTypeClassification getClassification() {
return DECISION_LOGIC_LEVEL_VERIFICATION;
private static final IdenticalBusinessRuleVerification instance =
new IdenticalBusinessRuleVerification();
private IdenticalBusinessRuleVerification() {
super(new Name("IdenticalBusinessRuleVerification"), new Description("test")); // TODO
}
@Override
public @NotNull Name getName() {
return new Name(this.getClass().getSimpleName());
public static IdenticalBusinessRuleVerification getInstance() {
return instance;
}
@Override
public @NotNull Description getDescription() {
return new Description("test"); // TODO
public @NotNull ClassificationType getClassification() {
return DecisionLogicLevelVerification.getInstance();
}
}
......@@ -2,22 +2,27 @@ package de.unikoblenz.fgbks.core.dmn.verification.verifier.types;
import de.unikoblenz.fgbks.base.domain.Description;
import de.unikoblenz.fgbks.base.domain.Name;
import de.unikoblenz.fgbks.core.dmn.verification.verifier.classification.ClassificationType;
import de.unikoblenz.fgbks.core.dmn.verification.verifier.classification.SyntaxLevelVerification;
import javax.validation.constraints.NotNull;
@Type
public class InputValueSyntaxVerification extends AbstractVerificationType {
@Override
public @NotNull VerificationTypeClassification getClassification() {
return VerificationTypeClassification.SYNTAX_LEVEL_VERIFICATION;
private static final InputValueSyntaxVerification instance = new InputValueSyntaxVerification();
private InputValueSyntaxVerification() {
super(
new Name("InputValueSyntaxVerification"),
new Description("Check values for syntactical correctness."));
}
@Override
public @NotNull Name getName() {
return new Name(this.getClass().getSimpleName());
public static InputValueSyntaxVerification getInstance() {
return instance;
}
@Override
public @NotNull Description getDescription() {
return new Description("Check values for syntactical correctness.");
public @NotNull ClassificationType getClassification() {
return SyntaxLevelVerification.getInstance();
}
}
......@@ -2,22 +2,25 @@ package de.unikoblenz.fgbks.core.dmn.verification.verifier.types;
import de.unikoblenz.fgbks.base.domain.Description;
import de.unikoblenz.fgbks.base.domain.Name;
import de.unikoblenz.fgbks.core.dmn.verification.verifier.classification.ClassificationType;
import de.unikoblenz.fgbks.core.dmn.verification.verifier.classification.DecisionLogicLevelVerification;
import javax.validation.constraints.NotNull;
@Type
public class MissingRuleVerification extends AbstractVerificationType {
@Override
public @NotNull VerificationTypeClassification getClassification() {
return VerificationTypeClassification.DECISION_LOGIC_LEVEL_VERIFICATION;
private static final MissingRuleVerification instance = new MissingRuleVerification();
private MissingRuleVerification() {
super(new Name("MissingRuleVerification"), new Description("test")); // TODO
}
@Override
public @NotNull Name getName() {
return new Name(this.getClass().getSimpleName());
public static MissingRuleVerification getInstance() {
return instance;
}
@Override
public @NotNull Description getDescription() {
return new Description("test"); // TODO
public @NotNull ClassificationType getClassification() {
return DecisionLogicLevelVerification.getInstance();
}
}
......@@ -2,22 +2,25 @@ package de.unikoblenz.fgbks.core.dmn.verification.verifier.types;
import de.unikoblenz.fgbks.base.domain.Description;
import de.unikoblenz.fgbks.base.domain.Name;
import de.unikoblenz.fgbks.core.dmn.verification.verifier.classification.ClassificationType;
import de.unikoblenz.fgbks.core.dmn.verification.verifier.classification.DecisionLogicLevelVerification;
import javax.validation.constraints.NotNull;
@Type
public class OverlappingVerification extends AbstractVerificationType {
@Override
public @NotNull VerificationTypeClassification getClassification() {
return VerificationTypeClassification.DECISION_LOGIC_LEVEL_VERIFICATION;
private static final OverlappingVerification instance = new OverlappingVerification();
private OverlappingVerification() {
super(new Name("OverlappingVerification"), new Description("test")); // TODO
}
@Override
public @NotNull Name getName() {
return new Name(this.getClass().getSimpleName());
public static OverlappingVerification getInstance() {
return instance;
}
@Override
public @NotNull Description getDescription() {
return new Description("test"); // TODO
public @NotNull ClassificationType getClassification() {
return DecisionLogicLevelVerification.getInstance();
}
}
......@@ -2,22 +2,25 @@ package de.unikoblenz.fgbks.core.dmn.verification.verifier.types;
import de.unikoblenz.fgbks.base.domain.Description;
import de.unikoblenz.fgbks.base.domain.Name;
import de.unikoblenz.fgbks.core.dmn.verification.verifier.classification.ClassificationType;
import de.unikoblenz.fgbks.core.dmn.verification.verifier.classification.DecisionLogicLevelVerification;
import javax.validation.constraints.NotNull;
@Type
public class PartialReductionVerification extends AbstractVerificationType {
@Override
public @NotNull VerificationTypeClassification getClassification() {
return VerificationTypeClassification.DECISION_LOGIC_LEVEL_VERIFICATION;
private static final PartialReductionVerification instance = new PartialReductionVerification();
private PartialReductionVerification() {
super(new Name("PartialReductionVerification"), new Description("test")); // TODO
}
@Override
public @NotNull Name getName() {
return new Name(this.getClass().getSimpleName());
public static PartialReductionVerification getInstance() {
return instance;
}
@Override
public @NotNull Description getDescription() {
return new Description("test"); // TODO
public @NotNull ClassificationType getClassification() {
return DecisionLogicLevelVerification.getInstance();
}
}
......@@ -2,22 +2,25 @@ package de.unikoblenz.fgbks.core.dmn.verification.verifier.types;
import de.unikoblenz.fgbks.base.domain.Description;
import de.unikoblenz.fgbks.base.domain.Name;
import de.unikoblenz.fgbks.core.dmn.verification.verifier.classification.ClassificationType;
import de.unikoblenz.fgbks.core.dmn.verification.verifier.classification.DecisionLogicLevelVerification;
import javax.validation.constraints.NotNull;
@Type
public class SubsumptionVerification extends AbstractVerificationType {
@Override
public @NotNull VerificationTypeClassification getClassification() {
return VerificationTypeClassification.DECISION_LOGIC_LEVEL_VERIFICATION;
private static final SubsumptionVerification instance = new SubsumptionVerification();
private SubsumptionVerification() {
super(new Name("SubsumptionVerification"), new Description("test")); // TODO
}
@Override
public @NotNull Name getName() {
return new Name(this.getClass().getSimpleName());
public static SubsumptionVerification getInstance() {
return instance;
}
@Override
public @NotNull Description getDescription() {
return new Description("test"); // TODO
public @NotNull ClassificationType getClassification() {
return DecisionLogicLevelVerification.getInstance();
}
}
package de.unikoblenz.fgbks.core.dmn.verification.verifier.types;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface Type {}
......@@ -3,6 +3,7 @@ package de.unikoblenz.fgbks.core.dmn.verification.verifier.types;
import de.unikoblenz.fgbks.base.domain.Description;
import de.unikoblenz.fgbks.base.domain.Name;
import de.unikoblenz.fgbks.base.value.ValueObject;
import de.unikoblenz.fgbks.core.dmn.verification.verifier.classification.ClassificationType;
import javax.json.bind.annotation.JsonbProperty;
import javax.validation.constraints.NotNull;
......@@ -10,7 +11,7 @@ public interface VerificationType extends ValueObject {
@NotNull
@JsonbProperty("classification")
VerificationTypeClassification getClassification();
ClassificationType getClassification();
@NotNull
@JsonbProperty("name")
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment