From 490fedb951133d3e7938fb8e238fb9f03a633ab0 Mon Sep 17 00:00:00 2001
From: Jonas Blatt <jonasblatt@uni-koblenz.de>
Date: Wed, 9 Oct 2019 20:18:31 +0200
Subject: [PATCH] Add initialization of verifier at application startup + Add
 verification process id

---
 .../fgbks/api/AppLifecycleBean.java           | 28 +++++++++++++++++++
 .../verification/DmnVerificationService.java  | 21 +++++++++-----
 .../verifier/AbstractVerifier.java            | 13 ++++++---
 .../config/AbstractDmnVerifierConfig.java     |  5 ++++
 .../verifier/config/DefaultConfiguration.java |  6 +++-
 5 files changed, 61 insertions(+), 12 deletions(-)
 create mode 100644 dmnverifierapi/src/main/java/de/unikoblenz/fgbks/api/AppLifecycleBean.java

diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/api/AppLifecycleBean.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/api/AppLifecycleBean.java
new file mode 100644
index 00000000..0f5cfe1b
--- /dev/null
+++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/api/AppLifecycleBean.java
@@ -0,0 +1,28 @@
+package de.unikoblenz.fgbks.api;
+
+import de.unikoblenz.fgbks.core.dmn.verification.DmnVerificationService;
+import io.quarkus.runtime.ShutdownEvent;
+import io.quarkus.runtime.StartupEvent;
+import javax.enterprise.context.ApplicationScoped;
+import javax.enterprise.event.Observes;
+import javax.inject.Inject;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+@ApplicationScoped
+public class AppLifecycleBean {
+
+  private static final Logger LOGGER = LoggerFactory.getLogger("AppLifecycle");
+
+  @Inject
+  DmnVerificationService dmnVerificationService;
+
+  void onStart(@Observes StartupEvent ev) {
+    LOGGER.info("The dmn verification application is starting...");
+    dmnVerificationService.initVerifier();
+  }
+
+  void onStop(@Observes ShutdownEvent ev) {
+    LOGGER.info("The dmn verification application is stopping...");
+  }
+}
diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/DmnVerificationService.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/DmnVerificationService.java
index 0d9ad88f..7c59e3e2 100644
--- a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/DmnVerificationService.java
+++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/DmnVerificationService.java
@@ -1,5 +1,6 @@
 package de.unikoblenz.fgbks.core.dmn.verification;
 
+import de.unikoblenz.fgbks.base.utils.UniqueIdGenerator;
 import de.unikoblenz.fgbks.core.dmn.utils.DmnService;
 import de.unikoblenz.fgbks.core.dmn.verification.result.VerifierResult;
 import de.unikoblenz.fgbks.core.dmn.verification.result.VerifierResultSet;
@@ -104,7 +105,6 @@ public class DmnVerificationService {
    * @return a list of {@link VerificationType}s
    */
   public List<VerificationType> getVerificationTypes() {
-    initVerifier();
     return Collections.unmodifiableList(verificationTypes);
   }
 
@@ -115,11 +115,13 @@ public class DmnVerificationService {
    * @return a list of {@link ClassificationType}s
    */
   public List<ClassificationType> getVerificationClassificationTypes() {
-    initVerifier();
     return Collections.unmodifiableList(verificationClassificationTypes);
   }
 
-  private void initVerifier() {
+  /**
+   * Init the verification service instance.
+   */
+  public void initVerifier() {
     if (executor == null || verifierClasses == null) {
       LOGGER.info("Init verification.");
       LOGGER.info("Creating thread pool with " + maxThreads + " threads.");
@@ -161,12 +163,13 @@ public class DmnVerificationService {
   }
 
   private Map<Class<? extends AbstractDmnVerifierConfig>, AbstractDmnVerifierConfig> getConfigs(
-      String dmnXml) {
+      String dmnXml, long verificationProcessId) {
     Map<Class<? extends AbstractDmnVerifierConfig>, AbstractDmnVerifierConfig> map =
         new ConcurrentHashMap<>();
     map.put(
         DefaultConfiguration.class,
         DefaultConfiguration.getBuilder()
+            .withVerificationProcessId(verificationProcessId)
             .withDmnObjectContainer(dmnService.getDmnServiceFromXml(dmnXml))
             .build());
     return map;
@@ -174,12 +177,15 @@ public class DmnVerificationService {
 
   private VerifierResultSet generateWithFilter(
       String dmnXml, String typeName, String classificationName) {
-    initVerifier();
+    long verificationProcessId = UniqueIdGenerator.getNextId();
+    LOGGER.info("Start verification process. Id: " + verificationProcessId);
+    LOGGER.info("Parsing dmn. Id: " + verificationProcessId);
     Validate.notNull(dmnXml);
+    LOGGER.debug(dmnXml);
     Map<Class<? extends AbstractDmnVerifierConfig>, AbstractDmnVerifierConfig> configs =
-        getConfigs(dmnXml);
+        getConfigs(dmnXml, verificationProcessId);
     Builder resultBuilder = VerifierResultSet.getBuilder();
-
+    LOGGER.info("Looking for verifiers. Id: " + verificationProcessId);
     List<Future<VerifierResult>> results = new ArrayList<>(verifierClasses.size());
 
     for (Class<?> verifierClass : verifierClasses) {
@@ -214,6 +220,7 @@ public class DmnVerificationService {
             e.printStackTrace();
           }
         });
+    LOGGER.info("Verification finished. Id: " + verificationProcessId);
 
     return resultBuilder.build();
   }
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 62c8e1fb..528b700a 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
@@ -78,7 +78,11 @@ public abstract class AbstractVerifier implements Verifier {
   }
 
   private VerifierResult verify() {
-    LOGGER.info("Starting verification " + getVerificationType().getName());
+    LOGGER.info(
+        "Starting verification "
+            + getVerificationType().getName()
+            + " Id: "
+            + this.verifierConfig.getVerificationProcessId());
     StopWatch watch = new StopWatch();
     watch.start();
     doVerification();
@@ -87,9 +91,10 @@ public abstract class AbstractVerifier implements Verifier {
     LOGGER.info(
         "Verification "
             + getVerificationType().getName()
-            + " finished. "
-            + "Time Elapsed: "
-            + executionTime
+            + " finished. Id: "
+            + this.verifierConfig.getVerificationProcessId()
+            + " Time Elapsed: "
+            + +executionTime
             + " ms");
     return resultBuilder.withExecutionTime(executionTime).build();
   }
diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/config/AbstractDmnVerifierConfig.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/config/AbstractDmnVerifierConfig.java
index a606c581..a9df7952 100644
--- a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/config/AbstractDmnVerifierConfig.java
+++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/config/AbstractDmnVerifierConfig.java
@@ -7,6 +7,7 @@ public abstract class AbstractDmnVerifierConfig {
 
   private HashMap<String, Object> configurationProperties;
   private HashMap<String, Class<?>> configurationTypes;
+  protected long verificationProcessId;
 
   public <E> E getConfiguration(String key) {
     return (E) configurationProperties.getOrDefault(key, null);
@@ -16,6 +17,10 @@ public abstract class AbstractDmnVerifierConfig {
     return configurationTypes.get(key);
   }
 
+  public long getVerificationProcessId() {
+    return verificationProcessId;
+  }
+
   protected AbstractDmnVerifierConfig withConfigurationProperty(String key, Object value) {
     configurationProperties.put(Validate.notNull(key), Validate.notNull(value));
     configurationTypes.put(key, value.getClass());
diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/config/DefaultConfiguration.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/config/DefaultConfiguration.java
index 6a9f0747..a232e311 100644
--- a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/config/DefaultConfiguration.java
+++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/config/DefaultConfiguration.java
@@ -11,7 +11,6 @@ public class DefaultConfiguration extends AbstractDmnVerifierConfig {
   public static final String KEY_SHARED_MAP = "sharedMap";
 
   protected DefaultConfiguration() {
-    super();
     super.withConfigurationProperty(KEY_SHARED_MAP, new ConcurrentHashMap<>(1024));
   }
 
@@ -26,6 +25,11 @@ public class DefaultConfiguration extends AbstractDmnVerifierConfig {
       return this;
     }
 
+    public Builder withVerificationProcessId(long verificationProcessId) {
+      value.verificationProcessId = verificationProcessId;
+      return this;
+    }
+
     @Override
     protected void validate() {
       super.validate();
-- 
GitLab