[NO ISSUE][JDBC] Allow overriding driver version

- user model changes: no
- storage format changes: no
- interface changes: no

Details:
- Allow extensions to override driver version

Change-Id: Icdd5ff036e27c551defe84ad5caf7fe13f0380ac
Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb-clients/+/13684
Reviewed-by: Dmitry Lychagin <dmitry.lychagin@couchbase.com>
Reviewed-by: Ian Maxon <imaxon@uci.edu>
Tested-by: Ian Maxon <imaxon@uci.edu>
diff --git a/asterixdb-jdbc/asterix-jdbc-core/src/main/java/org/apache/asterix/jdbc/core/ADBDriverBase.java b/asterixdb-jdbc/asterix-jdbc-core/src/main/java/org/apache/asterix/jdbc/core/ADBDriverBase.java
index 9bd8641..9524b1c 100644
--- a/asterixdb-jdbc/asterix-jdbc-core/src/main/java/org/apache/asterix/jdbc/core/ADBDriverBase.java
+++ b/asterixdb-jdbc/asterix-jdbc-core/src/main/java/org/apache/asterix/jdbc/core/ADBDriverBase.java
@@ -206,6 +206,10 @@
         return getParentLogger(getClass());
     }
 
+    protected Logger getLogger() {
+        return Logger.getLogger(getClass().getName());
+    }
+
     private ADBDriverContext getOrCreateDriverContext() {
         ADBDriverContext ctx = context;
         if (ctx == null) {
@@ -220,7 +224,12 @@
     }
 
     protected ADBDriverContext createDriverContext() {
-        return new ADBDriverContext(getClass(), getDriverSupportedProperties(), createErrorReporter());
+        return new ADBDriverContext(getDriverVersion(), getDriverSupportedProperties(), createErrorReporter(),
+                getLogger());
+    }
+
+    protected ADBProductVersion getDriverVersion() {
+        return ADBProductVersion.parseDriverVersion(getClass().getPackage());
     }
 
     protected Collection<ADBDriverProperty> getDriverSupportedProperties() {
diff --git a/asterixdb-jdbc/asterix-jdbc-core/src/main/java/org/apache/asterix/jdbc/core/ADBDriverContext.java b/asterixdb-jdbc/asterix-jdbc-core/src/main/java/org/apache/asterix/jdbc/core/ADBDriverContext.java
index 3a7401f..f81bb9f 100644
--- a/asterixdb-jdbc/asterix-jdbc-core/src/main/java/org/apache/asterix/jdbc/core/ADBDriverContext.java
+++ b/asterixdb-jdbc/asterix-jdbc-core/src/main/java/org/apache/asterix/jdbc/core/ADBDriverContext.java
@@ -38,14 +38,12 @@
 
 public class ADBDriverContext {
 
-    private final Class<? extends ADBDriverBase> driverClass;
-
-    private final ADBErrorReporter errorReporter;
-
     private final ADBProductVersion driverVersion;
 
     private final Map<String, ADBDriverProperty> supportedProperties;
 
+    private final ADBErrorReporter errorReporter;
+
     private final Logger logger;
 
     private final ObjectReader genericObjectReader;
@@ -56,12 +54,11 @@
 
     private final ObjectWriter admFormatObjectWriter;
 
-    ADBDriverContext(Class<? extends ADBDriverBase> driverClass,
-            Collection<ADBDriverProperty> driverSupportedProperties, ADBErrorReporter errorReporter) {
-        this.driverClass = Objects.requireNonNull(driverClass);
+    public ADBDriverContext(ADBProductVersion driverVersion, Collection<ADBDriverProperty> driverSupportedProperties,
+            ADBErrorReporter errorReporter, Logger logger) {
+        this.driverVersion = Objects.requireNonNull(driverVersion);
         this.errorReporter = Objects.requireNonNull(errorReporter);
-        this.logger = Logger.getLogger(driverClass.getName());
-        this.driverVersion = ADBProductVersion.parseDriverVersion(driverClass.getPackage());
+        this.logger = Objects.requireNonNull(logger);
         this.supportedProperties = createPropertyIndexByName(driverSupportedProperties);
 
         ObjectMapper genericObjectMapper = createGenericObjectMapper();
@@ -86,7 +83,7 @@
 
     protected ObjectMapper createADMFormatObjectMapper() {
         ObjectMapper mapper = new ObjectMapper();
-        SimpleModule serdeModule = new SimpleModule(driverClass.getName());
+        SimpleModule serdeModule = new SimpleModule(getClass().getName());
         ADBStatement.configureADMFormatSerialization(serdeModule);
         ADBRowStore.configureADMFormatDeserialization(mapper, serdeModule);
         mapper.registerModule(serdeModule);