This is an automated email from the ASF dual-hosted git repository. riemer pushed a commit to branch add-directory-configuration-to-ui in repository https://gitbox.apache.org/repos/asf/streampipes.git
commit a73395a00e4694524f7e3f1ee5938988d791342c Author: Dominik Riemer <[email protected]> AuthorDate: Thu Jan 9 17:15:50 2025 +0100 feat: Asset and file directories can be modified from the UI --- .../model/configuration/DefaultGeneralConfig.java | 35 +++++++++++++ .../configuration/DefaultSpCoreConfiguration.java | 28 ----------- .../model/configuration/GeneralConfig.java | 19 +++++++ .../model/configuration/SpCoreConfiguration.java | 38 +++++++------- .../streampipes/manager/assets/AssetConstants.java | 1 + .../streampipes/manager/file/FileConstants.java | 1 + .../core/migrations/AvailableMigrations.java | 4 +- .../v970/MoveDirectoryConfigurationMigration.java | 58 ++++++++++++++++++++++ .../src/lib/model/config/general-config.model.ts | 2 + .../general-configuration.component.html | 28 +++++++++++ .../general-configuration.component.ts | 18 +++++++ 11 files changed, 184 insertions(+), 48 deletions(-) diff --git a/streampipes-model/src/main/java/org/apache/streampipes/model/configuration/DefaultGeneralConfig.java b/streampipes-model/src/main/java/org/apache/streampipes/model/configuration/DefaultGeneralConfig.java index c0b97cfd22..30f20971f9 100644 --- a/streampipes-model/src/main/java/org/apache/streampipes/model/configuration/DefaultGeneralConfig.java +++ b/streampipes-model/src/main/java/org/apache/streampipes/model/configuration/DefaultGeneralConfig.java @@ -18,11 +18,46 @@ package org.apache.streampipes.model.configuration; +import org.apache.streampipes.commons.environment.Environment; +import org.apache.streampipes.commons.environment.Environments; + +import java.io.File; + public class DefaultGeneralConfig { public GeneralConfig make() { var generalConfig = new GeneralConfig(); generalConfig.setLinkSettings(new DefaultLinkSettings().make()); + generalConfig.setAssetDir(makeAssetLocation()); + generalConfig.setFilesDir(makeFileLocation()); return generalConfig; } + + public String makeAssetLocation() { + return makeStreamPipesHomeLocation() + + "assets"; + } + + public String makeFileLocation() { + return makeStreamPipesHomeLocation() + + "files"; + } + + private String makeStreamPipesHomeLocation() { + var userDefinedAssetDir = getEnvironment().getCoreAssetBaseDir(); + var assetDirAppendix = getSpAssetDirAppendix(); + if (userDefinedAssetDir.exists()) { + return userDefinedAssetDir.getValue() + assetDirAppendix; + } else { + return System.getProperty("user.home") + assetDirAppendix; + } + } + + private String getSpAssetDirAppendix() { + return File.separator + ".streampipes" + File.separator; + } + + private Environment getEnvironment() { + return Environments.getEnvironment(); + } } diff --git a/streampipes-model/src/main/java/org/apache/streampipes/model/configuration/DefaultSpCoreConfiguration.java b/streampipes-model/src/main/java/org/apache/streampipes/model/configuration/DefaultSpCoreConfiguration.java index b669b3e4b7..85b52d1cdb 100644 --- a/streampipes-model/src/main/java/org/apache/streampipes/model/configuration/DefaultSpCoreConfiguration.java +++ b/streampipes-model/src/main/java/org/apache/streampipes/model/configuration/DefaultSpCoreConfiguration.java @@ -22,8 +22,6 @@ import org.apache.streampipes.commons.environment.Environment; import org.apache.streampipes.commons.environment.Environments; import org.apache.streampipes.commons.random.TokenGenerator; -import java.io.File; - public class DefaultSpCoreConfiguration { public SpCoreConfiguration make() { @@ -33,33 +31,11 @@ public class DefaultSpCoreConfiguration { coreCfg.setMessagingSettings(new DefaultMessagingSettings().make()); coreCfg.setEmailConfig(EmailConfig.fromDefaults()); coreCfg.setEmailTemplateConfig(new DefaultEmailTemplateConfiguration().getDefaultTemplates()); - coreCfg.setFilesDir(makeFileLocation()); - coreCfg.setAssetDir(makeAssetLocation()); coreCfg.setLocalAuthConfig(LocalAuthConfig.fromDefaults(getJwtSecret())); return coreCfg; } - private String makeAssetLocation() { - return makeStreamPipesHomeLocation() - + "assets"; - } - - private String makeFileLocation() { - return makeStreamPipesHomeLocation() - + "files"; - } - - private String makeStreamPipesHomeLocation() { - var userDefinedAssetDir = getEnvironment().getCoreAssetBaseDir(); - var assetDirAppendix = getSpAssetDirAppendix(); - if (userDefinedAssetDir.exists()) { - return userDefinedAssetDir.getValue() + assetDirAppendix; - } else { - return System.getProperty("user.home") + assetDirAppendix; - } - } - private String getJwtSecret() { var env = getEnvironment(); return env.getJwtSecret().getValueOrResolve(this::makeDefaultJwtSecret); @@ -73,8 +49,4 @@ public class DefaultSpCoreConfiguration { return Environments.getEnvironment(); } - private String getSpAssetDirAppendix() { - return File.separator + ".streampipes" + File.separator; - } - } diff --git a/streampipes-model/src/main/java/org/apache/streampipes/model/configuration/GeneralConfig.java b/streampipes-model/src/main/java/org/apache/streampipes/model/configuration/GeneralConfig.java index 188590a196..f2381e57c0 100644 --- a/streampipes-model/src/main/java/org/apache/streampipes/model/configuration/GeneralConfig.java +++ b/streampipes-model/src/main/java/org/apache/streampipes/model/configuration/GeneralConfig.java @@ -33,6 +33,9 @@ public class GeneralConfig { private List<String> defaultUserRoles; private LinkSettings linkSettings; + private String assetDir; + private String filesDir; + public GeneralConfig() { } @@ -113,4 +116,20 @@ public class GeneralConfig { public void setLinkSettings(LinkSettings linkSettings) { this.linkSettings = linkSettings; } + + public String getAssetDir() { + return assetDir; + } + + public void setAssetDir(String assetDir) { + this.assetDir = assetDir; + } + + public String getFilesDir() { + return filesDir; + } + + public void setFilesDir(String filesDir) { + this.filesDir = filesDir; + } } diff --git a/streampipes-model/src/main/java/org/apache/streampipes/model/configuration/SpCoreConfiguration.java b/streampipes-model/src/main/java/org/apache/streampipes/model/configuration/SpCoreConfiguration.java index b5766bd3f6..eaf25b3650 100644 --- a/streampipes-model/src/main/java/org/apache/streampipes/model/configuration/SpCoreConfiguration.java +++ b/streampipes-model/src/main/java/org/apache/streampipes/model/configuration/SpCoreConfiguration.java @@ -34,12 +34,12 @@ public class SpCoreConfiguration { private GeneralConfig generalConfig; private LocationConfig locationConfig; - private boolean isConfigured; - private SpCoreConfigurationStatus serviceStatus; - private String assetDir; private String filesDir; + private boolean isConfigured; + private SpCoreConfigurationStatus serviceStatus; + public SpCoreConfiguration() { this.locationConfig = new LocationConfig(false, "", ""); } @@ -100,22 +100,6 @@ public class SpCoreConfiguration { isConfigured = configured; } - public String getAssetDir() { - return assetDir; - } - - public void setAssetDir(String assetDir) { - this.assetDir = assetDir; - } - - public String getFilesDir() { - return filesDir; - } - - public void setFilesDir(String filesDir) { - this.filesDir = filesDir; - } - public EmailTemplateConfig getEmailTemplateConfig() { return this.emailTemplateConfig; } @@ -139,4 +123,20 @@ public class SpCoreConfiguration { public void setLocationConfig(LocationConfig locationConfig) { this.locationConfig = locationConfig; } + + public String getAssetDir() { + return assetDir; + } + + public void setAssetDir(String assetDir) { + this.assetDir = assetDir; + } + + public String getFilesDir() { + return filesDir; + } + + public void setFilesDir(String filesDir) { + this.filesDir = filesDir; + } } diff --git a/streampipes-pipeline-management/src/main/java/org/apache/streampipes/manager/assets/AssetConstants.java b/streampipes-pipeline-management/src/main/java/org/apache/streampipes/manager/assets/AssetConstants.java index 67ad1e1986..f9a8f2db63 100644 --- a/streampipes-pipeline-management/src/main/java/org/apache/streampipes/manager/assets/AssetConstants.java +++ b/streampipes-pipeline-management/src/main/java/org/apache/streampipes/manager/assets/AssetConstants.java @@ -26,6 +26,7 @@ public class AssetConstants { .getNoSqlStore() .getSpCoreConfigurationStorage() .get() + .getGeneralConfig() .getAssetDir(); } diff --git a/streampipes-pipeline-management/src/main/java/org/apache/streampipes/manager/file/FileConstants.java b/streampipes-pipeline-management/src/main/java/org/apache/streampipes/manager/file/FileConstants.java index 372ddda1d1..834ffb1dca 100644 --- a/streampipes-pipeline-management/src/main/java/org/apache/streampipes/manager/file/FileConstants.java +++ b/streampipes-pipeline-management/src/main/java/org/apache/streampipes/manager/file/FileConstants.java @@ -25,6 +25,7 @@ public class FileConstants { .getNoSqlStore() .getSpCoreConfigurationStorage() .get() + .getGeneralConfig() .getFilesDir(); } diff --git a/streampipes-service-core/src/main/java/org/apache/streampipes/service/core/migrations/AvailableMigrations.java b/streampipes-service-core/src/main/java/org/apache/streampipes/service/core/migrations/AvailableMigrations.java index ed731d7ce8..514b955aee 100644 --- a/streampipes-service-core/src/main/java/org/apache/streampipes/service/core/migrations/AvailableMigrations.java +++ b/streampipes-service-core/src/main/java/org/apache/streampipes/service/core/migrations/AvailableMigrations.java @@ -31,6 +31,7 @@ import org.apache.streampipes.service.core.migrations.v970.AddLinkSettingsMigrat import org.apache.streampipes.service.core.migrations.v970.AddRolesToUserDbMigration; import org.apache.streampipes.service.core.migrations.v970.DataExplorerDataViewMigration; import org.apache.streampipes.service.core.migrations.v970.ModifyAssetLinkTypeMigration; +import org.apache.streampipes.service.core.migrations.v970.MoveDirectoryConfigurationMigration; import org.apache.streampipes.service.core.migrations.v970.RemoveNodesFromOpcUaAdaptersMigration; import java.util.Arrays; @@ -52,7 +53,8 @@ public class AvailableMigrations { new ModifyAssetLinkTypeMigration(), new RemoveNodesFromOpcUaAdaptersMigration(), new AddRolesToUserDbMigration(), - new AddDataLakePipelineTemplateMigration() + new AddDataLakePipelineTemplateMigration(), + new MoveDirectoryConfigurationMigration() ); } } diff --git a/streampipes-service-core/src/main/java/org/apache/streampipes/service/core/migrations/v970/MoveDirectoryConfigurationMigration.java b/streampipes-service-core/src/main/java/org/apache/streampipes/service/core/migrations/v970/MoveDirectoryConfigurationMigration.java new file mode 100644 index 0000000000..6d9c4cbd7d --- /dev/null +++ b/streampipes-service-core/src/main/java/org/apache/streampipes/service/core/migrations/v970/MoveDirectoryConfigurationMigration.java @@ -0,0 +1,58 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package org.apache.streampipes.service.core.migrations.v970; + +import org.apache.streampipes.model.configuration.DefaultGeneralConfig; +import org.apache.streampipes.service.core.migrations.Migration; +import org.apache.streampipes.storage.api.ISpCoreConfigurationStorage; +import org.apache.streampipes.storage.management.StorageDispatcher; + +import java.io.IOException; + +public class MoveDirectoryConfigurationMigration implements Migration { + + private final ISpCoreConfigurationStorage storage; + + public MoveDirectoryConfigurationMigration() { + this.storage = StorageDispatcher.INSTANCE.getNoSqlStore().getSpCoreConfigurationStorage(); + } + + @Override + public boolean shouldExecute() { + var config = storage.get(); + return config != null && config.getGeneralConfig().getAssetDir() == null; + } + + @Override + public void executeMigration() throws IOException { + var config = storage.get(); + config.getGeneralConfig().setFilesDir(new DefaultGeneralConfig().makeFileLocation()); + config.getGeneralConfig().setAssetDir(new DefaultGeneralConfig().makeAssetLocation()); + + config.setAssetDir(null); + config.setFilesDir(null); + + storage.updateElement(config); + } + + @Override + public String getDescription() { + return "Moving asset directory to general config"; + } +} diff --git a/ui/projects/streampipes/platform-services/src/lib/model/config/general-config.model.ts b/ui/projects/streampipes/platform-services/src/lib/model/config/general-config.model.ts index fbc6db7798..9d65e3383d 100644 --- a/ui/projects/streampipes/platform-services/src/lib/model/config/general-config.model.ts +++ b/ui/projects/streampipes/platform-services/src/lib/model/config/general-config.model.ts @@ -28,4 +28,6 @@ export interface GeneralConfigModel { defaultUserRoles: string[]; appName: string; linkSettings: LinkSettings; + assetDir: string; + filesDir: string; } diff --git a/ui/src/app/configuration/general-configuration/general-configuration.component.html b/ui/src/app/configuration/general-configuration/general-configuration.component.html index 945171769a..165bcc6560 100644 --- a/ui/src/app/configuration/general-configuration/general-configuration.component.html +++ b/ui/src/app/configuration/general-configuration/general-configuration.component.html @@ -82,6 +82,34 @@ </mat-form-field> </div> </div> + <div class="subsection-title">Asset Directory</div> + <div class="warning mb-10"> + Modification of the asset directory will be only applied + after restarting the core service. + </div> + <mat-form-field color="accent"> + <input + formControlName="assetDir" + fxFlex + matInput + required + data-cy="general-config-asset-dir" + /> + </mat-form-field> + <div class="subsection-title">File Directory</div> + <div class="warning mb-10"> + Modification of the file directory will be only applied + after restarting the core service. + </div> + <mat-form-field color="accent"> + <input + formControlName="filesDir" + fxFlex + matInput + required + data-cy="general-config-files-dir" + /> + </mat-form-field> </sp-split-section> <sp-split-section title="Registration" diff --git a/ui/src/app/configuration/general-configuration/general-configuration.component.ts b/ui/src/app/configuration/general-configuration/general-configuration.component.ts index 320f9d659e..47259988a1 100644 --- a/ui/src/app/configuration/general-configuration/general-configuration.component.ts +++ b/ui/src/app/configuration/general-configuration/general-configuration.component.ts @@ -96,6 +96,8 @@ export class GeneralConfigurationComponent implements OnInit { defaultUserRoles: [UserRole.ROLE_PIPELINE_USER], appName: this.appConstants.APP_NAME, linkSettings: configs[0].linkSettings, + filesDir: configs[0].filesDir, + assetDir: configs[0].assetDir, }; } this.mailConfig = configs[1]; @@ -128,6 +130,20 @@ export class GeneralConfigurationComponent implements OnInit { Validators.required, ), ); + this.parentForm.addControl( + 'assetDir', + new UntypedFormControl( + this.generalConfig.assetDir, + Validators.required, + ), + ); + this.parentForm.addControl( + 'filesDir', + new UntypedFormControl( + this.generalConfig.filesDir, + Validators.required, + ), + ); this.parentForm.addControl( 'allowSelfRegistration', new UntypedFormControl( @@ -190,6 +206,8 @@ export class GeneralConfigurationComponent implements OnInit { this.generalConfig.protocol = v.protocol; this.generalConfig.port = v.port; this.generalConfig.hostname = v.hostname; + this.generalConfig.assetDir = v.assetDir; + this.generalConfig.filesDir = v.filesDir; this.generalConfig.allowPasswordRecovery = v.allowPasswordRecovery; this.generalConfig.allowSelfRegistration =
