diff --git a/afs/aws/aws/src/main/java/org/eclipse/store/afs/aws/types/AwsFileSystemCreator.java b/afs/aws/aws/src/main/java/org/eclipse/store/afs/aws/types/AwsFileSystemCreator.java index 0e8f3856..3165eb65 100644 --- a/afs/aws/aws/src/main/java/org/eclipse/store/afs/aws/types/AwsFileSystemCreator.java +++ b/afs/aws/aws/src/main/java/org/eclipse/store/afs/aws/types/AwsFileSystemCreator.java @@ -32,9 +32,9 @@ public abstract class AwsFileSystemCreator extends ConfigurationBasedCreator.Abstract { - protected AwsFileSystemCreator() + protected AwsFileSystemCreator(final String key) { - super(AFileSystem.class); + super(AFileSystem.class, key); } protected void populateBuilder( diff --git a/afs/aws/dynamodb/src/main/java/org/eclipse/store/afs/aws/dynamodb/types/DynamoDbFileSystemCreator.java b/afs/aws/dynamodb/src/main/java/org/eclipse/store/afs/aws/dynamodb/types/DynamoDbFileSystemCreator.java index 607bf2b3..f45ced83 100644 --- a/afs/aws/dynamodb/src/main/java/org/eclipse/store/afs/aws/dynamodb/types/DynamoDbFileSystemCreator.java +++ b/afs/aws/dynamodb/src/main/java/org/eclipse/store/afs/aws/dynamodb/types/DynamoDbFileSystemCreator.java @@ -26,25 +26,17 @@ public class DynamoDbFileSystemCreator extends AwsFileSystemCreator { public DynamoDbFileSystemCreator() { - super(); + super("aws.dynamodb"); } @Override - public AFileSystem create( - final Configuration configuration - ) + public AFileSystem create(final Configuration configuration) { - final Configuration dynamoConfiguration = configuration.child("aws.dynamodb"); - if(dynamoConfiguration == null) - { - return null; - } - final DynamoDbClientBuilder clientBuilder = DynamoDbClient.builder(); - this.populateBuilder(clientBuilder, dynamoConfiguration); + this.populateBuilder(clientBuilder, configuration); final DynamoDbClient client = clientBuilder.build(); - final boolean cache = dynamoConfiguration.optBoolean("cache").orElse(true); + final boolean cache = configuration.optBoolean("cache").orElse(true); final DynamoDbConnector connector = cache ? DynamoDbConnector.Caching(client) : DynamoDbConnector.New(client) diff --git a/afs/aws/s3/src/main/java/org/eclipse/store/afs/aws/s3/types/S3FileSystemCreator.java b/afs/aws/s3/src/main/java/org/eclipse/store/afs/aws/s3/types/S3FileSystemCreator.java index 5c5a07ca..4032c1af 100644 --- a/afs/aws/s3/src/main/java/org/eclipse/store/afs/aws/s3/types/S3FileSystemCreator.java +++ b/afs/aws/s3/src/main/java/org/eclipse/store/afs/aws/s3/types/S3FileSystemCreator.java @@ -27,26 +27,18 @@ public class S3FileSystemCreator extends AwsFileSystemCreator { public S3FileSystemCreator() { - super(); + super("aws.s3"); } @Override - public AFileSystem create( - final Configuration configuration - ) + public AFileSystem create(final Configuration configuration) { - final Configuration s3Configuration = configuration.child("aws.s3"); - if(s3Configuration == null) - { - return null; - } - final S3ClientBuilder clientBuilder = S3Client.builder(); - this.populateBuilder(clientBuilder, s3Configuration); + this.populateBuilder(clientBuilder, configuration); final S3Client client = clientBuilder.build(); - final boolean cache = s3Configuration.optBoolean("cache").orElse(true); - final boolean directory = s3Configuration.optBoolean("directory-bucket").orElse(false); + final boolean cache = configuration.optBoolean("cache").orElse(true); + final boolean directory = configuration.optBoolean("directory-bucket").orElse(false); final S3Connector connector = directory ? (cache diff --git a/afs/azure/storage/src/main/java/org/eclipse/store/afs/azure/storage/types/AzureStorageFileSystemCreator.java b/afs/azure/storage/src/main/java/org/eclipse/store/afs/azure/storage/types/AzureStorageFileSystemCreator.java index f86db942..ec33aac7 100644 --- a/afs/azure/storage/src/main/java/org/eclipse/store/afs/azure/storage/types/AzureStorageFileSystemCreator.java +++ b/afs/azure/storage/src/main/java/org/eclipse/store/afs/azure/storage/types/AzureStorageFileSystemCreator.java @@ -29,7 +29,7 @@ public class AzureStorageFileSystemCreator extends ConfigurationBasedCreator.Abs { public AzureStorageFileSystemCreator() { - super(AFileSystem.class); + super(AFileSystem.class, "azure.storage"); } @Override @@ -37,27 +37,21 @@ public AFileSystem create( final Configuration configuration ) { - final Configuration azureConfiguration = configuration.child("azure.storage"); - if(azureConfiguration == null) - { - return null; - } - final BlobServiceClientBuilder clientBuilder = new BlobServiceClientBuilder(); - azureConfiguration.opt("endpoint").ifPresent( + configuration.opt("endpoint").ifPresent( value -> clientBuilder.endpoint(value) ); - azureConfiguration.opt("connection-string").ifPresent( + configuration.opt("connection-string").ifPresent( value -> clientBuilder.connectionString(value) ); - azureConfiguration.opt("encryption-scope").ifPresent( + configuration.opt("encryption-scope").ifPresent( value -> clientBuilder.encryptionScope(value) ); - azureConfiguration.opt("credentials.type").ifPresent(credentialsType -> + configuration.opt("credentials.type").ifPresent(credentialsType -> { switch(credentialsType) { @@ -65,8 +59,8 @@ public AFileSystem create( { clientBuilder.credential( new BasicAuthenticationCredential( - azureConfiguration.get("credentials.username"), - azureConfiguration.get("credentials.password") + configuration.get("credentials.username"), + configuration.get("credentials.password") ) ); } @@ -76,8 +70,8 @@ public AFileSystem create( { clientBuilder.credential( new StorageSharedKeyCredential( - azureConfiguration.get("credentials.account-name"), - azureConfiguration.get("credentials.account-key") + configuration.get("credentials.account-name"), + configuration.get("credentials.account-key") ) ); } @@ -88,7 +82,7 @@ public AFileSystem create( } }); - final Configuration furtherConfiguration = azureConfiguration.child("configuration"); + final Configuration furtherConfiguration = configuration.child("configuration"); if(furtherConfiguration != null) { final com.azure.core.util.Configuration config = new com.azure.core.util.Configuration(); @@ -101,7 +95,7 @@ public AFileSystem create( } final BlobServiceClient client = clientBuilder.buildClient(); - final boolean cache = azureConfiguration.optBoolean("cache").orElse(true); + final boolean cache = configuration.optBoolean("cache").orElse(true); final AzureStorageConnector connector = cache ? AzureStorageConnector.Caching(client) : AzureStorageConnector.New(client) diff --git a/afs/googlecloud/firestore/src/main/java/org/eclipse/store/afs/googlecloud/firestore/types/GoogleCloudFirestoreFileSystemCreator.java b/afs/googlecloud/firestore/src/main/java/org/eclipse/store/afs/googlecloud/firestore/types/GoogleCloudFirestoreFileSystemCreator.java index 11f039e0..d8804e69 100644 --- a/afs/googlecloud/firestore/src/main/java/org/eclipse/store/afs/googlecloud/firestore/types/GoogleCloudFirestoreFileSystemCreator.java +++ b/afs/googlecloud/firestore/src/main/java/org/eclipse/store/afs/googlecloud/firestore/types/GoogleCloudFirestoreFileSystemCreator.java @@ -38,53 +38,45 @@ public class GoogleCloudFirestoreFileSystemCreator extends ConfigurationBasedCre public GoogleCloudFirestoreFileSystemCreator() { - super(AFileSystem.class); + super(AFileSystem.class, "googlecloud.firestore"); } @Override - public AFileSystem create( - final Configuration configuration - ) + public AFileSystem create(final Configuration configuration) { - final Configuration firestoreConfiguration = configuration.child("googlecloud.firestore"); - if(firestoreConfiguration == null) - { - return null; - } - final FirestoreOptions.Builder optionsBuilder = FirestoreOptions.getDefaultInstance().toBuilder(); - firestoreConfiguration.opt("client-lib-token").ifPresent( + configuration.opt("client-lib-token").ifPresent( value -> optionsBuilder.setClientLibToken(value) ); - firestoreConfiguration.opt("database-id").ifPresent( + configuration.opt("database-id").ifPresent( value -> optionsBuilder.setDatabaseId(value) ); - firestoreConfiguration.opt("emulator-host").ifPresent( + configuration.opt("emulator-host").ifPresent( value -> optionsBuilder.setEmulatorHost(value) ); - firestoreConfiguration.opt("host").ifPresent( + configuration.opt("host").ifPresent( value -> optionsBuilder.setHost(value) ); - firestoreConfiguration.opt("project-id").ifPresent( + configuration.opt("project-id").ifPresent( value -> optionsBuilder.setProjectId(value) ); - firestoreConfiguration.opt("quota-project-id").ifPresent( + configuration.opt("quota-project-id").ifPresent( value -> optionsBuilder.setQuotaProjectId(value) ); this.createCredentials( - firestoreConfiguration, + configuration, optionsBuilder ); final Firestore firestore = optionsBuilder.build().getService(); - final boolean cache = firestoreConfiguration.optBoolean("cache").orElse(true); + final boolean cache = configuration.optBoolean("cache").orElse(true); final GoogleCloudFirestoreConnector connector = cache ? GoogleCloudFirestoreConnector.Caching(firestore) : GoogleCloudFirestoreConnector.New(firestore) diff --git a/afs/kafka/src/main/java/org/eclipse/store/afs/kafka/types/KafkaFileSystemCreator.java b/afs/kafka/src/main/java/org/eclipse/store/afs/kafka/types/KafkaFileSystemCreator.java index 59cf795e..08482786 100644 --- a/afs/kafka/src/main/java/org/eclipse/store/afs/kafka/types/KafkaFileSystemCreator.java +++ b/afs/kafka/src/main/java/org/eclipse/store/afs/kafka/types/KafkaFileSystemCreator.java @@ -26,7 +26,7 @@ public class KafkaFileSystemCreator extends ConfigurationBasedCreator.Abstract client.setRegion(value) ); - objectStorageConfiguration.opt("endpoint").ifPresent( + configuration.opt("endpoint").ifPresent( value -> client.setEndpoint(value) ); - final boolean cache = objectStorageConfiguration.optBoolean("cache").orElse(true); + final boolean cache = configuration.optBoolean("cache").orElse(true); final OracleCloudObjectStorageConnector connector = cache ? OracleCloudObjectStorageConnector.Caching(client) : OracleCloudObjectStorageConnector.New(client) @@ -116,7 +108,7 @@ public AFileSystem create( } catch(final IOException e) { - throw new ConfigurationException(objectStorageConfiguration, e); + throw new ConfigurationException(configuration, e); } } diff --git a/afs/redis/src/main/java/org/eclipse/store/afs/redis/types/RedisFileSystemCreator.java b/afs/redis/src/main/java/org/eclipse/store/afs/redis/types/RedisFileSystemCreator.java index 1b861f2b..a741eca5 100644 --- a/afs/redis/src/main/java/org/eclipse/store/afs/redis/types/RedisFileSystemCreator.java +++ b/afs/redis/src/main/java/org/eclipse/store/afs/redis/types/RedisFileSystemCreator.java @@ -16,6 +16,7 @@ import org.eclipse.serializer.afs.types.AFileSystem; import org.eclipse.serializer.chars.XChars; +import org.eclipse.serializer.configuration.exceptions.ConfigurationException; import org.eclipse.serializer.configuration.types.Configuration; import org.eclipse.serializer.configuration.types.ConfigurationBasedCreator; import org.eclipse.store.afs.blobstore.types.BlobStoreFileSystem; @@ -25,27 +26,19 @@ public class RedisFileSystemCreator extends ConfigurationBasedCreator.Abstract { - private final String name; - - protected SqlFileSystemCreator( - final String name - ) + protected SqlFileSystemCreator(final String name) { - super(AFileSystem.class); - this.name = notEmpty(name); + super(AFileSystem.class, "sql." + notEmpty(name)); } @Override - public AFileSystem create( - final Configuration configuration - ) + public AFileSystem create(final Configuration configuration) { - final String configurationKey = "sql." + this.name; - final Configuration sqlConfiguration = configuration.child(configurationKey); - if(sqlConfiguration == null) - { - return null; - } - - final String dataSourceProviderClassName = sqlConfiguration.get("data-source-provider"); + final String dataSourceProviderClassName = configuration.get("data-source-provider"); if(dataSourceProviderClassName == null) { throw new ConfigurationException( - sqlConfiguration, - configurationKey + ".data-source-provider must be set" + configuration, + this.key() + ".data-source-provider must be set" ); } try @@ -63,10 +49,10 @@ public AFileSystem create( Class.forName(dataSourceProviderClassName).getDeclaredConstructor().newInstance() ; final SqlProvider sqlProvider = this.createSqlProvider( - sqlConfiguration, - dataSourceProvider.provideDataSource(sqlConfiguration.detach()) + configuration, + dataSourceProvider.provideDataSource(configuration.detach()) ); - final boolean cache = sqlConfiguration.optBoolean("cache").orElse(true); + final boolean cache = configuration.optBoolean("cache").orElse(true); return SqlFileSystem.New(cache ? SqlConnector.Caching(sqlProvider) : SqlConnector.New(sqlProvider) @@ -78,12 +64,12 @@ public AFileSystem create( SecurityException e ) { - throw new ConfigurationException(sqlConfiguration, e); + throw new ConfigurationException(configuration, e); } } protected abstract SqlProvider createSqlProvider( - Configuration sqlConfiguration, + Configuration configuration, DataSource dataSource ); diff --git a/afs/sql/src/main/java/org/eclipse/store/afs/sql/types/SqlFileSystemCreatorHana.java b/afs/sql/src/main/java/org/eclipse/store/afs/sql/types/SqlFileSystemCreatorHana.java index 7a6e9ece..1d2c8cc1 100644 --- a/afs/sql/src/main/java/org/eclipse/store/afs/sql/types/SqlFileSystemCreatorHana.java +++ b/afs/sql/src/main/java/org/eclipse/store/afs/sql/types/SqlFileSystemCreatorHana.java @@ -28,11 +28,11 @@ public SqlFileSystemCreatorHana() @Override protected SqlProvider createSqlProvider( - final Configuration sqlConfiguration, + final Configuration configuration, final DataSource dataSource ) { - final SqlProviderHana.StoreType storeType = sqlConfiguration.opt("store-type") + final SqlProviderHana.StoreType storeType = configuration.opt("store-type") .map(name -> SqlProviderHana.StoreType.valueOf(name.toUpperCase())) .orElse(SqlProviderHana.StoreType.ROW) ; diff --git a/afs/sql/src/main/java/org/eclipse/store/afs/sql/types/SqlFileSystemCreatorMariaDb.java b/afs/sql/src/main/java/org/eclipse/store/afs/sql/types/SqlFileSystemCreatorMariaDb.java index 80eb4383..b9703dd9 100644 --- a/afs/sql/src/main/java/org/eclipse/store/afs/sql/types/SqlFileSystemCreatorMariaDb.java +++ b/afs/sql/src/main/java/org/eclipse/store/afs/sql/types/SqlFileSystemCreatorMariaDb.java @@ -28,13 +28,13 @@ public SqlFileSystemCreatorMariaDb() @Override protected SqlProvider createSqlProvider( - final Configuration sqlConfiguration, + final Configuration configuration, final DataSource dataSource ) { return SqlProviderMariaDb.New( - sqlConfiguration.get("catalog"), - sqlConfiguration.get("schema") , + configuration.get("catalog"), + configuration.get("schema") , dataSource ); } diff --git a/afs/sql/src/main/java/org/eclipse/store/afs/sql/types/SqlFileSystemCreatorOracle.java b/afs/sql/src/main/java/org/eclipse/store/afs/sql/types/SqlFileSystemCreatorOracle.java index 4963026b..ce6dab65 100644 --- a/afs/sql/src/main/java/org/eclipse/store/afs/sql/types/SqlFileSystemCreatorOracle.java +++ b/afs/sql/src/main/java/org/eclipse/store/afs/sql/types/SqlFileSystemCreatorOracle.java @@ -28,13 +28,13 @@ public SqlFileSystemCreatorOracle() @Override protected SqlProvider createSqlProvider( - final Configuration sqlConfiguration, + final Configuration configuration, final DataSource dataSource ) { return SqlProviderOracle.New( - sqlConfiguration.get("catalog"), - sqlConfiguration.get("schema") , + configuration.get("catalog"), + configuration.get("schema") , dataSource ); } diff --git a/afs/sql/src/main/java/org/eclipse/store/afs/sql/types/SqlFileSystemCreatorPostgres.java b/afs/sql/src/main/java/org/eclipse/store/afs/sql/types/SqlFileSystemCreatorPostgres.java index 15e35bcb..c4723070 100644 --- a/afs/sql/src/main/java/org/eclipse/store/afs/sql/types/SqlFileSystemCreatorPostgres.java +++ b/afs/sql/src/main/java/org/eclipse/store/afs/sql/types/SqlFileSystemCreatorPostgres.java @@ -28,13 +28,13 @@ public SqlFileSystemCreatorPostgres() @Override protected SqlProvider createSqlProvider( - final Configuration sqlConfiguration, + final Configuration configuration, final DataSource dataSource ) { return SqlProviderPostgres.New( - sqlConfiguration.get("catalog"), - sqlConfiguration.get("schema") , + configuration.get("catalog"), + configuration.get("schema") , dataSource ); } diff --git a/afs/sql/src/main/java/org/eclipse/store/afs/sql/types/SqlFileSystemCreatorSqlite.java b/afs/sql/src/main/java/org/eclipse/store/afs/sql/types/SqlFileSystemCreatorSqlite.java index 81e68c6a..d5443022 100644 --- a/afs/sql/src/main/java/org/eclipse/store/afs/sql/types/SqlFileSystemCreatorSqlite.java +++ b/afs/sql/src/main/java/org/eclipse/store/afs/sql/types/SqlFileSystemCreatorSqlite.java @@ -28,13 +28,13 @@ public SqlFileSystemCreatorSqlite() @Override protected SqlProvider createSqlProvider( - final Configuration sqlConfiguration, + final Configuration configuration, final DataSource dataSource ) { return SqlProviderSqlite.New( - sqlConfiguration.get("catalog"), - sqlConfiguration.get("schema") , + configuration.get("catalog"), + configuration.get("schema") , dataSource ); } diff --git a/docs/modules/storage/pages/storage-targets/blob-stores/aws-dynamodb.adoc b/docs/modules/storage/pages/storage-targets/blob-stores/aws-dynamodb.adoc index 2ae32ada..f77eba68 100644 --- a/docs/modules/storage/pages/storage-targets/blob-stores/aws-dynamodb.adoc +++ b/docs/modules/storage/pages/storage-targets/blob-stores/aws-dynamodb.adoc @@ -29,6 +29,9 @@ When using xref:configuration/index.adoc#external-configuration[external configu [source, properties, title="eclipsestore.properties"] ---- +# optional, enforces checks +storage-filesystem.target=aws.dynamodb + storage-filesystem.aws.dynamodb.credentials.type=static storage-filesystem.aws.dynamodb.credentials.access-key-id=my-access-key-id storage-filesystem.aws.dynamodb.credentials.secret-access-key=my-secret-access-key diff --git a/docs/modules/storage/pages/storage-targets/blob-stores/aws-s3.adoc b/docs/modules/storage/pages/storage-targets/blob-stores/aws-s3.adoc index 1b802003..2fb13d36 100644 --- a/docs/modules/storage/pages/storage-targets/blob-stores/aws-s3.adoc +++ b/docs/modules/storage/pages/storage-targets/blob-stores/aws-s3.adoc @@ -40,6 +40,9 @@ When using xref:configuration/index.adoc#external-configuration[external configu [source, properties, title="eclipsestore.properties"] ---- +# optional, enforces checks +storage-filesystem.target=aws.s3 + storage-directory=bucket-name/folder/subfolder storage-filesystem.aws.s3.credentials.type=static storage-filesystem.aws.s3.credentials.access-key-id=my-access-key-id diff --git a/docs/modules/storage/pages/storage-targets/blob-stores/azure-storage.adoc b/docs/modules/storage/pages/storage-targets/blob-stores/azure-storage.adoc index 8ebc4122..8def4a63 100644 --- a/docs/modules/storage/pages/storage-targets/blob-stores/azure-storage.adoc +++ b/docs/modules/storage/pages/storage-targets/blob-stores/azure-storage.adoc @@ -30,6 +30,9 @@ When using xref:configuration/index.adoc#external-configuration[external configu [source, properties, title="eclipsestore.properties"] ---- +# optional, enforces checks +storage-filesystem.target=azure.storage + storage-filesystem.azure.storage.credentials.type=basic storage-filesystem.azure.storage.credentials.username=user storage-filesystem.azure.storage.credentials.password=secret diff --git a/docs/modules/storage/pages/storage-targets/blob-stores/google-cloud-firestore.adoc b/docs/modules/storage/pages/storage-targets/blob-stores/google-cloud-firestore.adoc index 3928bc6d..ddf622e8 100644 --- a/docs/modules/storage/pages/storage-targets/blob-stores/google-cloud-firestore.adoc +++ b/docs/modules/storage/pages/storage-targets/blob-stores/google-cloud-firestore.adoc @@ -29,6 +29,9 @@ When using xref:configuration/index.adoc#external-configuration[external configu [source, properties, title="eclipsestore.properties"] ---- +# optional, enforces checks +storage-filesystem.target=googlecloud.firestore + storage-filesystem.googlecloud.firestore.credentials.type=default storage-filesystem.googlecloud.firestore.database-id=my-database-id storage-filesystem.googlecloud.firestore.project-id=my-project-id diff --git a/docs/modules/storage/pages/storage-targets/blob-stores/kafka.adoc b/docs/modules/storage/pages/storage-targets/blob-stores/kafka.adoc index 794bc56c..916772f7 100644 --- a/docs/modules/storage/pages/storage-targets/blob-stores/kafka.adoc +++ b/docs/modules/storage/pages/storage-targets/blob-stores/kafka.adoc @@ -33,7 +33,10 @@ When using xref:configuration/index.adoc#external-configuration[external configu [source, properties, title="eclipsestore.properties"] ---- -storage-filesystem.kafka-properties.bootstrap.servers=localhost:9093 +# optional, enforces checks +storage-filesystem.target=kafka + +storage-filesystem.kafka.bootstrap.servers=localhost:9093 ---- == Supported properties diff --git a/docs/modules/storage/pages/storage-targets/blob-stores/oracle-cloud-object-storage.adoc b/docs/modules/storage/pages/storage-targets/blob-stores/oracle-cloud-object-storage.adoc index 4cf2cd2e..58578101 100644 --- a/docs/modules/storage/pages/storage-targets/blob-stores/oracle-cloud-object-storage.adoc +++ b/docs/modules/storage/pages/storage-targets/blob-stores/oracle-cloud-object-storage.adoc @@ -29,6 +29,9 @@ When using xref:configuration/index.adoc#external-configuration[external configu [source, properties, title="eclipsestore.properties"] ---- +# optional, enforces checks +storage-filesystem.target=oraclecloud.object-storage + storage-filesystem.oraclecloud.object-storage.config-file.profile=production storage-filesystem.oraclecloud.object-storage.region=us-phoenix-1 ---- diff --git a/docs/modules/storage/pages/storage-targets/blob-stores/redis.adoc b/docs/modules/storage/pages/storage-targets/blob-stores/redis.adoc index cac40009..2c6a5c8c 100644 --- a/docs/modules/storage/pages/storage-targets/blob-stores/redis.adoc +++ b/docs/modules/storage/pages/storage-targets/blob-stores/redis.adoc @@ -29,6 +29,9 @@ When using xref:configuration/index.adoc#external-configuration[external configu [source, properties, title="eclipsestore.properties"] ---- +# optional, enforces checks +storage-filesystem.target=redis + storage-filesystem.redis.uri=redis://localhost:6379/0 ---- diff --git a/docs/modules/storage/pages/storage-targets/sql-databases/mariadb.adoc b/docs/modules/storage/pages/storage-targets/sql-databases/mariadb.adoc index 4ca4c8ed..809521e6 100644 --- a/docs/modules/storage/pages/storage-targets/sql-databases/mariadb.adoc +++ b/docs/modules/storage/pages/storage-targets/sql-databases/mariadb.adoc @@ -37,6 +37,9 @@ Please note that you have to define a data source provider. [source, properties, title="eclipsestore.properties"] ---- +# optional, enforces checks +storage-filesystem.target=sql.mariadb + storage-filesystem.sql.mariadb.data-source-provider=com.sample.MyDataSourceProvider storage-filesystem.sql.mariadb.catalog=mycatalog storage-filesystem.sql.mariadb.schema=myschema diff --git a/docs/modules/storage/pages/storage-targets/sql-databases/oracle.adoc b/docs/modules/storage/pages/storage-targets/sql-databases/oracle.adoc index 642a99b1..b51cb701 100644 --- a/docs/modules/storage/pages/storage-targets/sql-databases/oracle.adoc +++ b/docs/modules/storage/pages/storage-targets/sql-databases/oracle.adoc @@ -37,6 +37,9 @@ Please note that you have to define a data source provider. [source, properties, title="eclipsestore.properties"] ---- +# optional, enforces checks +storage-filesystem.target=sql.oracle + storage-filesystem.sql.oracle.data-source-provider=com.sample.MyDataSourceProvider storage-filesystem.sql.oracle.catalog=mycatalog storage-filesystem.sql.oracle.schema=myschema diff --git a/docs/modules/storage/pages/storage-targets/sql-databases/postgresql.adoc b/docs/modules/storage/pages/storage-targets/sql-databases/postgresql.adoc index 0d216894..1907b037 100644 --- a/docs/modules/storage/pages/storage-targets/sql-databases/postgresql.adoc +++ b/docs/modules/storage/pages/storage-targets/sql-databases/postgresql.adoc @@ -37,6 +37,9 @@ Please note that you have to define a data source provider. [source, properties, title="eclipsestore.properties"] ---- +# optional, enforces checks +storage-filesystem.target=sql.postgres + storage-filesystem.sql.postgres.data-source-provider=com.sample.MyDataSourceProvider storage-filesystem.sql.postgres.catalog=mycatalog storage-filesystem.sql.postgres.schema=myschema diff --git a/docs/modules/storage/pages/storage-targets/sql-databases/sqlite.adoc b/docs/modules/storage/pages/storage-targets/sql-databases/sqlite.adoc index 233a08de..3ddc4d15 100644 --- a/docs/modules/storage/pages/storage-targets/sql-databases/sqlite.adoc +++ b/docs/modules/storage/pages/storage-targets/sql-databases/sqlite.adoc @@ -35,6 +35,9 @@ Please note that you have to define a data source provider. [source, properties, title="eclipsestore.properties"] ---- +# optional, enforces checks +storage-filesystem.target=sql.sqlite + storage-filesystem.sql.sqlite.data-source-provider=com.sample.MyDataSourceProvider storage-filesystem.sql.sqlite.catalog=mycatalog storage-filesystem.sql.sqlite.schema=myschema diff --git a/integrations/spring-boot3/src/main/java/org/eclipse/store/integrations/spring/boot/types/configuration/EclipseStoreProperties.java b/integrations/spring-boot3/src/main/java/org/eclipse/store/integrations/spring/boot/types/configuration/EclipseStoreProperties.java index 1eacf9b2..9e68a4db 100644 --- a/integrations/spring-boot3/src/main/java/org/eclipse/store/integrations/spring/boot/types/configuration/EclipseStoreProperties.java +++ b/integrations/spring-boot3/src/main/java/org/eclipse/store/integrations/spring/boot/types/configuration/EclipseStoreProperties.java @@ -42,7 +42,7 @@ public class EclipseStoreProperties */ @NestedConfigurationProperty private StorageFilesystem storageFilesystem; - + /** * If configured, the storage will not delete files. Instead of deleting a file it will be moved to this directory. */ @@ -538,20 +538,20 @@ public void setRegisterJdk8Handlers(final boolean registerJdk8Handlers) public boolean isAutoCreateDefaultFoundation() { - return autoCreateDefaultFoundation; + return this.autoCreateDefaultFoundation; } - public void setAutoCreateDefaultFoundation(boolean autoCreateDefaultFoundation) + public void setAutoCreateDefaultFoundation(final boolean autoCreateDefaultFoundation) { this.autoCreateDefaultFoundation = autoCreateDefaultFoundation; } public boolean isAutoCreateDefaultStorage() { - return autoCreateDefaultStorage; + return this.autoCreateDefaultStorage; } - public void setAutoCreateDefaultStorage(boolean autoCreateDefaultStorage) + public void setAutoCreateDefaultStorage(final boolean autoCreateDefaultStorage) { this.autoCreateDefaultStorage = autoCreateDefaultStorage; } diff --git a/integrations/spring-boot3/src/main/java/org/eclipse/store/integrations/spring/boot/types/configuration/StorageFilesystem.java b/integrations/spring-boot3/src/main/java/org/eclipse/store/integrations/spring/boot/types/configuration/StorageFilesystem.java index 84fe67c4..656b6cc2 100644 --- a/integrations/spring-boot3/src/main/java/org/eclipse/store/integrations/spring/boot/types/configuration/StorageFilesystem.java +++ b/integrations/spring-boot3/src/main/java/org/eclipse/store/integrations/spring/boot/types/configuration/StorageFilesystem.java @@ -25,100 +25,115 @@ import org.eclipse.store.integrations.spring.boot.types.configuration.sql.Sql; import org.springframework.boot.context.properties.NestedConfigurationProperty; + public class StorageFilesystem { - - @NestedConfigurationProperty - private Sql sql; - - @NestedConfigurationProperty - private Aws aws; - - @NestedConfigurationProperty - private Azure azure; - - /** - * Supported properties - * All supported properties of Kafka, see ... - */ - private Map kafkaProperties; - - @NestedConfigurationProperty - private Oraclecloud oraclecloud; - - @NestedConfigurationProperty - private Googlecloud googlecloud; - - @NestedConfigurationProperty - private Redis redis; - - public Sql getSql() - { - return this.sql; - } - - public void setSql(final Sql sql) - { - this.sql = sql; - } - - public Aws getAws() - { - return this.aws; - } - - public void setAws(final Aws aws) - { - this.aws = aws; - } - - public Map getKafkaProperties() - { - return this.kafkaProperties; - } - - public void setKafkaProperties(final Map kafkaProperties) - { - this.kafkaProperties = kafkaProperties; - } - - public Oraclecloud getOraclecloud() - { - return this.oraclecloud; - } - - public void setOraclecloud(final Oraclecloud oraclecloud) - { - this.oraclecloud = oraclecloud; - } - - public Redis getRedis() - { - return this.redis; - } - - public void setRedis(final Redis redis) - { - this.redis = redis; - } - - public Azure getAzure() - { - return this.azure; - } - - public void setAzure(final Azure azure) - { - this.azure = azure; - } - - public Googlecloud getGooglecloud() - { - return this.googlecloud; - } - - public void setGooglecloud(final Googlecloud googlecloud) - { - this.googlecloud = googlecloud; - } + /** + * The target type of the file system + */ + private String target; + + @NestedConfigurationProperty + private Sql sql; + + @NestedConfigurationProperty + private Aws aws; + + @NestedConfigurationProperty + private Azure azure; + + /** + * Supported properties + * All supported properties of Kafka, see ... + */ + private Map kafkaProperties; + + @NestedConfigurationProperty + private Oraclecloud oraclecloud; + + @NestedConfigurationProperty + private Googlecloud googlecloud; + + @NestedConfigurationProperty + private Redis redis; + + public String getTarget() + { + return this.target; + } + + public void setTarget(final String target) + { + this.target = target; + } + + public Sql getSql() + { + return this.sql; + } + + public void setSql(final Sql sql) + { + this.sql = sql; + } + + public Aws getAws() + { + return this.aws; + } + + public void setAws(final Aws aws) + { + this.aws = aws; + } + + public Map getKafkaProperties() + { + return this.kafkaProperties; + } + + public void setKafkaProperties(final Map kafkaProperties) + { + this.kafkaProperties = kafkaProperties; + } + + public Oraclecloud getOraclecloud() + { + return this.oraclecloud; + } + + public void setOraclecloud(final Oraclecloud oraclecloud) + { + this.oraclecloud = oraclecloud; + } + + public Redis getRedis() + { + return this.redis; + } + + public void setRedis(final Redis redis) + { + this.redis = redis; + } + + public Azure getAzure() + { + return this.azure; + } + + public void setAzure(final Azure azure) + { + this.azure = azure; + } + + public Googlecloud getGooglecloud() + { + return this.googlecloud; + } + + public void setGooglecloud(final Googlecloud googlecloud) + { + this.googlecloud = googlecloud; + } } diff --git a/integrations/spring-boot3/src/main/java/org/eclipse/store/integrations/spring/boot/types/converter/ConfigKeys.java b/integrations/spring-boot3/src/main/java/org/eclipse/store/integrations/spring/boot/types/converter/ConfigKeys.java index 266972fb..e727e127 100644 --- a/integrations/spring-boot3/src/main/java/org/eclipse/store/integrations/spring/boot/types/converter/ConfigKeys.java +++ b/integrations/spring-boot3/src/main/java/org/eclipse/store/integrations/spring/boot/types/converter/ConfigKeys.java @@ -31,6 +31,7 @@ public enum ConfigKeys // commons CACHE("cache"), + TARGET("target"), //aws AWS("aws"), diff --git a/integrations/spring-boot3/src/main/java/org/eclipse/store/integrations/spring/boot/types/converter/EclipseStoreConfigConverter.java b/integrations/spring-boot3/src/main/java/org/eclipse/store/integrations/spring/boot/types/converter/EclipseStoreConfigConverter.java index 9c527cad..0b5a2a18 100644 --- a/integrations/spring-boot3/src/main/java/org/eclipse/store/integrations/spring/boot/types/converter/EclipseStoreConfigConverter.java +++ b/integrations/spring-boot3/src/main/java/org/eclipse/store/integrations/spring/boot/types/converter/EclipseStoreConfigConverter.java @@ -142,6 +142,13 @@ public Map convertConfigurationToMap(final EclipseStorePropertie private Map prepareFileSystem(final StorageFilesystem properties, final String key) { final Map values = new HashMap<>(); + + final String target = properties.getTarget(); + if(target != null) + { + values.put(this.composeKey(key, ConfigKeys.TARGET.value()), target); + } + if (properties.getSql() != null) { values.putAll(this.prepareSql(properties.getSql(), this.composeKey(key, ConfigKeys.SQL.value()))); diff --git a/storage/embedded-configuration/src/main/java/org/eclipse/store/storage/embedded/configuration/types/EmbeddedStorageFoundationCreatorConfigurationBased.java b/storage/embedded-configuration/src/main/java/org/eclipse/store/storage/embedded/configuration/types/EmbeddedStorageFoundationCreatorConfigurationBased.java index 2ce6d5d9..c9986207 100644 --- a/storage/embedded-configuration/src/main/java/org/eclipse/store/storage/embedded/configuration/types/EmbeddedStorageFoundationCreatorConfigurationBased.java +++ b/storage/embedded-configuration/src/main/java/org/eclipse/store/storage/embedded/configuration/types/EmbeddedStorageFoundationCreatorConfigurationBased.java @@ -137,15 +137,31 @@ private AFileSystem createFileSystem( final Configuration configuration = this.configuration.child(configurationKey); if(configuration != null) { + final String fileSystemTypeKey = this.configuration.opt(configurationKey + ".target").orElse(null); + final boolean fileSystemTypeSet = !XChars.isEmpty(fileSystemTypeKey); for(final ConfigurationBasedCreator creator : ConfigurationBasedCreator.registeredCreators(AFileSystem.class)) { - final AFileSystem fileSystem = creator.create(configuration); - if(fileSystem != null) + if(!fileSystemTypeSet || creator.key().equals(fileSystemTypeKey)) { - return fileSystem; + final Configuration child = configuration.child(creator.key()); + if(child != null) + { + final AFileSystem fileSystem = creator.create(child); + if(fileSystem != null) + { + return fileSystem; + } + } } } + if(fileSystemTypeSet) + { + throw new IllegalStateException( + "No " + configurationKey + " provider found for '" + fileSystemTypeKey + + "'. Please ensure that all required dependencies are present." + ); + } } return defaultFileSystemSupplier.get();