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

    refactor(#4172): introduce IRoleStorage and migrate getRoleStorage to typed 
interface
---
 .../tasks/ApplyDefaultRolesAndPrivilegesTask.java  |  3 +-
 .../service/core/oauth2/UserService.java           | 16 +++++------
 .../streampipes/storage/api/INoSqlStorage.java     |  3 +-
 .../streampipes/storage/api/IRoleStorage.java      | 23 +++++++++++++++
 .../storage/couchdb/CouchDbStorageManager.java     |  7 +++--
 .../storage/couchdb/impl/RoleStorageImpl.java      | 33 ++++++++++++++++++++++
 .../user/management/authorization/RoleManager.java |  4 +--
 7 files changed, 73 insertions(+), 16 deletions(-)

diff --git 
a/streampipes-pipeline-management/src/main/java/org/apache/streampipes/manager/setup/tasks/ApplyDefaultRolesAndPrivilegesTask.java
 
b/streampipes-pipeline-management/src/main/java/org/apache/streampipes/manager/setup/tasks/ApplyDefaultRolesAndPrivilegesTask.java
index f3d346aa6c..58beb87bc4 100644
--- 
a/streampipes-pipeline-management/src/main/java/org/apache/streampipes/manager/setup/tasks/ApplyDefaultRolesAndPrivilegesTask.java
+++ 
b/streampipes-pipeline-management/src/main/java/org/apache/streampipes/manager/setup/tasks/ApplyDefaultRolesAndPrivilegesTask.java
@@ -22,6 +22,7 @@ import org.apache.streampipes.model.client.user.Privilege;
 import org.apache.streampipes.model.client.user.Role;
 import org.apache.streampipes.model.shared.api.Storable;
 import org.apache.streampipes.storage.api.CRUDStorage;
+import org.apache.streampipes.storage.api.IRoleStorage;
 import org.apache.streampipes.storage.management.StorageDispatcher;
 import org.apache.streampipes.user.management.authorization.PrivilegeManager;
 import org.apache.streampipes.user.management.authorization.RoleManager;
@@ -35,7 +36,7 @@ public class ApplyDefaultRolesAndPrivilegesTask implements 
InstallationTask {
 
   private static final Logger LOG = 
LoggerFactory.getLogger(ApplyDefaultRolesAndPrivilegesTask.class);
 
-  private final CRUDStorage<Role> roleStorage;
+  private final IRoleStorage roleStorage;
   private final CRUDStorage<Privilege> privilegeStorage;
 
   public ApplyDefaultRolesAndPrivilegesTask() {
diff --git 
a/streampipes-service-core/src/main/java/org/apache/streampipes/service/core/oauth2/UserService.java
 
b/streampipes-service-core/src/main/java/org/apache/streampipes/service/core/oauth2/UserService.java
index cda9f0c054..e87c248e62 100755
--- 
a/streampipes-service-core/src/main/java/org/apache/streampipes/service/core/oauth2/UserService.java
+++ 
b/streampipes-service-core/src/main/java/org/apache/streampipes/service/core/oauth2/UserService.java
@@ -21,12 +21,12 @@ package org.apache.streampipes.service.core.oauth2;
 import org.apache.streampipes.commons.environment.Environment;
 import org.apache.streampipes.commons.environment.Environments;
 import org.apache.streampipes.commons.environment.model.OAuthConfiguration;
-import org.apache.streampipes.model.client.user.Group;
-import org.apache.streampipes.model.client.user.Role;
-import org.apache.streampipes.model.client.user.UserAccount;
+import org.apache.streampipes.model.client.user.Group;
+import org.apache.streampipes.model.client.user.Role;
+import org.apache.streampipes.model.client.user.UserAccount;
 import org.apache.streampipes.resource.management.UserResourceManager;
 import 
org.apache.streampipes.rest.security.OAuth2AuthenticationProcessingException;
-import org.apache.streampipes.storage.api.CRUDStorage;
+import org.apache.streampipes.storage.api.IRoleStorage;
 import org.apache.streampipes.storage.api.IUserGroupStorage;
 import org.apache.streampipes.storage.api.IUserStorage;
 import org.apache.streampipes.storage.management.StorageDispatcher;
@@ -45,10 +45,10 @@ import java.util.stream.Collectors;
 
 public class UserService {
 
-  private static final Logger LOG = LoggerFactory.getLogger(UserService.class);
-
-  private final IUserStorage userStorage;
-  private final CRUDStorage<Role> roleStorage;
+  private static final Logger LOG = LoggerFactory.getLogger(UserService.class);
+
+  private final IUserStorage userStorage;
+  private final IRoleStorage roleStorage;
   private final IUserGroupStorage groupStorage;
   private final Environment env;
   private List<Role> allRoles;
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 d0a324e067..4a6a76b5cf 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.client.user.Privilege;
-import org.apache.streampipes.model.client.user.Role;
 import 
org.apache.streampipes.model.connect.ConnectTransformationScriptTemplate;
 import org.apache.streampipes.model.opcua.Certificate;
 import org.apache.streampipes.model.template.CompactPipelineTemplate;
@@ -74,7 +73,7 @@ public interface INoSqlStorage {
 
   ISpCoreConfigurationStorage getSpCoreConfigurationStorage();
 
-  CRUDStorage<Role> getRoleStorage();
+  IRoleStorage getRoleStorage();
 
   CRUDStorage<Privilege> getPrivilegeStorage();
 
diff --git 
a/streampipes-storage-api/src/main/java/org/apache/streampipes/storage/api/IRoleStorage.java
 
b/streampipes-storage-api/src/main/java/org/apache/streampipes/storage/api/IRoleStorage.java
new file mode 100644
index 0000000000..ecfeb194e5
--- /dev/null
+++ 
b/streampipes-storage-api/src/main/java/org/apache/streampipes/storage/api/IRoleStorage.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.client.user.Role;
+
+public interface IRoleStorage extends CRUDStorage<Role> {
+}
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 a55b4d6b79..0fcfc67160 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
@@ -19,7 +19,6 @@ package org.apache.streampipes.storage.couchdb;
 
 import org.apache.streampipes.model.assets.SpAssetModel;
 import org.apache.streampipes.model.client.user.Privilege;
-import org.apache.streampipes.model.client.user.Role;
 import 
org.apache.streampipes.model.connect.ConnectTransformationScriptTemplate;
 import org.apache.streampipes.model.datalake.DataLakeMeasure;
 import org.apache.streampipes.model.opcua.Certificate;
@@ -45,6 +44,7 @@ import 
org.apache.streampipes.storage.api.IPipelineCanvasMetadataStorage;
 import org.apache.streampipes.storage.api.IPipelineElementDescriptionStorage;
 import org.apache.streampipes.storage.api.IPipelineElementTemplateStorage;
 import org.apache.streampipes.storage.api.IPipelineStorage;
+import org.apache.streampipes.storage.api.IRoleStorage;
 import org.apache.streampipes.storage.api.ISpCoreConfigurationStorage;
 import org.apache.streampipes.storage.api.IUserActivationTokenStorage;
 import org.apache.streampipes.storage.api.IUserGroupStorage;
@@ -72,6 +72,7 @@ import 
org.apache.streampipes.storage.couchdb.impl.PipelineCanvasMetadataStorage
 import 
org.apache.streampipes.storage.couchdb.impl.PipelineElementDescriptionStorageImpl;
 import 
org.apache.streampipes.storage.couchdb.impl.PipelineElementTemplateStorageImpl;
 import org.apache.streampipes.storage.couchdb.impl.PipelineStorageImpl;
+import org.apache.streampipes.storage.couchdb.impl.RoleStorageImpl;
 import 
org.apache.streampipes.storage.couchdb.impl.UserActivationTokenStorageImpl;
 import org.apache.streampipes.storage.couchdb.impl.UserGroupStorageImpl;
 import org.apache.streampipes.storage.couchdb.impl.UserStorage;
@@ -203,8 +204,8 @@ public class CouchDbStorageManager implements INoSqlStorage 
{
   }
 
   @Override
-  public CRUDStorage<Role> getRoleStorage() {
-    return new DefaultViewCrudStorage<>(Utils::getCouchDbUserClient, 
Role.class, "users/role");
+  public IRoleStorage getRoleStorage() {
+    return new RoleStorageImpl();
   }
 
   @Override
diff --git 
a/streampipes-storage-couchdb/src/main/java/org/apache/streampipes/storage/couchdb/impl/RoleStorageImpl.java
 
b/streampipes-storage-couchdb/src/main/java/org/apache/streampipes/storage/couchdb/impl/RoleStorageImpl.java
new file mode 100644
index 0000000000..358758eb27
--- /dev/null
+++ 
b/streampipes-storage-couchdb/src/main/java/org/apache/streampipes/storage/couchdb/impl/RoleStorageImpl.java
@@ -0,0 +1,33 @@
+/*
+ * 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.client.user.Role;
+import org.apache.streampipes.storage.api.IRoleStorage;
+import org.apache.streampipes.storage.couchdb.utils.Utils;
+
+public class RoleStorageImpl extends DefaultViewCrudStorage<Role> implements 
IRoleStorage {
+
+  public RoleStorageImpl() {
+    super(
+        Utils::getCouchDbUserClient,
+        Role.class,
+        "users/role"
+    );
+  }
+}
diff --git 
a/streampipes-user-management/src/main/java/org/apache/streampipes/user/management/authorization/RoleManager.java
 
b/streampipes-user-management/src/main/java/org/apache/streampipes/user/management/authorization/RoleManager.java
index 5ca24b5223..9414af5d5b 100644
--- 
a/streampipes-user-management/src/main/java/org/apache/streampipes/user/management/authorization/RoleManager.java
+++ 
b/streampipes-user-management/src/main/java/org/apache/streampipes/user/management/authorization/RoleManager.java
@@ -21,7 +21,7 @@ package org.apache.streampipes.user.management.authorization;
 import org.apache.streampipes.model.client.user.DefaultPrivilege;
 import org.apache.streampipes.model.client.user.DefaultRole;
 import org.apache.streampipes.model.client.user.Role;
-import org.apache.streampipes.storage.api.CRUDStorage;
+import org.apache.streampipes.storage.api.IRoleStorage;
 import org.apache.streampipes.storage.management.StorageDispatcher;
 
 import java.util.List;
@@ -30,7 +30,7 @@ import java.util.stream.Stream;
 
 public class RoleManager {
 
-  private final CRUDStorage<Role> storage;
+  private final IRoleStorage storage;
 
   public RoleManager() {
     this.storage = StorageDispatcher.INSTANCE.getNoSqlStore().getRoleStorage();

Reply via email to