diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/instances/QMetaDataVariableInterpreter.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/instances/QMetaDataVariableInterpreter.java index d3ae8884..7549d047 100644 --- a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/instances/QMetaDataVariableInterpreter.java +++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/instances/QMetaDataVariableInterpreter.java @@ -23,9 +23,12 @@ package com.kingsrook.qqq.backend.core.instances; import java.lang.reflect.Method; +import java.util.HashMap; import java.util.Locale; import java.util.Map; import com.kingsrook.qqq.backend.core.exceptions.QException; +import io.github.cdimascio.dotenv.Dotenv; +import io.github.cdimascio.dotenv.DotenvEntry; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -45,7 +48,22 @@ public class QMetaDataVariableInterpreter { private static final Logger LOG = LogManager.getLogger(QMetaDataVariableInterpreter.class); - private Map customEnvironment; + private Map environmentOverrides; + + + + /******************************************************************************* + ** + *******************************************************************************/ + public QMetaDataVariableInterpreter() + { + environmentOverrides = new HashMap<>(); + Dotenv dotenv = Dotenv.configure().ignoreIfMissing().load(); + for(DotenvEntry e : dotenv.entries()) + { + environmentOverrides.put(e.getKey(), e.getValue()); + } + } @@ -86,7 +104,7 @@ public class QMetaDataVariableInterpreter ////////////////////////////////////////////////////////////////////////////////////////////// // get the value - if it's null, move on, else, interpret it, and put it back in the object // ////////////////////////////////////////////////////////////////////////////////////////////// - Object value = getter.invoke(o); + Object value = getter.invoke(o); if(value == null) { continue; @@ -124,7 +142,7 @@ public class QMetaDataVariableInterpreter if(value.startsWith(envPrefix) && value.endsWith("}")) { String envVarName = value.substring(envPrefix.length()).replaceFirst("}$", ""); - String envValue = getEnvironment().get(envVarName); + String envValue = getEnvironmentVariable(envVarName); return (envValue); } @@ -149,13 +167,13 @@ public class QMetaDataVariableInterpreter /******************************************************************************* - ** Setter for customEnvironment - protected - meant to be called (at least at this + ** Setter for environmentOverrides - protected - meant to be called (at least at this ** time), only in unit test ** *******************************************************************************/ - protected void setCustomEnvironment(Map customEnvironment) + protected void setEnvironmentOverrides(Map environmentOverrides) { - this.customEnvironment = customEnvironment; + this.environmentOverrides = environmentOverrides; } @@ -163,13 +181,13 @@ public class QMetaDataVariableInterpreter /******************************************************************************* ** *******************************************************************************/ - private Map getEnvironment() + private String getEnvironmentVariable(String key) { - if(this.customEnvironment != null) + if(this.environmentOverrides.containsKey(key)) { - return (this.customEnvironment); + return (this.environmentOverrides.get(key)); } - return System.getenv(); + return System.getenv(key); } } diff --git a/qqq-backend-core/src/test/java/com/kingsrook/qqq/backend/core/instances/QMetaDataVariableInterpreterTest.java b/qqq-backend-core/src/test/java/com/kingsrook/qqq/backend/core/instances/QMetaDataVariableInterpreterTest.java index e3881b00..d40a82d9 100644 --- a/qqq-backend-core/src/test/java/com/kingsrook/qqq/backend/core/instances/QMetaDataVariableInterpreterTest.java +++ b/qqq-backend-core/src/test/java/com/kingsrook/qqq/backend/core/instances/QMetaDataVariableInterpreterTest.java @@ -102,7 +102,7 @@ class QMetaDataVariableInterpreterTest QMetaDataVariableInterpreter secretReader = new QMetaDataVariableInterpreter(); String key = "CUSTOM_PROPERTY"; String value = "ABCD-9876"; - secretReader.setCustomEnvironment(Map.of(key, value)); + secretReader.setEnvironmentOverrides(Map.of(key, value)); assertNull(secretReader.interpret(null)); assertEquals("foo", secretReader.interpret("foo")); @@ -278,4 +278,4 @@ class QMetaDataVariableInterpreterTest } } -} \ No newline at end of file +} diff --git a/qqq-backend-module-filesystem/src/main/java/com/kingsrook/qqq/backend/module/filesystem/s3/model/metadata/S3BackendMetaData.java b/qqq-backend-module-filesystem/src/main/java/com/kingsrook/qqq/backend/module/filesystem/s3/model/metadata/S3BackendMetaData.java index 92dfccc1..037c9550 100644 --- a/qqq-backend-module-filesystem/src/main/java/com/kingsrook/qqq/backend/module/filesystem/s3/model/metadata/S3BackendMetaData.java +++ b/qqq-backend-module-filesystem/src/main/java/com/kingsrook/qqq/backend/module/filesystem/s3/model/metadata/S3BackendMetaData.java @@ -50,6 +50,48 @@ public class S3BackendMetaData extends AbstractFilesystemBackendMetaData + /******************************************************************************* + ** Fluent setter for basePath + ** + *******************************************************************************/ + @SuppressWarnings("unchecked") + @Override + public S3BackendMetaData withBasePath(String basePath) + { + setBasePath(basePath); + return this; + } + + + + /******************************************************************************* + ** Fluent setter for name + ** + *******************************************************************************/ + @SuppressWarnings("unchecked") + @Override + public S3BackendMetaData withName(String name) + { + setName(name); + return this; + } + + + + /******************************************************************************* + ** Fluent setter for backendType + ** + *******************************************************************************/ + @SuppressWarnings("unchecked") + @Override + public S3BackendMetaData withBackendType(String backendType) + { + setBackendType(backendType); + return this; + } + + + /******************************************************************************* ** Getter for bucketName ** diff --git a/qqq-backend-module-rdbms/src/test/java/com/kingsrook/qqq/backend/module/rdbms/jdbc/ConnectionManagerTest.java b/qqq-backend-module-rdbms/src/test/java/com/kingsrook/qqq/backend/module/rdbms/jdbc/ConnectionManagerTest.java index 0c063dd1..64aa4da9 100644 --- a/qqq-backend-module-rdbms/src/test/java/com/kingsrook/qqq/backend/module/rdbms/jdbc/ConnectionManagerTest.java +++ b/qqq-backend-module-rdbms/src/test/java/com/kingsrook/qqq/backend/module/rdbms/jdbc/ConnectionManagerTest.java @@ -25,9 +25,8 @@ package com.kingsrook.qqq.backend.module.rdbms.jdbc; import java.sql.Connection; import java.sql.SQLException; import java.util.Collections; -import java.util.Objects; +import com.kingsrook.qqq.backend.core.instances.QMetaDataVariableInterpreter; import com.kingsrook.qqq.backend.module.rdbms.model.metadata.RDBMSBackendMetaData; -import io.github.cdimascio.dotenv.Dotenv; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertNotNull; @@ -103,13 +102,13 @@ class ConnectionManagerTest private RDBMSBackendMetaData getAuroraBacked() { - Dotenv dotenv = Dotenv.configure().ignoreIfMissing().load(); - String vendor = (dotenv.get("RDBMS_VENDOR") != null) ? dotenv.get("RDBMS_VENDOR") : System.getenv("RDBMS_VENDOR"); - String hostname = (dotenv.get("RDBMS_HOSTNAME") != null) ? dotenv.get("RDBMS_HOSTNAME") : System.getenv("RDBMS_HOSTNAME"); - Integer port = (dotenv.get("RDBMS_PORT") != null) ? Integer.valueOf(Objects.requireNonNull(dotenv.get("RDBMS_PORT"))) : Integer.valueOf(System.getenv("RDBMS_PORT")); - String databaseName = (dotenv.get("RDBMS_DATABASE_NAME") != null) ? dotenv.get("RDBMS_DATABASE_NAME") : System.getenv("RDBMS_DATABASE_NAME"); - String userName = (dotenv.get("RDBMS_USERNAME") != null) ? dotenv.get("RDBMS_USERNAME") : System.getenv("RDBMS_USERNAME"); - String password = (dotenv.get("RDBMS_PASSWORD") != null) ? dotenv.get("RDBMS_PASSWORD") : System.getenv("RDBMS_PASSWORD"); + QMetaDataVariableInterpreter interpreter = new QMetaDataVariableInterpreter(); + String vendor = interpreter.interpret("${env.RDBMS_VENDOR}"); + String hostname = interpreter.interpret("${env.RDBMS_HOSTNAME}"); + Integer port = Integer.valueOf(interpreter.interpret("${env.RDBMS_PORT}")); + String databaseName = interpreter.interpret("${env.RDBMS_DATABASE_NAME}"); + String username = interpreter.interpret("${env.RDBMS_USERNAME}"); + String password= interpreter.interpret("${env.RDBMS_PASSWORD}"); return new RDBMSBackendMetaData() .withName("aurora-test") @@ -117,7 +116,7 @@ class ConnectionManagerTest .withHostName(hostname) .withPort(port) .withDatabaseName(databaseName) - .withUsername(userName) + .withUsername(username) .withPassword(password); } } diff --git a/qqq-sample-project/src/main/java/com/kingsrook/sampleapp/SampleMetaDataProvider.java b/qqq-sample-project/src/main/java/com/kingsrook/sampleapp/SampleMetaDataProvider.java index db74876f..1d67b933 100644 --- a/qqq-sample-project/src/main/java/com/kingsrook/sampleapp/SampleMetaDataProvider.java +++ b/qqq-sample-project/src/main/java/com/kingsrook/sampleapp/SampleMetaDataProvider.java @@ -23,13 +23,13 @@ package com.kingsrook.sampleapp; import java.util.List; -import java.util.Objects; import com.amazonaws.regions.Regions; import com.kingsrook.qqq.backend.core.actions.dashboard.QuickSightChartRenderer; import com.kingsrook.qqq.backend.core.actions.processes.BackendStep; import com.kingsrook.qqq.backend.core.exceptions.QException; import com.kingsrook.qqq.backend.core.exceptions.QValueException; import com.kingsrook.qqq.backend.core.instances.QInstanceEnricher; +import com.kingsrook.qqq.backend.core.instances.QMetaDataVariableInterpreter; import com.kingsrook.qqq.backend.core.model.actions.processes.RunBackendStepInput; import com.kingsrook.qqq.backend.core.model.actions.processes.RunBackendStepOutput; import com.kingsrook.qqq.backend.core.model.metadata.QAuthenticationType; @@ -63,7 +63,6 @@ import com.kingsrook.qqq.backend.module.filesystem.local.model.metadata.Filesyst import com.kingsrook.qqq.backend.module.filesystem.local.model.metadata.FilesystemTableBackendDetails; import com.kingsrook.qqq.backend.module.rdbms.model.metadata.RDBMSBackendMetaData; import com.kingsrook.sampleapp.dashboard.widgets.PersonsByCreateDateBarChart; -import io.github.cdimascio.dotenv.Dotenv; /******************************************************************************* @@ -135,11 +134,11 @@ public class SampleMetaDataProvider .withName(PersonsByCreateDateBarChart.class.getSimpleName()) .withCodeReference(new QCodeReference(PersonsByCreateDateBarChart.class, null))); - Dotenv dotenv = Dotenv.configure().ignoreIfMissing().load(); - String accountId = (dotenv.get("QUICKSIGHT_ACCOUNT_ID") != null) ? dotenv.get("QUICKSIGHT_ACCOUNT_ID") : System.getenv("QUICKSIGHT_ACCOUNT_ID"); - String accessKey = (dotenv.get("QUICKSIGHT_ACCESS_KEY") != null) ? dotenv.get("QUICKSIGHT_ACCESS_KEY") : System.getenv("QUICKSIGHT_ACCESS_KEY"); - String secretKey = (dotenv.get("QUICKSIGHT_SECRET_KEY") != null) ? dotenv.get("QUICKSIGHT_SECRET_KEY") : System.getenv("QUICKSIGHT_SECRET_KEY"); - String userArn = (dotenv.get("QUICKSIGHT_USER_ARN") != null) ? dotenv.get("QUICKSIGHT_USER_ARN") : System.getenv("QUICKSIGHT_USER_ARN"); + QMetaDataVariableInterpreter interpreter = new QMetaDataVariableInterpreter(); + String accountId = interpreter.interpret("${env.QUICKSIGHT_ACCOUNT_ID}"); + String accessKey = interpreter.interpret("${env.QUICKSIGHT_ACCESS_KEY}"); + String secretKey = interpreter.interpret("${env.QUICKSIGHT_SECRET_KEY}"); + String userArn = interpreter.interpret("${env.QUICKSIGHT_USER_ARN}"); QWidgetMetaDataInterface quickSightChartMetaData = new QuickSightChartMetaData() .withAccountId(accountId) @@ -211,13 +210,13 @@ public class SampleMetaDataProvider { if(USE_MYSQL) { - Dotenv dotenv = Dotenv.configure().ignoreIfMissing().load(); - String vendor = (dotenv.get("RDBMS_VENDOR") != null) ? dotenv.get("RDBMS_VENDOR") : System.getenv("RDBMS_VENDOR"); - String hostname = (dotenv.get("RDBMS_HOSTNAME") != null) ? dotenv.get("RDBMS_HOSTNAME") : System.getenv("RDBMS_HOSTNAME"); - Integer port = (dotenv.get("RDBMS_PORT") != null) ? Integer.valueOf(Objects.requireNonNull(dotenv.get("RDBMS_PORT"))) : Integer.valueOf(System.getenv("RDBMS_PORT")); - String databaseName = (dotenv.get("RDBMS_DATABASE_NAME") != null) ? dotenv.get("RDBMS_DATABASE_NAME") : System.getenv("RDBMS_DATABASE_NAME"); - String userName = (dotenv.get("RDBMS_USERNAME") != null) ? dotenv.get("RDBMS_USERNAME") : System.getenv("RDBMS_USERNAME"); - String password = (dotenv.get("RDBMS_PASSWORD") != null) ? dotenv.get("RDBMS_PASSWORD") : System.getenv("RDBMS_PASSWORD"); + QMetaDataVariableInterpreter interpreter = new QMetaDataVariableInterpreter(); + String vendor = interpreter.interpret("${env.RDBMS_VENDOR}"); + String hostname = interpreter.interpret("${env.RDBMS_HOSTNAME}"); + Integer port = Integer.valueOf(interpreter.interpret("${env.RDBMS_PORT}")); + String databaseName = interpreter.interpret("${env.RDBMS_DATABASE_NAME}"); + String username = interpreter.interpret("${env.RDBMS_USERNAME}"); + String password= interpreter.interpret("${env.RDBMS_PASSWORD}"); return new RDBMSBackendMetaData() .withName(RDBMS_BACKEND_NAME) @@ -225,7 +224,7 @@ public class SampleMetaDataProvider .withHostName(hostname) .withPort(port) .withDatabaseName(databaseName) - .withUsername(userName) + .withUsername(username) .withPassword(password); } else