From 33bc30667dd3b469ce84425ebcff87416c09fc18 Mon Sep 17 00:00:00 2001
From: Brendan Le Ny <bleny@codelutin.com>
Date: Wed, 12 Jun 2024 15:20:26 +0200
Subject: [PATCH] Use switch statements

---
 .../scim/event/ScimEventListenerProvider.java | 132 ++++++++++--------
 1 file changed, 71 insertions(+), 61 deletions(-)

diff --git a/src/main/java/sh/libre/scim/event/ScimEventListenerProvider.java b/src/main/java/sh/libre/scim/event/ScimEventListenerProvider.java
index 7597bdf..7e8f9ec 100644
--- a/src/main/java/sh/libre/scim/event/ScimEventListenerProvider.java
+++ b/src/main/java/sh/libre/scim/event/ScimEventListenerProvider.java
@@ -45,16 +45,20 @@ public class ScimEventListenerProvider implements EventListenerProvider {
 
     @Override
     public void onEvent(Event event) {
-        if (event.getType() == EventType.REGISTER) {
-            var user = getUser(event.getUserId());
-            dispatcher.run(ScimDispatcher.SCOPE_USER, (client) -> client.create(UserAdapter.class, user));
-        }
-        if (event.getType() == EventType.UPDATE_EMAIL || event.getType() == EventType.UPDATE_PROFILE) {
-            var user = getUser(event.getUserId());
-            dispatcher.run(ScimDispatcher.SCOPE_USER, (client) -> client.replace(UserAdapter.class, user));
-        }
-        if (event.getType() == EventType.DELETE_ACCOUNT) {
-            dispatcher.run(ScimDispatcher.SCOPE_USER, (client) -> client.delete(UserAdapter.class, event.getUserId()));
+        EventType eventType = event.getType();
+        String eventUserId = event.getUserId();
+        switch (eventType) {
+            case REGISTER -> {
+                var user = getUser(eventUserId);
+                dispatcher.run(ScimDispatcher.SCOPE_USER, (client) -> client.create(UserAdapter.class, user));
+            }
+            case UPDATE_EMAIL, UPDATE_PROFILE -> {
+                var user = getUser(eventUserId);
+                dispatcher.run(ScimDispatcher.SCOPE_USER, (client) -> client.replace(UserAdapter.class, user));
+            }
+            case DELETE_ACCOUNT ->
+                    dispatcher.run(ScimDispatcher.SCOPE_USER, (client) -> client.delete(UserAdapter.class, eventUserId));
+            default -> LOGGER.trace("ignore event " + eventType);
         }
     }
 
@@ -66,61 +70,67 @@ public class ScimEventListenerProvider implements EventListenerProvider {
         var matcher = pattern.matcher(event.getResourcePath());
         if (!matcher.find())
             return;
-        if (event.getResourceType() == ResourceType.USER) {
-            var userId = matcher.group(1);
-            LOGGER.infof("%s %s", userId, event.getOperationType());
-            if (event.getOperationType() == OperationType.CREATE) {
-                var user = getUser(userId);
-                dispatcher.run(ScimDispatcher.SCOPE_USER, (client) -> client.create(UserAdapter.class, user));
-                user.getGroupsStream().forEach(group -> {
-                    dispatcher.run(ScimDispatcher.SCOPE_GROUP, (client) -> client.replace(GroupAdapter.class, group));
-                });
-            }
-            if (event.getOperationType() == OperationType.UPDATE) {
-                var user = getUser(userId);
-                dispatcher.run(ScimDispatcher.SCOPE_USER, (client) -> client.replace(UserAdapter.class, user));
+        switch (event.getResourceType()) {
+            case USER -> {
+                var userId = matcher.group(1);
+                LOGGER.infof("%s %s", userId, event.getOperationType());
+                switch (event.getOperationType()) {
+                    case CREATE -> {
+                        var user = getUser(userId);
+                        dispatcher.run(ScimDispatcher.SCOPE_USER, (client) -> client.create(UserAdapter.class, user));
+                        user.getGroupsStream().forEach(group -> {
+                            dispatcher.run(ScimDispatcher.SCOPE_GROUP, (client) -> client.replace(GroupAdapter.class, group));
+                        });
+                    }
+                    case UPDATE -> {
+                        var user = getUser(userId);
+                        dispatcher.run(ScimDispatcher.SCOPE_USER, (client) -> client.replace(UserAdapter.class, user));
+                    }
+                    case DELETE ->
+                            dispatcher.run(ScimDispatcher.SCOPE_USER, (client) -> client.delete(UserAdapter.class, userId));
+                }
             }
-            if (event.getOperationType() == OperationType.DELETE) {
-                dispatcher.run(ScimDispatcher.SCOPE_USER, (client) -> client.delete(UserAdapter.class, userId));
+            case GROUP -> {
+                var groupId = matcher.group(1);
+                LOGGER.infof("group %s %s", groupId, event.getOperationType());
+                switch (event.getOperationType()) {
+                    case CREATE -> {
+                        var group = getGroup(groupId);
+                        dispatcher.run(ScimDispatcher.SCOPE_GROUP, (client) -> client.create(GroupAdapter.class, group));
+                    }
+                    case UPDATE -> {
+                        var group = getGroup(groupId);
+                        dispatcher.run(ScimDispatcher.SCOPE_GROUP, (client) -> client.replace(GroupAdapter.class, group));
+                    }
+                    case DELETE -> dispatcher.run(ScimDispatcher.SCOPE_GROUP,
+                            (client) -> client.delete(GroupAdapter.class, groupId));
+                }
             }
-        }
-        if (event.getResourceType() == ResourceType.GROUP) {
-            var groupId = matcher.group(1);
-            LOGGER.infof("group %s %s", groupId, event.getOperationType());
-            if (event.getOperationType() == OperationType.CREATE) {
+            case GROUP_MEMBERSHIP -> {
+                var userId = matcher.group(1);
+                var groupId = matcher.group(2);
+                LOGGER.infof("%s %s from %s", event.getOperationType(), userId, groupId);
                 var group = getGroup(groupId);
-                dispatcher.run(ScimDispatcher.SCOPE_GROUP, (client) -> client.create(GroupAdapter.class, group));
-            }
-            if (event.getOperationType() == OperationType.UPDATE) {
-                var group = getGroup(groupId);
-                dispatcher.run(ScimDispatcher.SCOPE_GROUP, (client) -> client.replace(GroupAdapter.class, group));
-            }
-            if (event.getOperationType() == OperationType.DELETE) {
-                dispatcher.run(ScimDispatcher.SCOPE_GROUP,
-                        (client) -> client.delete(GroupAdapter.class, groupId));
-            }
-        }
-        if (event.getResourceType() == ResourceType.GROUP_MEMBERSHIP) {
-            var userId = matcher.group(1);
-            var groupId = matcher.group(2);
-            LOGGER.infof("%s %s from %s", event.getOperationType(), userId, groupId);
-            var group = getGroup(groupId);
-            group.setSingleAttribute("scim-dirty", BooleanUtils.TRUE);
-            var user = getUser(userId);
-            dispatcher.run(ScimDispatcher.SCOPE_USER, (client) -> client.replace(UserAdapter.class, user));
-        }
-        if (event.getResourceType() == ResourceType.REALM_ROLE_MAPPING) {
-            var type = matcher.group(1);
-            var id = matcher.group(2);
-            LOGGER.infof("%s %s %s roles", event.getOperationType(), type, id);
-            if (StringUtils.equals(type, "users")) {
-                var user = getUser(id);
+                group.setSingleAttribute("scim-dirty", BooleanUtils.TRUE);
+                var user = getUser(userId);
                 dispatcher.run(ScimDispatcher.SCOPE_USER, (client) -> client.replace(UserAdapter.class, user));
-            } else if (StringUtils.equals(type, "groups")) {
-                var group = getGroup(id);
-                session.users().getGroupMembersStream(session.getContext().getRealm(), group).forEach(user -> {
-                    dispatcher.run(ScimDispatcher.SCOPE_USER, (client) -> client.replace(UserAdapter.class, user));
-                });
+            }
+            case REALM_ROLE_MAPPING -> {
+                var type = matcher.group(1);
+                var id = matcher.group(2);
+                LOGGER.infof("%s %s %s roles", event.getOperationType(), type, id);
+                switch (type) {
+                    case "users" -> {
+                        var user = getUser(id);
+                        dispatcher.run(ScimDispatcher.SCOPE_USER, (client) -> client.replace(UserAdapter.class, user));
+                    }
+                    case "groups" -> {
+                        var group = getGroup(id);
+                        session.users().getGroupMembersStream(session.getContext().getRealm(), group).forEach(user -> {
+                            dispatcher.run(ScimDispatcher.SCOPE_USER, (client) -> client.replace(UserAdapter.class, user));
+                        });
+                    }
+                }
             }
         }
     }
-- 
GitLab