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
+    );
+  }
+}

Reply via email to