From 09500bd46ee96ceefa71d5bdca2f44ca8dc887dd Mon Sep 17 00:00:00 2001
From: Valentin Lorand <valentin.lorand@kereval.com>
Date: Mon, 25 Sep 2023 13:22:53 +0200
Subject: [PATCH] Integrate GUM Step 2

---
 .project                                      |  29 ---
 GazelleHL7v2Validator-ear/pom.xml             |  13 +-
 .../src/main/sql/init-3.8.2.sql               |   6 +-
 .../src/main/sql/update-3.8.6.sql             |   2 +
 GazelleHL7v2Validator-ejb/pom.xml             |  19 +-
 .../hl7/validator/core/HL7Validator.java      |   7 +-
 .../hl7/ws/GazelleHL7v2ValidationGITBWS.java  |   9 +-
 .../hl7/ws/GazelleHL7v2ValidationWS.java      |   8 +-
 .../hl7/ws/GazelleHL7v3ValidationWS.java      |   8 +-
 .../validator/core/GazelleHL7v3Validator.java |   6 +-
 .../net/ihe/gazelle/security/IpPrincipal.java |  69 -------
 .../net/ihe/gazelle/security/SSOIdentity.java | 175 ------------------
 .../src/main/resources/gzl.version.properties |   4 +-
 GazelleHL7v2Validator-ui/pom.xml              |   9 +-
 .../messages.properties                       |   4 +
 .../messages.properties                       |   4 +
 .../messages.properties                       |   4 +
 .../messages.properties                       |   4 +
 .../messages.properties                       |   4 +
 .../messages.properties                       |   4 +
 .../messages.properties                       |   4 +
 .../messages.properties                       |   4 +
 .../messages.properties                       |   4 +
 .../messages.properties                       |   4 +
 .../src/main/webapp/WEB-INF/components.xml    |   3 +-
 .../src/main/webapp/WEB-INF/pages.xml         |  18 +-
 .../src/main/webapp/WEB-INF/web.xml           |  26 ++-
 .../src/main/webapp/layout/login.xhtml        |  35 ----
 .../src/main/webapp/layout/menu.xhtml         |   2 +-
 gazelle-hl7-validator-report-jar/pom.xml      |   2 +-
 gazelle-hl7v2-validator-api-jar/pom.xml       |   2 +-
 gvt-validation-jar/pom.xml                    |   2 +-
 pom.xml                                       |  29 ++-
 33 files changed, 166 insertions(+), 357 deletions(-)
 delete mode 100644 .project
 create mode 100644 GazelleHL7v2Validator-ear/src/main/sql/update-3.8.6.sql
 delete mode 100644 GazelleHL7v2Validator-ejb/src/main/java/net/ihe/gazelle/security/IpPrincipal.java
 delete mode 100644 GazelleHL7v2Validator-ejb/src/main/java/net/ihe/gazelle/security/SSOIdentity.java
 create mode 100644 GazelleHL7v2Validator-ui/src/main/crowdin/de/net.ihe.gazelle.cas-client-ui-v7/messages.properties
 create mode 100644 GazelleHL7v2Validator-ui/src/main/crowdin/en/net.ihe.gazelle.cas-client-ui-v7/messages.properties
 create mode 100644 GazelleHL7v2Validator-ui/src/main/crowdin/es-ES/net.ihe.gazelle.cas-client-ui-v7/messages.properties
 create mode 100644 GazelleHL7v2Validator-ui/src/main/crowdin/fi/net.ihe.gazelle.cas-client-ui-v7/messages.properties
 create mode 100644 GazelleHL7v2Validator-ui/src/main/crowdin/fr/net.ihe.gazelle.cas-client-ui-v7/messages.properties
 create mode 100644 GazelleHL7v2Validator-ui/src/main/crowdin/ja/net.ihe.gazelle.cas-client-ui-v7/messages.properties
 create mode 100644 GazelleHL7v2Validator-ui/src/main/crowdin/pl/net.ihe.gazelle.cas-client-ui-v7/messages.properties
 create mode 100644 GazelleHL7v2Validator-ui/src/main/crowdin/sv-SE/net.ihe.gazelle.cas-client-ui-v7/messages.properties
 create mode 100644 GazelleHL7v2Validator-ui/src/main/crowdin/zh-CN/net.ihe.gazelle.cas-client-ui-v7/messages.properties
 create mode 100644 GazelleHL7v2Validator-ui/src/main/crowdin/zh-TW/net.ihe.gazelle.cas-client-ui-v7/messages.properties
 delete mode 100644 GazelleHL7v2Validator-ui/src/main/webapp/layout/login.xhtml

diff --git a/.project b/.project
deleted file mode 100644
index c8519a14..00000000
--- a/.project
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>GazelleHL7v2Validator</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.python.pydev.PyDevBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.maven.ide.eclipse.maven2Builder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.m2e.core.maven2Builder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.m2e.core.maven2Nature</nature>
-		<nature>org.maven.ide.eclipse.maven2Nature</nature>
-		<nature>org.python.pydev.pythonNature</nature>
-	</natures>
-</projectDescription>
diff --git a/GazelleHL7v2Validator-ear/pom.xml b/GazelleHL7v2Validator-ear/pom.xml
index cd4b13ca..10600cbd 100644
--- a/GazelleHL7v2Validator-ear/pom.xml
+++ b/GazelleHL7v2Validator-ear/pom.xml
@@ -3,7 +3,7 @@
     <parent>
         <artifactId>GazelleHL7v2Validator</artifactId>
         <groupId>net.ihe.gazelle</groupId>
-        <version>3.8.6-SNAPSHOT</version>
+        <version>3.8.6-NPD-694-SNAPSHOT</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
     <modelVersion>4.0.0</modelVersion>
@@ -11,7 +11,7 @@
     <artifactId>GazelleHL7v2Validator-ear</artifactId>
     <packaging>ear</packaging>
     <name>GazelleHL7v2Validator-ear</name>
-    <version>3.8.6-SNAPSHOT</version>
+    <version>3.8.6-NPD-694-SNAPSHOT</version>
     <contributors>
         <contributor>
             <organization>INRIA - Rennes Bretagne Atlantique</organization>
@@ -67,6 +67,11 @@
                             <artifactId>gazelle-seam-tools-jar</artifactId>
                             <uri>gazelle-seam-tools-jar.jar</uri>
                         </ejbModule>
+                        <ejbModule>
+                            <groupId>net.ihe.gazelle.maven</groupId>
+                            <artifactId>version</artifactId>
+                            <uri>version.jar</uri>
+                        </ejbModule>
                     </modules>
                     <version>6</version>
                 </configuration>
@@ -100,14 +105,14 @@
             <groupId>net.ihe.gazelle</groupId>
             <artifactId>GazelleHL7v2Validator-ui</artifactId>
             <type>war</type>
-            <version>3.8.6-SNAPSHOT</version>
+            <version>3.8.6-NPD-694-SNAPSHOT</version>
             <scope>compile</scope>
         </dependency>
         <dependency>
             <groupId>net.ihe.gazelle</groupId>
             <artifactId>GazelleHL7v2Validator-ejb</artifactId>
             <type>ejb</type>
-            <version>3.8.6-SNAPSHOT</version>
+            <version>3.8.6-NPD-694-SNAPSHOT</version>
         </dependency>
         <dependency>
             <groupId>org.jboss.seam</groupId>
diff --git a/GazelleHL7v2Validator-ear/src/main/sql/init-3.8.2.sql b/GazelleHL7v2Validator-ear/src/main/sql/init-3.8.2.sql
index 494d1240..9b01c54c 100644
--- a/GazelleHL7v2Validator-ear/src/main/sql/init-3.8.2.sql
+++ b/GazelleHL7v2Validator-ear/src/main/sql/init-3.8.2.sql
@@ -17,16 +17,16 @@ INSERT INTO app_configuration (id, variable, value) VALUES (nextval('app_configu
 INSERT INTO app_configuration (id, variable, value) VALUES (nextval('app_configuration_id_seq'), 'hl7_profile_xsd', 'https://gazelle.ihe.net/xsd/HL7MessageProfileSchema.xsd');
 INSERT INTO app_configuration (id, variable, value) VALUES (nextval('app_configuration_id_seq'), 'hl7_resource_xsd', 'https://gazelle.ihe.net/xsd/HL7TableSchema.xsd');
 INSERT INTO app_configuration (id, variable, value) VALUES (nextval('app_configuration_id_seq'), 'ip_login', 'true');
+INSERT INTO app_configuration (id, variable, value) VALUES (nextval('app_configuration_id_seq'), 'cas_enabled', 'false');
 INSERT INTO app_configuration (id, variable, value) VALUES (nextval('app_configuration_id_seq'), 'ip_login_admin', '.*');
 INSERT INTO app_configuration (id, variable, value) VALUES (nextval('app_configuration_id_seq'), 'force_stylesheet', 'false');
 INSERT INTO app_configuration (id, variable, value) VALUES (nextval('app_configuration_id_seq'), 'profile_xsl_url', 'none');
 INSERT INTO app_configuration (id, variable, value) VALUES (nextval('app_configuration_id_seq'), 'resource_xsl_url', 'none');
-INSERT INTO app_configuration (id, variable, value) VALUES (nextval('app_configuration_id_seq'), 'application_works_without_cas', 'false');
 INSERT INTO app_configuration (id, variable, value) VALUES (nextval('app_configuration_id_seq'), 'svs_repository_url', 'https://gazelle.ihe.net/SVSSimulator/rest/RetrieveValueSetForSimulator');
 INSERT INTO app_configuration (id, variable, value) VALUES (nextval('app_configuration_id_seq'), 'xcpd_plq_xsd_location', '/home/gazelle/xsd/IHE/XCPD_PLQ.xsd');
 INSERT INTO app_configuration (id, variable, value) VALUES (nextval('app_configuration_id_seq'), 'NUMBER_OF_ITEMS_PER_PAGE', '20');
-INSERT INTO app_configuration (id, variable ,value) VALUES (nextval('app_configuration_id_seq'),  'IGAMT_directory','/IGAMTConformanceProfiles');
-INSERT INTO app_configuration (id, variable, value) VALUES (nextval('app_configuration_id_seq'),  'hl7_directory','/opt/GazelleHL7Validator/gazelle-hl7v2-validator-resources');
+INSERT INTO app_configuration (id, variable ,value) VALUES (nextval('app_configuration_id_seq'), 'IGAMT_directory','/IGAMTConformanceProfiles');
+INSERT INTO app_configuration (id, variable, value) VALUES (nextval('app_configuration_id_seq'), 'hl7_directory','/opt/GazelleHL7Validator/gazelle-hl7v2-validator-resources');
 INSERT INTO app_configuration (id, variable, value) VALUES (nextval('app_configuration_id_seq'), 'jar_path','/opt/GazelleHL7Validator/gazelle-hl7v2-validator-resources/GVTValidatorResources/gvt-validation-jar-jar-with-dependencies.jar');
 INSERT INTO app_configuration (id, variable, value) VALUES (nextval('app_configuration_id_seq'), 'link_to_cgu','cgu link that need to be changed');
 SELECT pg_catalog.setval('app_configuration_id_seq', 27, true);
diff --git a/GazelleHL7v2Validator-ear/src/main/sql/update-3.8.6.sql b/GazelleHL7v2Validator-ear/src/main/sql/update-3.8.6.sql
new file mode 100644
index 00000000..615cd358
--- /dev/null
+++ b/GazelleHL7v2Validator-ear/src/main/sql/update-3.8.6.sql
@@ -0,0 +1,2 @@
+DELETE FROM app_configuration WHERE variable = 'cas_url';
+UPDATE app_configuration SET variable = 'cas_enabled' WHERE variable = 'cas_enable';
\ No newline at end of file
diff --git a/GazelleHL7v2Validator-ejb/pom.xml b/GazelleHL7v2Validator-ejb/pom.xml
index a30c52e5..a856e926 100644
--- a/GazelleHL7v2Validator-ejb/pom.xml
+++ b/GazelleHL7v2Validator-ejb/pom.xml
@@ -3,7 +3,7 @@
     <parent>
         <artifactId>GazelleHL7v2Validator</artifactId>
         <groupId>net.ihe.gazelle</groupId>
-        <version>3.8.6-SNAPSHOT</version>
+        <version>3.8.6-NPD-694-SNAPSHOT</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
     <modelVersion>4.0.0</modelVersion>
@@ -63,11 +63,6 @@
             <artifactId>hibernate-entitymanager</artifactId>
             <scope>provided</scope>
         </dependency>
-        <dependency>
-            <groupId>net.ihe.gazelle</groupId>
-            <artifactId>gazelle-cas-client</artifactId>
-            <version>1.1.0</version>
-        </dependency>
         <dependency>
             <groupId>commons-io</groupId>
             <artifactId>commons-io</artifactId>
@@ -215,7 +210,6 @@
         <dependency>
             <groupId>net.ihe.gazelle.maven</groupId>
             <artifactId>version</artifactId>
-            <version>1.0.3</version>
             <type>ejb</type>
         </dependency>
         <dependency>
@@ -276,9 +270,18 @@
         <dependency>
             <groupId>net.ihe.gazelle</groupId>
             <artifactId>gvt-validation-jar</artifactId>
-            <version>3.8.6-SNAPSHOT</version>
+            <version>3.8.6-NPD-694-SNAPSHOT</version>
             <scope>compile</scope>
         </dependency>
+        <dependency>
+            <groupId>net.ihe.gazelle</groupId>
+            <artifactId>sso-api-v7</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>net.ihe.gazelle</groupId>
+            <artifactId>cas-client-v7</artifactId>
+        </dependency>
+
         <dependency>
             <artifactId>gazelle-gdpr-ejb</artifactId>
             <groupId>net.ihe.gazelle</groupId>
diff --git a/GazelleHL7v2Validator-ejb/src/main/java/net/ihe/gazelle/hl7/validator/core/HL7Validator.java b/GazelleHL7v2Validator-ejb/src/main/java/net/ihe/gazelle/hl7/validator/core/HL7Validator.java
index d08fb97e..5935539e 100644
--- a/GazelleHL7v2Validator-ejb/src/main/java/net/ihe/gazelle/hl7/validator/core/HL7Validator.java
+++ b/GazelleHL7v2Validator-ejb/src/main/java/net/ihe/gazelle/hl7/validator/core/HL7Validator.java
@@ -13,7 +13,8 @@ import net.ihe.gazelle.hl7.validator.report.ValidationResults;
 import net.ihe.gazelle.hl7.validator.report.ValidationStatus;
 import net.ihe.gazelle.hql.providers.EntityManagerService;
 import net.ihe.gazelle.validation.exception.GazelleValidationException;
-import net.ihe.version.ws.Interface.Preferences;
+import net.ihe.gazelle.version.ws.VersionProvider;
+import net.ihe.gazelle.version.ws.VersionProviderInterface;
 import org.jboss.seam.contexts.Contexts;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -31,6 +32,7 @@ import java.nio.charset.StandardCharsets;
 
 public class HL7Validator {
 
+    VersionProviderInterface versionProvider;
     private static final Logger LOG = LoggerFactory.getLogger(HL7Validator.class);
 
     private String callerIP;
@@ -45,6 +47,7 @@ public class HL7Validator {
         this.xmlMessageMetadata = xmlMessageMetaData;
         setValidationContext(xmlValidationContext);
         this.messageToValidate = inMessage;
+        versionProvider = new VersionProvider();
     }
 
     private void setValidationContext(String xmlValidationContext) {
@@ -236,7 +239,7 @@ public class HL7Validator {
                 validationContext.getDatatype(), validationContext.getMessageStructure());
         report.setResults(results);
         report.getOverview().setMessageOid(generateNextOid());
-        report.getOverview().setValidationServiceVersion(Preferences.getProperty("buildVersion"));
+        report.getOverview().setValidationServiceVersion(versionProvider.getVersion());
 
     }
 
diff --git a/GazelleHL7v2Validator-ejb/src/main/java/net/ihe/gazelle/hl7/ws/GazelleHL7v2ValidationGITBWS.java b/GazelleHL7v2Validator-ejb/src/main/java/net/ihe/gazelle/hl7/ws/GazelleHL7v2ValidationGITBWS.java
index 7a05353f..7372ee7e 100644
--- a/GazelleHL7v2Validator-ejb/src/main/java/net/ihe/gazelle/hl7/ws/GazelleHL7v2ValidationGITBWS.java
+++ b/GazelleHL7v2Validator-ejb/src/main/java/net/ihe/gazelle/hl7/ws/GazelleHL7v2ValidationGITBWS.java
@@ -15,8 +15,9 @@ import net.ihe.gazelle.hl7.validator.report.GazelleProfileException;
 import net.ihe.gazelle.hl7.validator.report.HL7v2ValidationReport;
 import net.ihe.gazelle.hl7.validator.report.ValidationResultsOverview;
 import net.ihe.gazelle.hl7.validator.report.Warning;
-import net.ihe.version.ws.Interface.Preferences;
+import net.ihe.gazelle.version.ws.VersionProviderInterface;
 import org.apache.commons.codec.binary.Base64;
+import org.jboss.seam.annotations.In;
 import org.jboss.seam.annotations.Name;
 import org.jboss.seam.contexts.Lifecycle;
 import org.w3c.dom.bootstrap.DOMImplementationRegistry;
@@ -56,10 +57,14 @@ import java.util.List;
 @GenerateInterface(value = "GazelleHL7v2ValidationGITBWSRemote", isLocal = false, isRemote = true)
 public class GazelleHL7v2ValidationGITBWS implements GazelleHL7v2ValidationGITBWSRemote, ValidationService  {
 
+
+    @In(value = "versionProvider")
+    VersionProviderInterface versionProvider;
     private static String INPUT_METADATA = "xmlValidationMetadata";
     private static String INPUT_CONTEXT = "xmlValidationContext";
     private static String INPUT_MESSAGE = "messageToValidate";
 
+
     @Resource
     WebServiceContext jaxwsContext;
 
@@ -76,7 +81,7 @@ public class GazelleHL7v2ValidationGITBWS implements GazelleHL7v2ValidationGITBW
         response.getModule().setOperation("V");
         response.getModule().setMetadata(new Metadata());
         response.getModule().getMetadata().setName(ValidationResultsOverview.TOOL_NAME);
-        response.getModule().getMetadata().setVersion(Preferences.getProperty("buildVersion"));
+        response.getModule().getMetadata().setVersion(versionProvider.getVersion());
         response.getModule().getMetadata().setDescription(ValidationResultsOverview.DISCLAIMER);
         response.getModule().setInputs(new TypedParameters());
         TypedParameter xmlValidationMetadataInput = new TypedParameter();
diff --git a/GazelleHL7v2Validator-ejb/src/main/java/net/ihe/gazelle/hl7/ws/GazelleHL7v2ValidationWS.java b/GazelleHL7v2Validator-ejb/src/main/java/net/ihe/gazelle/hl7/ws/GazelleHL7v2ValidationWS.java
index 895ceea2..d799c886 100644
--- a/GazelleHL7v2Validator-ejb/src/main/java/net/ihe/gazelle/hl7/ws/GazelleHL7v2ValidationWS.java
+++ b/GazelleHL7v2Validator-ejb/src/main/java/net/ihe/gazelle/hl7/ws/GazelleHL7v2ValidationWS.java
@@ -18,7 +18,8 @@ package net.ihe.gazelle.hl7.ws;
 
 import net.ihe.gazelle.common.interfacegenerator.GenerateInterface;
 import net.ihe.gazelle.hl7.validator.core.HL7Validator;
-import net.ihe.version.ws.Interface.Preferences;
+import net.ihe.gazelle.version.ws.VersionProviderInterface;
+import org.jboss.seam.annotations.In;
 import org.jboss.seam.annotations.Name;
 import org.jboss.seam.contexts.Lifecycle;
 import org.slf4j.Logger;
@@ -43,6 +44,9 @@ import java.io.IOException;
 @GenerateInterface(value = "GazelleHL7v2ValidationWSRemote", isLocal = false, isRemote = true)
 public class GazelleHL7v2ValidationWS implements GazelleHL7v2ValidationWSRemote {
 
+    @In(value = "versionProvider")
+    VersionProviderInterface versionProvider;
+
     @Resource
     WebServiceContext jaxwsContext;
 
@@ -75,7 +79,7 @@ public class GazelleHL7v2ValidationWS implements GazelleHL7v2ValidationWSRemote
     @WebMethod
     @WebResult(name = "about")
     public String about() {
-        String toolVersion = Preferences.getProperty("buildVersion");
+        String toolVersion = versionProvider.getVersion();
         StringBuilder about = new StringBuilder();
         about.append("GazelleHL7v2Validator");
         if (toolVersion != null) {
diff --git a/GazelleHL7v2Validator-ejb/src/main/java/net/ihe/gazelle/hl7/ws/GazelleHL7v3ValidationWS.java b/GazelleHL7v2Validator-ejb/src/main/java/net/ihe/gazelle/hl7/ws/GazelleHL7v3ValidationWS.java
index f7bfa481..bbd466b6 100644
--- a/GazelleHL7v2Validator-ejb/src/main/java/net/ihe/gazelle/hl7/ws/GazelleHL7v3ValidationWS.java
+++ b/GazelleHL7v2Validator-ejb/src/main/java/net/ihe/gazelle/hl7/ws/GazelleHL7v3ValidationWS.java
@@ -13,7 +13,8 @@ import net.ihe.gazelle.validation.model.ValidatorDescription;
 import net.ihe.gazelle.validation.ws.AbstractModelBasedValidation;
 import net.ihe.gazelle.validator.xcpd.plq.GazelleXCPDPLQValidator;
 import net.ihe.gazelle.validator.xcpd.plq.XCPDPLQValidatorType;
-import net.ihe.version.ws.Interface.Preferences;
+import net.ihe.gazelle.version.ws.VersionProviderInterface;
+import org.jboss.seam.annotations.In;
 import org.jboss.seam.annotations.Name;
 import org.jboss.seam.contexts.Lifecycle;
 
@@ -30,6 +31,9 @@ import java.util.List;
         targetNamespace = "http://ws.mb.validator.gazelle.ihe.net")
 public class GazelleHL7v3ValidationWS extends AbstractModelBasedValidation {
 
+    @In(value = "versionProvider")
+    VersionProviderInterface versionProvider;
+
 
     @Override
     protected String buildReportOnParsingFailure(GazelleValidationException e, ValidatorDescription selectedValidator) {
@@ -251,7 +255,7 @@ public class GazelleHL7v3ValidationWS extends AbstractModelBasedValidation {
     @WebMethod
     @WebResult(name = "about")
     public String about() {
-        String toolVersion = Preferences.getProperty("buildVersion");
+        String toolVersion = versionProvider.getVersion();
         StringBuilder about = new StringBuilder();
         about.append("GazelleHL7v3Validator");
         if (toolVersion != null) {
diff --git a/GazelleHL7v2Validator-ejb/src/main/java/net/ihe/gazelle/hl7v3/validator/core/GazelleHL7v3Validator.java b/GazelleHL7v2Validator-ejb/src/main/java/net/ihe/gazelle/hl7v3/validator/core/GazelleHL7v3Validator.java
index e57c3e1a..b1862c6d 100644
--- a/GazelleHL7v2Validator-ejb/src/main/java/net/ihe/gazelle/hl7v3/validator/core/GazelleHL7v3Validator.java
+++ b/GazelleHL7v2Validator-ejb/src/main/java/net/ihe/gazelle/hl7v3/validator/core/GazelleHL7v3Validator.java
@@ -53,7 +53,8 @@ import net.ihe.gazelle.hl7v3transformer.HL7V3Transformer;
 import net.ihe.gazelle.preferences.PreferenceService;
 import net.ihe.gazelle.validation.*;
 import net.ihe.gazelle.validation.Error;
-import net.ihe.version.ws.Interface.Preferences;
+import net.ihe.gazelle.version.ws.VersionProvider;
+import net.ihe.gazelle.version.ws.VersionProviderInterface;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -77,6 +78,7 @@ public class GazelleHL7v3Validator {
 
     private static Logger log = LoggerFactory.getLogger(GazelleHL7v3Validator.class);
 
+    static VersionProviderInterface versionProvider = new VersionProvider();
     public SAXParserFactory saxParserFactory;
     public String xsdLocation;
 
@@ -511,7 +513,7 @@ public class GazelleHL7v3Validator {
                 "Gazelle HL7v3 Validator : " + validator.getLabel());
         String validationEngine = "GazelleHL7v2Validator";
         validationEngine = validationEngine.concat(":");
-        validationEngine = validationEngine.concat(Preferences.getProperty("buildVersion"));
+        validationEngine = validationEngine.concat(versionProvider.getVersion());
         result.getValidationResultsOverview().setValidationEngine(validationEngine);
         result.getValidationResultsOverview().setValidationTestResult("PASSED");
         if ((result.getDocumentValidXSD() != null) && (result.getDocumentValidXSD().getResult() != null)
diff --git a/GazelleHL7v2Validator-ejb/src/main/java/net/ihe/gazelle/security/IpPrincipal.java b/GazelleHL7v2Validator-ejb/src/main/java/net/ihe/gazelle/security/IpPrincipal.java
deleted file mode 100644
index fbff3173..00000000
--- a/GazelleHL7v2Validator-ejb/src/main/java/net/ihe/gazelle/security/IpPrincipal.java
+++ /dev/null
@@ -1,69 +0,0 @@
-package net.ihe.gazelle.security;
-
-import java.security.Principal;
-
-/**
- * <p>IpPrincipal class.</p>
- *
- * @author aberge
- * @version $Id: $Id
- */
-public class IpPrincipal implements Principal {
-
-	private String name;
-
-	/**
-	 * <p>Constructor for IpPrincipal.</p>
-	 *
-	 * @param name a {@link java.lang.String} object.
-	 */
-	public IpPrincipal(String name) {
-		super();
-		this.name = name;
-	}
-
-	/** {@inheritDoc} */
-	@Override
-	public String getName() {
-		return name;
-	}
-
-	/** {@inheritDoc} */
-	@Override
-	public int hashCode() {
-		final int prime = 31;
-		int result = 1;
-		result = (prime * result) + ((name == null) ? 0 : name.hashCode());
-		return result;
-	}
-
-	/** {@inheritDoc} */
-	@Override
-	public boolean equals(Object obj) {
-		if (this == obj) {
-			return true;
-		}
-		if (obj == null) {
-			return false;
-		}
-		if (getClass() != obj.getClass()) {
-			return false;
-		}
-		IpPrincipal other = (IpPrincipal) obj;
-		if (name == null) {
-			if (other.name != null) {
-				return false;
-			}
-		} else if (!name.equals(other.name)) {
-			return false;
-		}
-		return true;
-	}
-
-	/** {@inheritDoc} */
-	@Override
-	public String toString() {
-		return "IpPrincipal [name=" + name + "]";
-	}
-
-}
diff --git a/GazelleHL7v2Validator-ejb/src/main/java/net/ihe/gazelle/security/SSOIdentity.java b/GazelleHL7v2Validator-ejb/src/main/java/net/ihe/gazelle/security/SSOIdentity.java
deleted file mode 100644
index 77b5920e..00000000
--- a/GazelleHL7v2Validator-ejb/src/main/java/net/ihe/gazelle/security/SSOIdentity.java
+++ /dev/null
@@ -1,175 +0,0 @@
-package net.ihe.gazelle.security;
-
-import static org.jboss.seam.annotations.Install.APPLICATION;
-
-import java.security.Principal;
-import java.util.Map;
-import java.util.Set;
-import java.util.StringTokenizer;
-
-import javax.faces.context.FacesContext;
-import javax.servlet.ServletRequest;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpSession;
-
-import net.ihe.gazelle.hl7.admin.ApplicationConfigurationProvider;
-
-import org.apache.commons.lang.StringUtils;
-import org.jasig.cas.client.authentication.AttributePrincipal;
-import org.jasig.cas.client.util.AbstractCasFilter;
-import org.jasig.cas.client.validation.Assertion;
-import org.jboss.seam.ScopeType;
-import org.jboss.seam.annotations.Install;
-import org.jboss.seam.annotations.Name;
-import org.jboss.seam.annotations.Scope;
-import javax.ejb.Startup;
-import org.jboss.seam.annotations.intercept.BypassInterceptors;
-import org.jboss.seam.contexts.Contexts;
-import org.jboss.seam.core.Events;
-import org.jboss.seam.security.Identity;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-@Name("org.jboss.seam.security.identity")
-@Scope(ScopeType.SESSION)
-@Install(precedence = APPLICATION)
-@BypassInterceptors
-@Startup
-public class SSOIdentity extends Identity {
-
-	private static final long serialVersionUID = -631532323964539777L;
-
-	public static final String AUTHENTICATED_USER = "org.jboss.seam.security.management.authenticatedUser";
-	public static final String EVENT_USER_AUTHENTICATED = "org.jboss.seam.security.management.userAuthenticated";
-	private static final String SILENT_LOGIN = "org.jboss.seam.security.silentLogin";
-
-
-	private static Logger log = LoggerFactory.getLogger(SSOIdentity.class);
-	
-	@Override
-	public String login() {
-		log.info("Start login...");
-		try {
-			preAuthenticate();
-			if (ApplicationConfigurationProvider.instance().getApplicationWorksWithoutCas()
-					&& !ApplicationConfigurationProvider.instance().getIpLogin()) {
-				// Any user is granted as admin
-				String username = "admin";
-				acceptExternallyAuthenticatedPrincipal(new IpPrincipal(username));
-				addRole("admin_role");
-				getCredentials().setUsername(username);
-				postAuthenticate();
-				return "loggedIn";
-			} else if (ApplicationConfigurationProvider.instance().getApplicationWorksWithoutCas()
-					&& ApplicationConfigurationProvider.instance().getIpLogin()) {
-				Object request = FacesContext.getCurrentInstance().getExternalContext().getRequest();
-				if (request instanceof ServletRequest) {
-					ServletRequest servletRequest = (ServletRequest) request;
-					String ipRegexp = ApplicationConfigurationProvider.instance().getIpLoginAdmin();
-					if (ipRegexp == null) {
-						ipRegexp = "";
-					}
-					String remoteAddr = servletRequest.getRemoteAddr();
-					if (remoteAddr.matches(ipRegexp)) {
-						String username = "admin";
-						acceptExternallyAuthenticatedPrincipal(new IpPrincipal(username));
-						addRole("admin_role");
-						getCredentials().setUsername(username);
-						postAuthenticate();
-						return "loggedIn";
-					}
-				}
-			} else if (super.isLoggedIn()) {
-				// If authentication has already occurred during this request
-				// via a silent login, and login() is explicitly called then we
-				// still want to raise the LOGIN_SUCCESSFUL event, and then
-				// return.
-				if (Contexts.isEventContextActive() && Contexts.getEventContext().isSet(SILENT_LOGIN)) {
-					if (Events.exists()) {
-						Events.instance().raiseEvent(EVENT_LOGIN_SUCCESSFUL);
-					}
-					return "loggedIn";
-				}
-				if (Events.exists()) {
-					Events.instance().raiseEvent(EVENT_ALREADY_LOGGED_IN);
-				}
-				return "loggedIn";
-			}
-
-			AttributePrincipal attributePrincipal = null;
-			Principal casPrincipal = getCASPrincipal();
-			if (casPrincipal instanceof AttributePrincipal) {
-				attributePrincipal = (AttributePrincipal) casPrincipal;
-			}
-
-			if (casPrincipal.getName() != null) {
-				preAuthenticate();
-
-				String username = casPrincipal.getName();
-
-				log.info("Found CAS principal for " + username + ": authenticated");
-				Map attributes = attributePrincipal.getAttributes();
-
-				acceptExternallyAuthenticatedPrincipal(casPrincipal);
-				if ((attributes != null) && (attributes.get("role_name") != null)) {
-					String roles = (String) attributes.get("role_name");
-					StringTokenizer st = new StringTokenizer(roles, "[,]");
-					String role;
-					while (st.hasMoreElements()) {
-						role = (String) st.nextElement();
-						role = StringUtils.trimToNull(role);
-						if (role != null) {
-							addRole(role);
-						}
-					}
-				}
-				getCredentials().setUsername(username);
-				postAuthenticate();
-				return "loggedIn";
-
-			}
-
-		} catch (RuntimeException e) {
-			unAuthenticate();
-			throw e;
-		}
-
-		return null;
-	}
-
-	private Principal getCASPrincipal() {
-		final HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext()
-				.getRequest();
-		final HttpSession session = request.getSession(false);
-		final Assertion assertion = (Assertion) (session == null ? request
-				.getAttribute(AbstractCasFilter.CONST_CAS_ASSERTION) : session
-				.getAttribute(AbstractCasFilter.CONST_CAS_ASSERTION));
-		return assertion == null ? null : assertion.getPrincipal();
-	}
-
-	@Override
-	public boolean isLoggedIn() {
-		if (!super.isLoggedIn()) {
-			if (getCASPrincipal() != null) {
-				login();
-			}
-		}
-		return super.isLoggedIn();
-	}
-
-	@Override
-	public void logout() {
-		Object request = FacesContext.getCurrentInstance().getExternalContext().getRequest();
-		if (request instanceof ServletRequest) {
-			ServletRequest servletRequest = (ServletRequest) request;
-			servletRequest.setAttribute(AbstractCasFilter.CONST_CAS_ASSERTION, null);
-		}
-		Object session = FacesContext.getCurrentInstance().getExternalContext().getSession(false);
-		if (session instanceof HttpSession) {
-			HttpSession httpSession = (HttpSession) session;
-			httpSession.setAttribute(AbstractCasFilter.CONST_CAS_ASSERTION, null);
-		}
-		super.logout();
-	}
-
-}
diff --git a/GazelleHL7v2Validator-ejb/src/main/resources/gzl.version.properties b/GazelleHL7v2Validator-ejb/src/main/resources/gzl.version.properties
index e34ac4c4..9adc399e 100644
--- a/GazelleHL7v2Validator-ejb/src/main/resources/gzl.version.properties
+++ b/GazelleHL7v2Validator-ejb/src/main/resources/gzl.version.properties
@@ -1 +1,3 @@
-buildVersion=${build.version}
\ No newline at end of file
+gzl.service.name=gazelle-hl7v2-validator
+gzl.service.version=${build.version}
+gzl.service.k8s.id.varname=GZL_HL7V2_VALIDATOR_K8S_ID
\ No newline at end of file
diff --git a/GazelleHL7v2Validator-ui/pom.xml b/GazelleHL7v2Validator-ui/pom.xml
index 52acc8ba..e0657148 100644
--- a/GazelleHL7v2Validator-ui/pom.xml
+++ b/GazelleHL7v2Validator-ui/pom.xml
@@ -3,7 +3,7 @@
   <parent>
     <artifactId>GazelleHL7v2Validator</artifactId>
     <groupId>net.ihe.gazelle</groupId>
-    <version>3.8.6-SNAPSHOT</version>
+    <version>3.8.6-NPD-694-SNAPSHOT</version>
     <relativePath>../pom.xml</relativePath>
   </parent>
   <modelVersion>4.0.0</modelVersion>
@@ -11,7 +11,7 @@
   <artifactId>GazelleHL7v2Validator-ui</artifactId>
   <packaging>war</packaging>
   <name>GazelleHL7v2Validator-ui</name>
-  <version>3.8.6-SNAPSHOT</version>
+  <version>3.8.6-NPD-694-SNAPSHOT</version>
   <description>Archetype for the UI part of our java projects</description>
   <organization>
     <name>INRIA - IHE Development</name>
@@ -39,5 +39,10 @@
       <version>1.5.0</version>
       <type>war</type>
     </dependency>
+    <dependency>
+      <groupId>net.ihe.gazelle</groupId>
+      <artifactId>cas-client-ui-v7</artifactId>
+      <type>war</type>
+    </dependency>
   </dependencies>
 </project>
diff --git a/GazelleHL7v2Validator-ui/src/main/crowdin/de/net.ihe.gazelle.cas-client-ui-v7/messages.properties b/GazelleHL7v2Validator-ui/src/main/crowdin/de/net.ihe.gazelle.cas-client-ui-v7/messages.properties
new file mode 100644
index 00000000..3a2e5041
--- /dev/null
+++ b/GazelleHL7v2Validator-ui/src/main/crowdin/de/net.ihe.gazelle.cas-client-ui-v7/messages.properties
@@ -0,0 +1,4 @@
+#This file is automatically generated. Please do not edit this file. If you'd like to change the content please use crowdin
+
+net.ihe.gazelle.ssoclient.Login=Login
+net.ihe.gazelle.ssoclient.Logout=Logout
diff --git a/GazelleHL7v2Validator-ui/src/main/crowdin/en/net.ihe.gazelle.cas-client-ui-v7/messages.properties b/GazelleHL7v2Validator-ui/src/main/crowdin/en/net.ihe.gazelle.cas-client-ui-v7/messages.properties
new file mode 100644
index 00000000..3a2e5041
--- /dev/null
+++ b/GazelleHL7v2Validator-ui/src/main/crowdin/en/net.ihe.gazelle.cas-client-ui-v7/messages.properties
@@ -0,0 +1,4 @@
+#This file is automatically generated. Please do not edit this file. If you'd like to change the content please use crowdin
+
+net.ihe.gazelle.ssoclient.Login=Login
+net.ihe.gazelle.ssoclient.Logout=Logout
diff --git a/GazelleHL7v2Validator-ui/src/main/crowdin/es-ES/net.ihe.gazelle.cas-client-ui-v7/messages.properties b/GazelleHL7v2Validator-ui/src/main/crowdin/es-ES/net.ihe.gazelle.cas-client-ui-v7/messages.properties
new file mode 100644
index 00000000..3a2e5041
--- /dev/null
+++ b/GazelleHL7v2Validator-ui/src/main/crowdin/es-ES/net.ihe.gazelle.cas-client-ui-v7/messages.properties
@@ -0,0 +1,4 @@
+#This file is automatically generated. Please do not edit this file. If you'd like to change the content please use crowdin
+
+net.ihe.gazelle.ssoclient.Login=Login
+net.ihe.gazelle.ssoclient.Logout=Logout
diff --git a/GazelleHL7v2Validator-ui/src/main/crowdin/fi/net.ihe.gazelle.cas-client-ui-v7/messages.properties b/GazelleHL7v2Validator-ui/src/main/crowdin/fi/net.ihe.gazelle.cas-client-ui-v7/messages.properties
new file mode 100644
index 00000000..3a2e5041
--- /dev/null
+++ b/GazelleHL7v2Validator-ui/src/main/crowdin/fi/net.ihe.gazelle.cas-client-ui-v7/messages.properties
@@ -0,0 +1,4 @@
+#This file is automatically generated. Please do not edit this file. If you'd like to change the content please use crowdin
+
+net.ihe.gazelle.ssoclient.Login=Login
+net.ihe.gazelle.ssoclient.Logout=Logout
diff --git a/GazelleHL7v2Validator-ui/src/main/crowdin/fr/net.ihe.gazelle.cas-client-ui-v7/messages.properties b/GazelleHL7v2Validator-ui/src/main/crowdin/fr/net.ihe.gazelle.cas-client-ui-v7/messages.properties
new file mode 100644
index 00000000..61a0c1cd
--- /dev/null
+++ b/GazelleHL7v2Validator-ui/src/main/crowdin/fr/net.ihe.gazelle.cas-client-ui-v7/messages.properties
@@ -0,0 +1,4 @@
+#This file is automatically generated. Please do not edit this file. If you'd like to change the content please use crowdin
+
+net.ihe.gazelle.ssoclient.Login=Connexion
+net.ihe.gazelle.ssoclient.Logout=D\u00E9connexion
diff --git a/GazelleHL7v2Validator-ui/src/main/crowdin/ja/net.ihe.gazelle.cas-client-ui-v7/messages.properties b/GazelleHL7v2Validator-ui/src/main/crowdin/ja/net.ihe.gazelle.cas-client-ui-v7/messages.properties
new file mode 100644
index 00000000..3a2e5041
--- /dev/null
+++ b/GazelleHL7v2Validator-ui/src/main/crowdin/ja/net.ihe.gazelle.cas-client-ui-v7/messages.properties
@@ -0,0 +1,4 @@
+#This file is automatically generated. Please do not edit this file. If you'd like to change the content please use crowdin
+
+net.ihe.gazelle.ssoclient.Login=Login
+net.ihe.gazelle.ssoclient.Logout=Logout
diff --git a/GazelleHL7v2Validator-ui/src/main/crowdin/pl/net.ihe.gazelle.cas-client-ui-v7/messages.properties b/GazelleHL7v2Validator-ui/src/main/crowdin/pl/net.ihe.gazelle.cas-client-ui-v7/messages.properties
new file mode 100644
index 00000000..3a2e5041
--- /dev/null
+++ b/GazelleHL7v2Validator-ui/src/main/crowdin/pl/net.ihe.gazelle.cas-client-ui-v7/messages.properties
@@ -0,0 +1,4 @@
+#This file is automatically generated. Please do not edit this file. If you'd like to change the content please use crowdin
+
+net.ihe.gazelle.ssoclient.Login=Login
+net.ihe.gazelle.ssoclient.Logout=Logout
diff --git a/GazelleHL7v2Validator-ui/src/main/crowdin/sv-SE/net.ihe.gazelle.cas-client-ui-v7/messages.properties b/GazelleHL7v2Validator-ui/src/main/crowdin/sv-SE/net.ihe.gazelle.cas-client-ui-v7/messages.properties
new file mode 100644
index 00000000..3a2e5041
--- /dev/null
+++ b/GazelleHL7v2Validator-ui/src/main/crowdin/sv-SE/net.ihe.gazelle.cas-client-ui-v7/messages.properties
@@ -0,0 +1,4 @@
+#This file is automatically generated. Please do not edit this file. If you'd like to change the content please use crowdin
+
+net.ihe.gazelle.ssoclient.Login=Login
+net.ihe.gazelle.ssoclient.Logout=Logout
diff --git a/GazelleHL7v2Validator-ui/src/main/crowdin/zh-CN/net.ihe.gazelle.cas-client-ui-v7/messages.properties b/GazelleHL7v2Validator-ui/src/main/crowdin/zh-CN/net.ihe.gazelle.cas-client-ui-v7/messages.properties
new file mode 100644
index 00000000..3a2e5041
--- /dev/null
+++ b/GazelleHL7v2Validator-ui/src/main/crowdin/zh-CN/net.ihe.gazelle.cas-client-ui-v7/messages.properties
@@ -0,0 +1,4 @@
+#This file is automatically generated. Please do not edit this file. If you'd like to change the content please use crowdin
+
+net.ihe.gazelle.ssoclient.Login=Login
+net.ihe.gazelle.ssoclient.Logout=Logout
diff --git a/GazelleHL7v2Validator-ui/src/main/crowdin/zh-TW/net.ihe.gazelle.cas-client-ui-v7/messages.properties b/GazelleHL7v2Validator-ui/src/main/crowdin/zh-TW/net.ihe.gazelle.cas-client-ui-v7/messages.properties
new file mode 100644
index 00000000..3a2e5041
--- /dev/null
+++ b/GazelleHL7v2Validator-ui/src/main/crowdin/zh-TW/net.ihe.gazelle.cas-client-ui-v7/messages.properties
@@ -0,0 +1,4 @@
+#This file is automatically generated. Please do not edit this file. If you'd like to change the content please use crowdin
+
+net.ihe.gazelle.ssoclient.Login=Login
+net.ihe.gazelle.ssoclient.Logout=Logout
diff --git a/GazelleHL7v2Validator-ui/src/main/webapp/WEB-INF/components.xml b/GazelleHL7v2Validator-ui/src/main/webapp/WEB-INF/components.xml
index ad8e0a5d..8cb5bdfc 100644
--- a/GazelleHL7v2Validator-ui/src/main/webapp/WEB-INF/components.xml
+++ b/GazelleHL7v2Validator-ui/src/main/webapp/WEB-INF/components.xml
@@ -10,7 +10,8 @@
 
     <component class="net.ihe.gazelle.common.action.PUProvider" jndi-name="java:global/GazelleHL7v2Validator/gazelle-seam-tools-jar/PUProvider"/>
     <!--<component class="net.ihe.gazelle.hl7.ws.ProfileInformation" jndi-name="java:app/GazelleHL7v2Validator-ejb/ProfileInformation"/>-->
-    <component class="net.ihe.version.ws.Interface.VersionProvider" jndi-name="java:app/version-1.0.3/VersionProvider"/>
+    <component class="net.ihe.gazelle.version.ws.VersionProvider"
+               jndi-name="java:module/version/VersionProvider"/>
     <!--<component class="org.jboss.seam.transaction.EjbSynchronizations" jndi-name="java:app/jboss-seam/EjbSynchronizations"/>-->
     <component class="net.ihe.gazelle.assertions.ws.AssertionWSProvider" jndi-name="java:global/GazelleHL7v2Validator/mbval-documentation-ejb/AssertionWSProvider"/>
 
diff --git a/GazelleHL7v2Validator-ui/src/main/webapp/WEB-INF/pages.xml b/GazelleHL7v2Validator-ui/src/main/webapp/WEB-INF/pages.xml
index 9a4e0edb..ea488634 100644
--- a/GazelleHL7v2Validator-ui/src/main/webapp/WEB-INF/pages.xml
+++ b/GazelleHL7v2Validator-ui/src/main/webapp/WEB-INF/pages.xml
@@ -1,20 +1,26 @@
 <pages xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://jboss.org/schema/seam/pages"
        xsi:schemaLocation="http://jboss.org/schema/seam/pages http://jboss.org/schema/seam/pages-2.3.xsd">
-    <page view-id="*">
-        <navigation from-action="#{identity.logout}">
-            <rule if="#{not applicationConfigurationProvider.getApplicationWorksWithoutCas()}">
+    <page view-id="/login/logout.xhtml" action="#{identity.ssoLogout}">
+        <navigation>
+            <rule if-outcome="casLogout">
                 <redirect view-id="/cas/logout.xhtml"/>
             </rule>
-            <rule if="#{applicationConfigurationProvider.getApplicationWorksWithoutCas()}">
+            <rule if-outcome="basicLogout">
+                <redirect view-id="/home.xhtml"/>
+            </rule>
+            <rule if-outcome="noLogout">
                 <redirect view-id="/home.xhtml"/>
             </rule>
         </navigation>
     </page>
-    <page view-id="/cas/login">
+    <page view-id="/login/ipLogin.xhtml" action="#{identity.login()}">
         <navigation>
-            <redirect view-id="/home.xhtml"/>
+            <rule>
+                <redirect view-id="/home.xhtml"/>
+            </rule>
         </navigation>
     </page>
+
     <exception class="org.jboss.seam.framework.EntityNotFoundException">
         <redirect view-id="/error.xhtml">
             <message severity="warn">Record not found</message>
diff --git a/GazelleHL7v2Validator-ui/src/main/webapp/WEB-INF/web.xml b/GazelleHL7v2Validator-ui/src/main/webapp/WEB-INF/web.xml
index 06fcf09e..27e92f0c 100644
--- a/GazelleHL7v2Validator-ui/src/main/webapp/WEB-INF/web.xml
+++ b/GazelleHL7v2Validator-ui/src/main/webapp/WEB-INF/web.xml
@@ -119,9 +119,18 @@
 
     <context-param>
         <param-name>configFileLocation</param-name>
-        <param-value>/opt/gazelle/cas/file.properties</param-value>
+        <param-value>/opt/gazelle/cas/GazelleHL7v2Validator.properties</param-value>
     </context-param>
 
+    <filter>
+        <filter-name>CookieBrowserFilter</filter-name>
+        <filter-class>net.ihe.gazelle.common.servletfilter.CookieBrowserFilter</filter-class>
+    </filter>
+    <filter-mapping>
+        <filter-name>CookieBrowserFilter</filter-name>
+        <url-pattern>*.seam</url-pattern>
+    </filter-mapping>
+
     <filter>
         <filter-name>CAS Single Sign Out Filter</filter-name>
         <filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class>
@@ -130,6 +139,7 @@
         <filter-name>CAS Single Sign Out Filter</filter-name>
         <url-pattern>/*</url-pattern>
     </filter-mapping>
+
     <listener>
         <listener-class>org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-class>
     </listener>
@@ -140,7 +150,7 @@
     </filter>
     <filter-mapping>
         <filter-name>Gazelle CAS Authentication Filter</filter-name>
-        <url-pattern>/cas/login</url-pattern>
+        <url-pattern>/login/login.seam</url-pattern>
     </filter-mapping>
 
     <filter>
@@ -170,10 +180,20 @@
         <filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>
         <url-pattern>/*</url-pattern>
     </filter-mapping>
+
+    <filter>
+        <filter-name>ExpirationFilter</filter-name>
+        <filter-class>net.ihe.gazelle.cas.client.authentication.SessionExpirationFilter</filter-class>
+    </filter>
+    <filter-mapping>
+        <filter-name>ExpirationFilter</filter-name>
+        <url-pattern>/*</url-pattern>
+    </filter-mapping>
+
     <!-- REST webservice -->
     <context-param>
         <param-name>resteasy.jndi.resources</param-name>
-        <param-value>java:app/GazelleHL7v2Validator-ejb/ProfileInformation,java:global/GazelleHL7v2Validator/mbval-documentation-ejb/AssertionWSProvider,java:app/version-1.0.3/VersionProvider</param-value>
+        <param-value>java:app/GazelleHL7v2Validator-ejb/ProfileInformation,java:global/GazelleHL7v2Validator/mbval-documentation-ejb/AssertionWSProvider,java:app/version/VersionProvider</param-value>
         <!-- If you need to declare more than one resource, separate them by comas -->
     </context-param>
     <!-- The following lines are required only if you decide not to use the
diff --git a/GazelleHL7v2Validator-ui/src/main/webapp/layout/login.xhtml b/GazelleHL7v2Validator-ui/src/main/webapp/layout/login.xhtml
deleted file mode 100644
index 56e8c3e1..00000000
--- a/GazelleHL7v2Validator-ui/src/main/webapp/layout/login.xhtml
+++ /dev/null
@@ -1,35 +0,0 @@
-<ui:composition xmlns:a4j="http://richfaces.org/a4j" xmlns:f="http://java.sun.com/jsf/core"  xmlns:ui="http://java.sun.com/jsf/facelets"
-                xmlns:h="http://java.sun.com/jsf/html">
-    <h:panelGroup rendered="#{identity.loggedIn}">
-        <li class="dropdown"><a href="#" class="dropdown-toggle"
-                                data-toggle="dropdown" role="button" aria-expanded="false">
-            <h:outputText
-                    id="menuWelcomeId" value="#{credentials.username}"/>
-            <span
-                    class="caret"/> </a>
-            <ul class="dropdown-menu" role="menu">
-                <li>
-                    <h:commandLink immediate="true"
-                                   action="#{identity.logout}"
-                                   value="#{messages['gazelle.users.registration.Logout']}"/>
-                </li>
-            </ul>
-        </li>
-    </h:panelGroup>
-    <h:panelGroup>
-        <li>
-            <a4j:commandLink
-                    value="Login"
-                    styleClass="ipLogin"
-                    action="#{applicationConfigurationProvider.loginByIP()}"
-                    rendered="#{not identity.loggedIn and applicationConfigurationProvider.getApplicationWorksWithoutCas()}"/>
-        </li>
-        <li>
-            <h:outputLink id="loginLink" value="#{applicationConfigurationProvider.getApplicationUrl()}/cas/login"
-                          rendered="#{not identity.loggedIn and not applicationConfigurationProvider.getApplicationWorksWithoutCas()}">
-                <h:outputText value="CAS Login"/>
-                <f:param name="request" value="#{request.requestURL}"/>
-            </h:outputLink>
-        </li>
-    </h:panelGroup>
-</ui:composition>
diff --git a/GazelleHL7v2Validator-ui/src/main/webapp/layout/menu.xhtml b/GazelleHL7v2Validator-ui/src/main/webapp/layout/menu.xhtml
index 8dbe4378..f8e27e65 100644
--- a/GazelleHL7v2Validator-ui/src/main/webapp/layout/menu.xhtml
+++ b/GazelleHL7v2Validator-ui/src/main/webapp/layout/menu.xhtml
@@ -57,6 +57,6 @@
                 </ul>
             </li>
         </h:panelGroup>
-        <ui:include src="login.xhtml"/>
+        <ui:include src="/layout/_login_menu.xhtml"/>
     </ui:define>
 </ui:decorate>
diff --git a/gazelle-hl7-validator-report-jar/pom.xml b/gazelle-hl7-validator-report-jar/pom.xml
index 09dc208c..fcb9ade1 100644
--- a/gazelle-hl7-validator-report-jar/pom.xml
+++ b/gazelle-hl7-validator-report-jar/pom.xml
@@ -3,7 +3,7 @@
     <parent>
         <artifactId>GazelleHL7v2Validator</artifactId>
         <groupId>net.ihe.gazelle</groupId>
-        <version>3.8.6-SNAPSHOT</version>
+        <version>3.8.6-NPD-694-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
     <packaging>jar</packaging>
diff --git a/gazelle-hl7v2-validator-api-jar/pom.xml b/gazelle-hl7v2-validator-api-jar/pom.xml
index 1cef8075..911f89bf 100644
--- a/gazelle-hl7v2-validator-api-jar/pom.xml
+++ b/gazelle-hl7v2-validator-api-jar/pom.xml
@@ -3,7 +3,7 @@
     <parent>
         <artifactId>GazelleHL7v2Validator</artifactId>
         <groupId>net.ihe.gazelle</groupId>
-        <version>3.8.6-SNAPSHOT</version>
+        <version>3.8.6-NPD-694-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
diff --git a/gvt-validation-jar/pom.xml b/gvt-validation-jar/pom.xml
index 8b1cb3db..7f6b0ba8 100644
--- a/gvt-validation-jar/pom.xml
+++ b/gvt-validation-jar/pom.xml
@@ -3,7 +3,7 @@
     <parent>
         <artifactId>GazelleHL7v2Validator</artifactId>
         <groupId>net.ihe.gazelle</groupId>
-        <version>3.8.6-SNAPSHOT</version>
+        <version>3.8.6-NPD-694-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
diff --git a/pom.xml b/pom.xml
index 205e11c7..52d8daa8 100644
--- a/pom.xml
+++ b/pom.xml
@@ -3,12 +3,12 @@
     <parent>
         <artifactId>gazelle-tools</artifactId>
         <groupId>net.ihe.gazelle.maven</groupId>
-        <version>3.1.1</version>
+        <version>3.3.0</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
     <groupId>net.ihe.gazelle</groupId>
     <artifactId>GazelleHL7v2Validator</artifactId>
-    <version>3.8.6-SNAPSHOT</version>
+    <version>3.8.6-NPD-694-SNAPSHOT</version>
     <packaging>pom</packaging>
     <name>GazelleHL7v2Validator</name>
     <description>parent for project GazelleHL7v2Validator</description>
@@ -45,6 +45,8 @@
         <version.resteasy>2.0-beta-2</version.resteasy>
         <messages.mode>crowdin</messages.mode>
         <hapi.version>2.2</hapi.version>
+        <version.version>1.1.0</version.version>
+        <sso.client.v7.version>2.0.1-NPD-694-SNAPSHOT</sso.client.v7.version>
         <mbval.documentation.version>1.1.10</mbval.documentation.version>
         <ksahl7v3.validation.version>1.0.1</ksahl7v3.validation.version>
         <ihehl7v3.validation.version>1.5.5</ihehl7v3.validation.version>
@@ -85,27 +87,27 @@
             <dependency>
                 <groupId>net.ihe.gazelle</groupId>
                 <artifactId>gazelle-hl7-validator-report-jar</artifactId>
-                <version>3.8.6-SNAPSHOT</version>
+                <version>3.8.6-NPD-694-SNAPSHOT</version>
             </dependency>
             <dependency>
                 <groupId>net.ihe.gazelle</groupId>
                 <artifactId>gazelle-hl7v2-validator-api-jar</artifactId>
-                <version>3.8.6-SNAPSHOT</version>
+                <version>3.8.6-NPD-694-SNAPSHOT</version>
             </dependency>
             <dependency>
                 <groupId>net.ihe.gazelle</groupId>
                 <artifactId>GazelleHL7v2Validator-ejb</artifactId>
-                <version>3.8.6-SNAPSHOT</version>
+                <version>3.8.6-NPD-694-SNAPSHOT</version>
             </dependency>
             <dependency>
                 <groupId>net.ihe.gazelle</groupId>
                 <artifactId>GazelleHL7v2Validator-ear</artifactId>
-                <version>3.8.6-SNAPSHOT</version>
+                <version>3.8.6-NPD-694-SNAPSHOT</version>
             </dependency>
             <dependency>
                 <groupId>net.ihe.gazelle</groupId>
                 <artifactId>GazelleHL7v2Validator-ui</artifactId>
-                <version>3.8.6-SNAPSHOT</version>
+                <version>3.8.6-NPD-694-SNAPSHOT</version>
             </dependency>
             <dependency>
                 <groupId>net.ihe.gazelle</groupId>
@@ -125,6 +127,19 @@
                 <version>3.3.1</version>
                 <scope>provided</scope>
             </dependency>
+            <dependency>
+                <groupId>net.ihe.gazelle</groupId>
+                <artifactId>sso-client-v7</artifactId>
+                <version>${sso.client.v7.version}</version>
+                <type>pom</type>
+                <scope>import</scope>
+            </dependency>
+            <dependency>
+                <groupId>net.ihe.gazelle.maven</groupId>
+                <artifactId>version</artifactId>
+                <version>${version.version}</version>
+                <type>ejb</type>
+            </dependency>
         </dependencies>
     </dependencyManagement>
     <profiles>
-- 
GitLab