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 bf5f33fb78271e8ef153b5ad82e09626f7d0fc37
Author: Philipp Zehnder <[email protected]>
AuthorDate: Thu Feb 12 21:45:25 2026 +0100

    refactor(#4172): introduce ICertificateStorage and migrate 
getCertificateStorage to typed interface
---
 .../management/AdapterResourceManager.java         |  6 ++--
 .../rest/impl/admin/CertificateResource.java       |  4 +--
 .../ComputeCertificateThumbprintMigration.java     |  4 +--
 .../certificates/ExpiringCertificateFinder.java    |  6 ++--
 .../ExpiringCertificateFinderTest.java             |  8 +++---
 .../storage/api/ICertificateStorage.java           | 23 ++++++++++++++++
 .../streampipes/storage/api/INoSqlStorage.java     |  3 +-
 .../storage/couchdb/CouchDbStorageManager.java     | 10 +++----
 .../couchdb/impl/CertificateStorageImpl.java       | 32 ++++++++++++++++++++++
 9 files changed, 74 insertions(+), 22 deletions(-)

diff --git 
a/streampipes-resource-management/src/main/java/org/apache/streampipes/resource/management/AdapterResourceManager.java
 
b/streampipes-resource-management/src/main/java/org/apache/streampipes/resource/management/AdapterResourceManager.java
index f9f99d4a9d..6b60b6e2f8 100644
--- 
a/streampipes-resource-management/src/main/java/org/apache/streampipes/resource/management/AdapterResourceManager.java
+++ 
b/streampipes-resource-management/src/main/java/org/apache/streampipes/resource/management/AdapterResourceManager.java
@@ -22,16 +22,16 @@ import 
org.apache.streampipes.model.connect.adapter.AdapterDescription;
 import org.apache.streampipes.model.opcua.Certificate;
 import org.apache.streampipes.model.util.Cloner;
 import org.apache.streampipes.resource.management.secret.SecretProvider;
-import org.apache.streampipes.storage.api.CRUDStorage;
 import org.apache.streampipes.storage.api.IAdapterStorage;
+import org.apache.streampipes.storage.api.ICertificateStorage;
 import org.apache.streampipes.storage.management.StorageDispatcher;
 
 public class AdapterResourceManager extends 
AbstractResourceManager<IAdapterStorage> {
 
-  private final CRUDStorage<Certificate> certificateStorage;
+  private final ICertificateStorage certificateStorage;
 
   public AdapterResourceManager(IAdapterStorage adapterStorage,
-                                CRUDStorage<Certificate> certificateStorage) {
+                                ICertificateStorage certificateStorage) {
     super(adapterStorage);
     this.certificateStorage = certificateStorage;
   }
diff --git 
a/streampipes-rest/src/main/java/org/apache/streampipes/rest/impl/admin/CertificateResource.java
 
b/streampipes-rest/src/main/java/org/apache/streampipes/rest/impl/admin/CertificateResource.java
index d39c172afc..dc7f66da26 100644
--- 
a/streampipes-rest/src/main/java/org/apache/streampipes/rest/impl/admin/CertificateResource.java
+++ 
b/streampipes-rest/src/main/java/org/apache/streampipes/rest/impl/admin/CertificateResource.java
@@ -23,7 +23,7 @@ import org.apache.streampipes.model.opcua.CertificateState;
 import org.apache.streampipes.model.opcua.CertificateUsage;
 import 
org.apache.streampipes.rest.core.base.impl.AbstractAuthGuardedRestResource;
 import org.apache.streampipes.rest.security.AuthConstants;
-import org.apache.streampipes.storage.api.CRUDStorage;
+import org.apache.streampipes.storage.api.ICertificateStorage;
 import org.apache.streampipes.storage.management.StorageDispatcher;
 
 import org.slf4j.Logger;
@@ -49,7 +49,7 @@ public class CertificateResource extends 
AbstractAuthGuardedRestResource {
 
   private static final Logger LOG = 
LoggerFactory.getLogger(CertificateResource.class);
 
-  private final CRUDStorage<Certificate> certificateStorage = StorageDispatcher
+  private final ICertificateStorage certificateStorage = StorageDispatcher
       .INSTANCE.getNoSqlStore().getCertificateStorage();
 
   @GetMapping(produces = MediaType.APPLICATION_JSON_VALUE)
diff --git 
a/streampipes-service-core/src/main/java/org/apache/streampipes/service/core/migrations/v099/ComputeCertificateThumbprintMigration.java
 
b/streampipes-service-core/src/main/java/org/apache/streampipes/service/core/migrations/v099/ComputeCertificateThumbprintMigration.java
index 625c843eb7..abc786e07b 100644
--- 
a/streampipes-service-core/src/main/java/org/apache/streampipes/service/core/migrations/v099/ComputeCertificateThumbprintMigration.java
+++ 
b/streampipes-service-core/src/main/java/org/apache/streampipes/service/core/migrations/v099/ComputeCertificateThumbprintMigration.java
@@ -21,7 +21,7 @@ package org.apache.streampipes.service.core.migrations.v099;
 import org.apache.streampipes.model.opcua.Certificate;
 import org.apache.streampipes.model.opcua.CertificateUtils;
 import org.apache.streampipes.service.core.migrations.Migration;
-import org.apache.streampipes.storage.api.CRUDStorage;
+import org.apache.streampipes.storage.api.ICertificateStorage;
 import org.apache.streampipes.storage.management.StorageDispatcher;
 
 import org.slf4j.Logger;
@@ -35,7 +35,7 @@ public class ComputeCertificateThumbprintMigration implements 
Migration {
 
   private static final Logger LOG = 
LoggerFactory.getLogger(ComputeCertificateThumbprintMigration.class);
 
-  private CRUDStorage<Certificate> certificateStorage =
+  private ICertificateStorage certificateStorage =
       StorageDispatcher.INSTANCE.getNoSqlStore().getCertificateStorage();
 
   @Override
diff --git 
a/streampipes-service-core/src/main/java/org/apache/streampipes/service/core/scheduler/certificates/ExpiringCertificateFinder.java
 
b/streampipes-service-core/src/main/java/org/apache/streampipes/service/core/scheduler/certificates/ExpiringCertificateFinder.java
index 54b5131e03..d7eead17cb 100644
--- 
a/streampipes-service-core/src/main/java/org/apache/streampipes/service/core/scheduler/certificates/ExpiringCertificateFinder.java
+++ 
b/streampipes-service-core/src/main/java/org/apache/streampipes/service/core/scheduler/certificates/ExpiringCertificateFinder.java
@@ -19,7 +19,7 @@
 package org.apache.streampipes.service.core.scheduler.certificates;
 
 import org.apache.streampipes.model.opcua.Certificate;
-import org.apache.streampipes.storage.api.CRUDStorage;
+import org.apache.streampipes.storage.api.ICertificateStorage;
 import org.apache.streampipes.storage.management.StorageDispatcher;
 
 import org.slf4j.Logger;
@@ -45,10 +45,10 @@ public class ExpiringCertificateFinder {
   private static final DateTimeFormatter NOT_AFTER_FORMATTER =
       DateTimeFormatter.ofPattern("EEE MMM dd HH:mm:ss zzz yyyy", 
Locale.ENGLISH);
 
-  private final CRUDStorage<Certificate> certificateStorage;
+  private final ICertificateStorage certificateStorage;
   private final Clock clock;
 
-  public ExpiringCertificateFinder(CRUDStorage<Certificate> 
certificateStorage, Clock clock) {
+  public ExpiringCertificateFinder(ICertificateStorage certificateStorage, 
Clock clock) {
     this.certificateStorage = certificateStorage;
     this.clock = clock;
   }
diff --git 
a/streampipes-service-core/src/test/java/org/apache/streampipes/service/core/scheduler/certificates/ExpiringCertificateFinderTest.java
 
b/streampipes-service-core/src/test/java/org/apache/streampipes/service/core/scheduler/certificates/ExpiringCertificateFinderTest.java
index bcfe0e513b..36a969348a 100644
--- 
a/streampipes-service-core/src/test/java/org/apache/streampipes/service/core/scheduler/certificates/ExpiringCertificateFinderTest.java
+++ 
b/streampipes-service-core/src/test/java/org/apache/streampipes/service/core/scheduler/certificates/ExpiringCertificateFinderTest.java
@@ -21,7 +21,7 @@ package 
org.apache.streampipes.service.core.scheduler.certificates;
 
 import org.apache.streampipes.model.opcua.Certificate;
 import org.apache.streampipes.model.opcua.CertificateBuilder;
-import org.apache.streampipes.storage.api.CRUDStorage;
+import org.apache.streampipes.storage.api.ICertificateStorage;
 
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
@@ -40,14 +40,14 @@ import static org.mockito.Mockito.when;
 
 class ExpiringCertificateFinderTest {
 
-  private CRUDStorage<Certificate> storage;
+  private ICertificateStorage storage;
 
   private static final Instant FIXED_NOW = 
Instant.parse("2026-01-10T12:00:00Z");
   private Clock clock;
 
   @BeforeEach
   void setUp() {
-    storage = mock(CRUDStorage.class);
+    storage = mock(ICertificateStorage.class);
     clock = Clock.fixed(FIXED_NOW, ZoneOffset.UTC);
   }
 
@@ -133,4 +133,4 @@ class ExpiringCertificateFinderTest {
                              .build();
   }
 
-}
\ No newline at end of file
+}
diff --git 
a/streampipes-storage-api/src/main/java/org/apache/streampipes/storage/api/ICertificateStorage.java
 
b/streampipes-storage-api/src/main/java/org/apache/streampipes/storage/api/ICertificateStorage.java
new file mode 100644
index 0000000000..958158d904
--- /dev/null
+++ 
b/streampipes-storage-api/src/main/java/org/apache/streampipes/storage/api/ICertificateStorage.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.opcua.Certificate;
+
+public interface ICertificateStorage extends CRUDStorage<Certificate> {
+}
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 394977598f..5056a0fe11 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
@@ -19,7 +19,6 @@ package org.apache.streampipes.storage.api;
 
 import org.apache.streampipes.model.assets.SpAssetModel;
 import 
org.apache.streampipes.model.connect.ConnectTransformationScriptTemplate;
-import org.apache.streampipes.model.opcua.Certificate;
 
 public interface INoSqlStorage {
 
@@ -77,7 +76,7 @@ public interface INoSqlStorage {
 
   ICompactPipelineTemplateStorage getPipelineTemplateStorage();
 
-  CRUDStorage<Certificate> getCertificateStorage();
+  ICertificateStorage getCertificateStorage();
 
   CRUDStorage<SpAssetModel> getAssetStorage();
 
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 b8a5f5e2d7..84c3e14109 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
@@ -20,9 +20,9 @@ package org.apache.streampipes.storage.couchdb;
 import org.apache.streampipes.model.assets.SpAssetModel;
 import 
org.apache.streampipes.model.connect.ConnectTransformationScriptTemplate;
 import org.apache.streampipes.model.datalake.DataLakeMeasure;
-import org.apache.streampipes.model.opcua.Certificate;
 import org.apache.streampipes.storage.api.CRUDStorage;
 import org.apache.streampipes.storage.api.IAdapterStorage;
+import org.apache.streampipes.storage.api.ICertificateStorage;
 import org.apache.streampipes.storage.api.ICompactPipelineTemplateStorage;
 import org.apache.streampipes.storage.api.IDataLakeMeasureStorage;
 import org.apache.streampipes.storage.api.IDataExplorerDashboardStorage;
@@ -51,6 +51,7 @@ import org.apache.streampipes.storage.api.IUserGroupStorage;
 import org.apache.streampipes.storage.api.IUserStorage;
 import 
org.apache.streampipes.storage.couchdb.impl.AdapterDescriptionStorageImpl;
 import org.apache.streampipes.storage.couchdb.impl.AdapterInstanceStorageImpl;
+import org.apache.streampipes.storage.couchdb.impl.CertificateStorageImpl;
 import 
org.apache.streampipes.storage.couchdb.impl.CoreConfigurationStorageImpl;
 import 
org.apache.streampipes.storage.couchdb.impl.CompactPipelineTemplateStorageImpl;
 import org.apache.streampipes.storage.couchdb.impl.DataLakeMeasureStorage;
@@ -221,11 +222,8 @@ public class CouchDbStorageManager implements 
INoSqlStorage {
   }
 
   @Override
-  public CRUDStorage<Certificate> getCertificateStorage() {
-    return new DefaultCrudStorage<>(
-        () -> Utils.getCouchDbGsonClient("certificates"),
-        Certificate.class
-    );
+  public ICertificateStorage getCertificateStorage() {
+    return new CertificateStorageImpl();
   }
 
   @Override
diff --git 
a/streampipes-storage-couchdb/src/main/java/org/apache/streampipes/storage/couchdb/impl/CertificateStorageImpl.java
 
b/streampipes-storage-couchdb/src/main/java/org/apache/streampipes/storage/couchdb/impl/CertificateStorageImpl.java
new file mode 100644
index 0000000000..c08e7bef65
--- /dev/null
+++ 
b/streampipes-storage-couchdb/src/main/java/org/apache/streampipes/storage/couchdb/impl/CertificateStorageImpl.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.opcua.Certificate;
+import org.apache.streampipes.storage.api.ICertificateStorage;
+import org.apache.streampipes.storage.couchdb.utils.Utils;
+
+public class CertificateStorageImpl extends DefaultCrudStorage<Certificate> 
implements ICertificateStorage {
+
+  public CertificateStorageImpl() {
+    super(
+        () -> Utils.getCouchDbGsonClient("certificates"),
+        Certificate.class
+    );
+  }
+}

Reply via email to