This is an automated email from the ASF dual-hosted git repository. zehnder pushed a commit to branch 4172-use-domain-storage-interfaces-instead-of-crudstorage-in-inosqlstorage in repository https://gitbox.apache.org/repos/asf/streampipes.git
commit 57ac5e24453806c47ef9bbdf3955a55a0babde58 Author: Philipp Zehnder <[email protected]> AuthorDate: Thu Feb 12 21:24:10 2026 +0100 refactor(#4172): introduce IFileMetadataStorage and migrate getFileMetadataStorage to typed interface --- .../export/ConfiguredExcelOutputWriter.java | 7 ++--- .../streampipes/manager/file/FileManager.java | 6 ++-- .../streampipes/manager/file/TestFileManager.java | 6 ++-- ...MergeFilenamesAndRenameDuplicatesMigration.java | 6 ++-- .../storage/api/IFileMetadataStorage.java | 23 ++++++++++++++++ .../streampipes/storage/api/INoSqlStorage.java | 3 +- .../storage/couchdb/CouchDbStorageManager.java | 10 +++---- .../couchdb/impl/FileMetadataStorageImpl.java | 32 ++++++++++++++++++++++ 8 files changed, 72 insertions(+), 21 deletions(-) diff --git a/streampipes-data-explorer-export/src/main/java/org/apache/streampipes/dataexplorer/export/ConfiguredExcelOutputWriter.java b/streampipes-data-explorer-export/src/main/java/org/apache/streampipes/dataexplorer/export/ConfiguredExcelOutputWriter.java index d349f391c9..1c7f1d74f9 100644 --- a/streampipes-data-explorer-export/src/main/java/org/apache/streampipes/dataexplorer/export/ConfiguredExcelOutputWriter.java +++ b/streampipes-data-explorer-export/src/main/java/org/apache/streampipes/dataexplorer/export/ConfiguredExcelOutputWriter.java @@ -22,8 +22,7 @@ import org.apache.streampipes.manager.file.FileManager; import org.apache.streampipes.model.datalake.DataLakeMeasure; import org.apache.streampipes.model.datalake.param.ProvidedRestQueryParams; import org.apache.streampipes.model.datalake.param.SupportedRestQueryParams; -import org.apache.streampipes.model.file.FileMetadata; -import org.apache.streampipes.storage.api.CRUDStorage; +import org.apache.streampipes.storage.api.IFileMetadataStorage; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.xssf.streaming.SXSSFWorkbook; @@ -38,7 +37,7 @@ import java.util.Objects; public class ConfiguredExcelOutputWriter extends ConfiguredOutputWriter { - private final CRUDStorage<FileMetadata> storage; + private final IFileMetadataStorage storage; private SXSSFWorkbook wb; private Sheet ws; @@ -48,7 +47,7 @@ public class ConfiguredExcelOutputWriter extends ConfiguredOutputWriter { private DataLakeMeasure schema; private String headerColumnNameStrategy; - public ConfiguredExcelOutputWriter(CRUDStorage<FileMetadata> fileMetadataStorage) { + public ConfiguredExcelOutputWriter(IFileMetadataStorage fileMetadataStorage) { this.storage = fileMetadataStorage; } diff --git a/streampipes-pipeline-management/src/main/java/org/apache/streampipes/manager/file/FileManager.java b/streampipes-pipeline-management/src/main/java/org/apache/streampipes/manager/file/FileManager.java index a5a515669c..8137e641b3 100644 --- a/streampipes-pipeline-management/src/main/java/org/apache/streampipes/manager/file/FileManager.java +++ b/streampipes-pipeline-management/src/main/java/org/apache/streampipes/manager/file/FileManager.java @@ -20,7 +20,7 @@ package org.apache.streampipes.manager.file; import org.apache.streampipes.commons.file.FileHasher; import org.apache.streampipes.model.file.FileMetadata; import org.apache.streampipes.sdk.helpers.Filetypes; -import org.apache.streampipes.storage.api.CRUDStorage; +import org.apache.streampipes.storage.api.IFileMetadataStorage; import org.apache.streampipes.storage.management.StorageDispatcher; import org.apache.commons.io.input.BOMInputStream; @@ -34,11 +34,11 @@ import java.util.stream.Collectors; public class FileManager { - private final CRUDStorage<FileMetadata> fileMetadataStorage; + private final IFileMetadataStorage fileMetadataStorage; private final FileHandler fileHandler; private final FileHasher fileHasher; - public FileManager(CRUDStorage<FileMetadata> fileMetadataStorage, + public FileManager(IFileMetadataStorage fileMetadataStorage, FileHandler fileHandler, FileHasher fileHasher) { this.fileMetadataStorage = fileMetadataStorage; diff --git a/streampipes-pipeline-management/src/test/java/org/apache/streampipes/manager/file/TestFileManager.java b/streampipes-pipeline-management/src/test/java/org/apache/streampipes/manager/file/TestFileManager.java index ec2e840da0..38f1b00ea4 100644 --- a/streampipes-pipeline-management/src/test/java/org/apache/streampipes/manager/file/TestFileManager.java +++ b/streampipes-pipeline-management/src/test/java/org/apache/streampipes/manager/file/TestFileManager.java @@ -19,7 +19,7 @@ package org.apache.streampipes.manager.file; import org.apache.streampipes.commons.file.FileHasher; import org.apache.streampipes.model.file.FileMetadata; -import org.apache.streampipes.storage.api.CRUDStorage; +import org.apache.streampipes.storage.api.IFileMetadataStorage; import org.apache.commons.io.IOUtils; import org.junit.jupiter.api.BeforeEach; @@ -50,7 +50,7 @@ import static org.mockito.Mockito.when; public class TestFileManager { private FileManager fileManager; - private CRUDStorage<FileMetadata> fileMetadataStorage; + private IFileMetadataStorage fileMetadataStorage; private FileHandler fileHandler; private FileHasher fileHasher; @@ -59,7 +59,7 @@ public class TestFileManager { @BeforeEach public void setup() { - fileMetadataStorage = mock(CRUDStorage.class); + fileMetadataStorage = mock(IFileMetadataStorage.class); fileHandler = mock(FileHandler.class); fileHasher = mock(FileHasher.class); fileManager = new FileManager(fileMetadataStorage, fileHandler, fileHasher); diff --git a/streampipes-service-core/src/main/java/org/apache/streampipes/service/core/migrations/v095/MergeFilenamesAndRenameDuplicatesMigration.java b/streampipes-service-core/src/main/java/org/apache/streampipes/service/core/migrations/v095/MergeFilenamesAndRenameDuplicatesMigration.java index 0075f0ce8a..c8fee5709b 100644 --- a/streampipes-service-core/src/main/java/org/apache/streampipes/service/core/migrations/v095/MergeFilenamesAndRenameDuplicatesMigration.java +++ b/streampipes-service-core/src/main/java/org/apache/streampipes/service/core/migrations/v095/MergeFilenamesAndRenameDuplicatesMigration.java @@ -22,7 +22,7 @@ import org.apache.streampipes.manager.file.FileHandler; import org.apache.streampipes.model.file.FileMetadata; import org.apache.streampipes.serializers.json.JacksonSerializer; import org.apache.streampipes.service.core.migrations.Migration; -import org.apache.streampipes.storage.api.CRUDStorage; +import org.apache.streampipes.storage.api.IFileMetadataStorage; import org.apache.streampipes.storage.couchdb.utils.Utils; import org.apache.streampipes.storage.management.StorageDispatcher; @@ -52,7 +52,7 @@ public class MergeFilenamesAndRenameDuplicatesMigration implements Migration { DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, true )); - private final CRUDStorage<FileMetadata> fileMetadataStorage = + private final IFileMetadataStorage fileMetadataStorage = StorageDispatcher.INSTANCE.getNoSqlStore().getFileMetadataStorage(); private final FileHandler fileHandler = new FileHandler(); @@ -99,7 +99,7 @@ public class MergeFilenamesAndRenameDuplicatesMigration implements Migration { /** * Fetches all fileIds stored in CouchDB */ - private List<String> getAllFileIds(CRUDStorage<FileMetadata> fileMetadataStorage) { + private List<String> getAllFileIds(IFileMetadataStorage fileMetadataStorage) { return fileMetadataStorage.findAll().stream().map(FileMetadata::getFileId) .toList(); } diff --git a/streampipes-storage-api/src/main/java/org/apache/streampipes/storage/api/IFileMetadataStorage.java b/streampipes-storage-api/src/main/java/org/apache/streampipes/storage/api/IFileMetadataStorage.java new file mode 100644 index 0000000000..378b90861b --- /dev/null +++ b/streampipes-storage-api/src/main/java/org/apache/streampipes/storage/api/IFileMetadataStorage.java @@ -0,0 +1,23 @@ +/* + * 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.storage.api; + +import org.apache.streampipes.model.file.FileMetadata; + +public interface IFileMetadataStorage extends CRUDStorage<FileMetadata> { +} diff --git a/streampipes-storage-api/src/main/java/org/apache/streampipes/storage/api/INoSqlStorage.java b/streampipes-storage-api/src/main/java/org/apache/streampipes/storage/api/INoSqlStorage.java index 309f4e02d6..0250c553e9 100644 --- a/streampipes-storage-api/src/main/java/org/apache/streampipes/storage/api/INoSqlStorage.java +++ b/streampipes-storage-api/src/main/java/org/apache/streampipes/storage/api/INoSqlStorage.java @@ -27,7 +27,6 @@ import org.apache.streampipes.model.dashboard.DashboardModel; import org.apache.streampipes.model.datalake.DataExplorerWidgetModel; import org.apache.streampipes.model.extensions.configuration.SpServiceConfiguration; import org.apache.streampipes.model.extensions.svcdiscovery.SpServiceRegistration; -import org.apache.streampipes.model.file.FileMetadata; import org.apache.streampipes.model.opcua.Certificate; import org.apache.streampipes.model.template.CompactPipelineTemplate; @@ -51,7 +50,7 @@ public interface INoSqlStorage { IDataLakeMeasureStorage getDataLakeStorage(); - CRUDStorage<FileMetadata> getFileMetadataStorage(); + IFileMetadataStorage getFileMetadataStorage(); CRUDStorage<DashboardModel> getDataExplorerDashboardStorage(); diff --git a/streampipes-storage-couchdb/src/main/java/org/apache/streampipes/storage/couchdb/CouchDbStorageManager.java b/streampipes-storage-couchdb/src/main/java/org/apache/streampipes/storage/couchdb/CouchDbStorageManager.java index a453802fc5..0e42a329ca 100644 --- a/streampipes-storage-couchdb/src/main/java/org/apache/streampipes/storage/couchdb/CouchDbStorageManager.java +++ b/streampipes-storage-couchdb/src/main/java/org/apache/streampipes/storage/couchdb/CouchDbStorageManager.java @@ -28,7 +28,6 @@ import org.apache.streampipes.model.datalake.DataExplorerWidgetModel; import org.apache.streampipes.model.datalake.DataLakeMeasure; import org.apache.streampipes.model.extensions.configuration.SpServiceConfiguration; import org.apache.streampipes.model.extensions.svcdiscovery.SpServiceRegistration; -import org.apache.streampipes.model.file.FileMetadata; import org.apache.streampipes.model.opcua.Certificate; import org.apache.streampipes.model.template.CompactPipelineTemplate; import org.apache.streampipes.storage.api.CRUDStorage; @@ -37,6 +36,7 @@ import org.apache.streampipes.storage.api.IDataLakeMeasureStorage; import org.apache.streampipes.storage.api.IDataProcessorStorage; import org.apache.streampipes.storage.api.IDataSinkStorage; import org.apache.streampipes.storage.api.IDataStreamStorage; +import org.apache.streampipes.storage.api.IFileMetadataStorage; import org.apache.streampipes.storage.api.IGenericStorage; import org.apache.streampipes.storage.api.IImageStorage; import org.apache.streampipes.storage.api.INoSqlStorage; @@ -59,6 +59,7 @@ import org.apache.streampipes.storage.couchdb.impl.DataStreamStorageImpl; import org.apache.streampipes.storage.couchdb.impl.DefaultCrudStorage; import org.apache.streampipes.storage.couchdb.impl.DefaultViewCrudStorage; import org.apache.streampipes.storage.couchdb.impl.GenericStorageImpl; +import org.apache.streampipes.storage.couchdb.impl.FileMetadataStorageImpl; import org.apache.streampipes.storage.couchdb.impl.ImageStorageImpl; import org.apache.streampipes.storage.couchdb.impl.NotificationStorageImpl; import org.apache.streampipes.storage.couchdb.impl.PermissionStorageImpl; @@ -121,11 +122,8 @@ public class CouchDbStorageManager implements INoSqlStorage { } @Override - public CRUDStorage<FileMetadata> getFileMetadataStorage() { - return new DefaultCrudStorage<>( - () -> Utils.getCouchDbGsonClient("filemetadata"), - FileMetadata.class - ); + public IFileMetadataStorage getFileMetadataStorage() { + return new FileMetadataStorageImpl(); } @Override diff --git a/streampipes-storage-couchdb/src/main/java/org/apache/streampipes/storage/couchdb/impl/FileMetadataStorageImpl.java b/streampipes-storage-couchdb/src/main/java/org/apache/streampipes/storage/couchdb/impl/FileMetadataStorageImpl.java new file mode 100644 index 0000000000..68e2c68e09 --- /dev/null +++ b/streampipes-storage-couchdb/src/main/java/org/apache/streampipes/storage/couchdb/impl/FileMetadataStorageImpl.java @@ -0,0 +1,32 @@ +/* + * 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.storage.couchdb.impl; + +import org.apache.streampipes.model.file.FileMetadata; +import org.apache.streampipes.storage.api.IFileMetadataStorage; +import org.apache.streampipes.storage.couchdb.utils.Utils; + +public class FileMetadataStorageImpl extends DefaultCrudStorage<FileMetadata> implements IFileMetadataStorage { + + public FileMetadataStorageImpl() { + super( + () -> Utils.getCouchDbGsonClient("filemetadata"), + FileMetadata.class + ); + } +}
