You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@syncope.apache.org by il...@apache.org on 2016/03/28 14:14:35 UTC

syncope git commit: Small CLI cleanup

Repository: syncope
Updated Branches:
  refs/heads/master 9f1a67440 -> 0b2757e4a


Small CLI cleanup


Project: http://git-wip-us.apache.org/repos/asf/syncope/repo
Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/0b2757e4
Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/0b2757e4
Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/0b2757e4

Branch: refs/heads/master
Commit: 0b2757e4ad63da84ccadb7c98ea47c824d105b61
Parents: 9f1a674
Author: Francesco Chicchiriccò <il...@apache.org>
Authored: Mon Mar 28 14:12:26 2016 +0200
Committer: Francesco Chicchiriccò <il...@apache.org>
Committed: Mon Mar 28 14:12:26 2016 +0200

----------------------------------------------------------------------
 .../syncope/client/cli/CommandClassScanner.java | 21 +++++++++-
 .../client/cli/ComponentClassScanner.java       | 44 --------------------
 .../org/apache/syncope/client/cli/Input.java    | 26 ++----------
 .../client/cli/commands/AbstractCommand.java    |  2 +-
 .../configuration/ConfigurationUpdate.java      | 19 ++++-----
 .../cli/commands/logger/LoggerCreate.java       | 15 ++++---
 .../cli/commands/logger/LoggerUpdate.java       | 15 ++++---
 .../client/cli/commands/user/UserDeleteAll.java |  2 +-
 .../commands/user/UserDeleteByAttribute.java    | 27 ++++++------
 .../cli/commands/user/UserResultManager.java    |  2 +-
 .../commands/user/UserSearchByAttribute.java    | 21 +++++-----
 11 files changed, 73 insertions(+), 121 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/syncope/blob/0b2757e4/client/cli/src/main/java/org/apache/syncope/client/cli/CommandClassScanner.java
----------------------------------------------------------------------
diff --git a/client/cli/src/main/java/org/apache/syncope/client/cli/CommandClassScanner.java b/client/cli/src/main/java/org/apache/syncope/client/cli/CommandClassScanner.java
index 5b866af..2d6b398 100644
--- a/client/cli/src/main/java/org/apache/syncope/client/cli/CommandClassScanner.java
+++ b/client/cli/src/main/java/org/apache/syncope/client/cli/CommandClassScanner.java
@@ -18,13 +18,30 @@
  */
 package org.apache.syncope.client.cli;
 
+import java.util.ArrayList;
+import java.util.List;
 import org.apache.syncope.client.cli.commands.AbstractCommand;
+import org.springframework.beans.factory.config.BeanDefinition;
+import org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider;
 import org.springframework.core.type.filter.AnnotationTypeFilter;
+import org.springframework.util.ClassUtils;
 
-public class CommandClassScanner extends ComponentClassScanner<AbstractCommand> {
+public class CommandClassScanner extends ClassPathScanningCandidateComponentProvider {
 
     public CommandClassScanner() {
-        super();
+        super(false);
         addIncludeFilter(new AnnotationTypeFilter(Command.class));
     }
+
+    public final List<Class<? extends AbstractCommand>> getComponentClasses() throws IllegalArgumentException {
+        final String basePackage = "org.apache.syncope.client.cli.commands";
+        List<Class<? extends AbstractCommand>> classes = new ArrayList<>();
+        for (final BeanDefinition candidate : findCandidateComponents(basePackage)) {
+            @SuppressWarnings("unchecked")
+            final Class<? extends AbstractCommand> cls = (Class<? extends AbstractCommand>) ClassUtils.resolveClassName(
+                    candidate.getBeanClassName(), ClassUtils.getDefaultClassLoader());
+            classes.add(cls);
+        }
+        return classes;
+    }
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/0b2757e4/client/cli/src/main/java/org/apache/syncope/client/cli/ComponentClassScanner.java
----------------------------------------------------------------------
diff --git a/client/cli/src/main/java/org/apache/syncope/client/cli/ComponentClassScanner.java b/client/cli/src/main/java/org/apache/syncope/client/cli/ComponentClassScanner.java
deleted file mode 100644
index 3081304..0000000
--- a/client/cli/src/main/java/org/apache/syncope/client/cli/ComponentClassScanner.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * 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.syncope.client.cli;
-
-import java.util.ArrayList;
-import java.util.List;
-import org.springframework.beans.factory.config.BeanDefinition;
-import org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider;
-import org.springframework.util.ClassUtils;
-
-public abstract class ComponentClassScanner<T> extends ClassPathScanningCandidateComponentProvider {
-
-    public ComponentClassScanner() {
-        super(false);
-    }
-
-    public final List<Class<? extends T>> getComponentClasses() throws IllegalArgumentException {
-        final String basePackage = "org.apache.syncope.client.cli.commands";
-        List<Class<? extends T>> classes = new ArrayList<>();
-        for (final BeanDefinition candidate : findCandidateComponents(basePackage)) {
-            @SuppressWarnings("unchecked")
-            final Class<? extends T> cls = (Class<? extends T>) ClassUtils.resolveClassName(
-                    candidate.getBeanClassName(), ClassUtils.getDefaultClassLoader());
-            classes.add(cls);
-        }
-        return classes;
-    }
-}

http://git-wip-us.apache.org/repos/asf/syncope/blob/0b2757e4/client/cli/src/main/java/org/apache/syncope/client/cli/Input.java
----------------------------------------------------------------------
diff --git a/client/cli/src/main/java/org/apache/syncope/client/cli/Input.java b/client/cli/src/main/java/org/apache/syncope/client/cli/Input.java
index bc92eef..6721aa5 100644
--- a/client/cli/src/main/java/org/apache/syncope/client/cli/Input.java
+++ b/client/cli/src/main/java/org/apache/syncope/client/cli/Input.java
@@ -21,6 +21,7 @@ package org.apache.syncope.client.cli;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
+import org.apache.commons.lang3.tuple.Pair;
 import org.apache.syncope.client.cli.commands.AbstractCommand;
 import org.apache.syncope.client.cli.util.CommandUtils;
 
@@ -96,12 +97,12 @@ public class Input {
         return parameters.length;
     }
 
-    public PairParameter toPairParameter(final String parameter) throws IllegalArgumentException {
+    public Pair<String, String> toPairParameter(final String parameter) throws IllegalArgumentException {
         if (!parameter.contains("=")) {
             throw new IllegalArgumentException("Parameter syntax error!");
         }
         final String[] pairParameterArray = parameter.split("=");
-        return new PairParameter(pairParameterArray[0], pairParameterArray[1]);
+        return Pair.of(pairParameterArray[0], pairParameterArray[1]);
     }
 
     public String printCommandFields() {
@@ -111,25 +112,4 @@ public class Input {
         }
         return commandBuilder.toString();
     }
-
-    public class PairParameter {
-
-        private final String key;
-
-        private final String value;
-
-        public PairParameter(final String key, final String value) {
-            this.key = key;
-            this.value = value;
-        }
-
-        public String getKey() {
-            return key;
-        }
-
-        public String getValue() {
-            return value;
-        }
-
-    }
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/0b2757e4/client/cli/src/main/java/org/apache/syncope/client/cli/commands/AbstractCommand.java
----------------------------------------------------------------------
diff --git a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/AbstractCommand.java b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/AbstractCommand.java
index 6a03556..7d9d541 100644
--- a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/AbstractCommand.java
+++ b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/AbstractCommand.java
@@ -22,7 +22,7 @@ import org.apache.syncope.client.cli.Input;
 
 public abstract class AbstractCommand {
 
-    public abstract void execute(final Input input);
+    public abstract void execute(Input input);
 
     public abstract String getHelpMessage();
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/0b2757e4/client/cli/src/main/java/org/apache/syncope/client/cli/commands/configuration/ConfigurationUpdate.java
----------------------------------------------------------------------
diff --git a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/configuration/ConfigurationUpdate.java b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/configuration/ConfigurationUpdate.java
index 4ec152c..4ddd050 100644
--- a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/configuration/ConfigurationUpdate.java
+++ b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/configuration/ConfigurationUpdate.java
@@ -20,6 +20,7 @@ package org.apache.syncope.client.cli.commands.configuration;
 
 import java.util.LinkedList;
 import javax.xml.ws.WebServiceException;
+import org.apache.commons.lang3.tuple.Pair;
 import org.apache.syncope.client.cli.Input;
 import org.apache.syncope.common.lib.SyncopeClientException;
 import org.apache.syncope.common.lib.to.AttrTO;
@@ -30,8 +31,8 @@ public class ConfigurationUpdate extends AbstractConfigurationCommand {
 
     private static final Logger LOG = LoggerFactory.getLogger(ConfigurationUpdate.class);
 
-    private static final String UPDATE_HELP_MESSAGE
-            = "configuration --update {CONF-NAME}={CONF-VALUE} {CONF-NAME}={CONF-VALUE} [...]";
+    private static final String UPDATE_HELP_MESSAGE =
+            "configuration --update {CONF-NAME}={CONF-VALUE} {CONF-NAME}={CONF-VALUE} [...]";
 
     private final Input input;
 
@@ -41,25 +42,23 @@ public class ConfigurationUpdate extends AbstractConfigurationCommand {
 
     public void update() {
         if (input.parameterNumber() >= 1) {
-            Input.PairParameter pairParameter = null;
-            AttrTO attrTO;
-            final LinkedList<AttrTO> attrList = new LinkedList<>();
+            LinkedList<AttrTO> attrList = new LinkedList<>();
             boolean failed = false;
-            for (final String parameter : input.getParameters()) {
+            for (String parameter : input.getParameters()) {
+                Pair<String, String> pairParameter = input.toPairParameter(parameter);
                 try {
-                    pairParameter = input.toPairParameter(parameter);
-                    attrTO = configurationSyncopeOperations.get(pairParameter.getKey());
+                    AttrTO attrTO = configurationSyncopeOperations.get(pairParameter.getKey());
                     attrTO.getValues().clear();
                     attrTO.getValues().add(pairParameter.getValue());
                     configurationSyncopeOperations.set(attrTO);
                     attrList.add(attrTO);
-                } catch (final IllegalArgumentException ex) {
+                } catch (IllegalArgumentException ex) {
                     LOG.error("Error updating configuration", ex);
                     configurationResultManager.genericError(ex.getMessage());
                     configurationResultManager.genericError(UPDATE_HELP_MESSAGE);
                     failed = true;
                     break;
-                } catch (final SyncopeClientException | WebServiceException ex) {
+                } catch (SyncopeClientException | WebServiceException ex) {
                     LOG.error("Error updating configuration", ex);
                     if (ex.getMessage().startsWith("NotFound")) {
                         configurationResultManager.notFoundError("Configuration", pairParameter.getKey());

http://git-wip-us.apache.org/repos/asf/syncope/blob/0b2757e4/client/cli/src/main/java/org/apache/syncope/client/cli/commands/logger/LoggerCreate.java
----------------------------------------------------------------------
diff --git a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/logger/LoggerCreate.java b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/logger/LoggerCreate.java
index 1ba755e..401a928 100644
--- a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/logger/LoggerCreate.java
+++ b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/logger/LoggerCreate.java
@@ -20,6 +20,7 @@ package org.apache.syncope.client.cli.commands.logger;
 
 import java.util.LinkedList;
 import javax.xml.ws.WebServiceException;
+import org.apache.commons.lang3.tuple.Pair;
 import org.apache.syncope.client.cli.Input;
 import org.apache.syncope.client.cli.util.CommandUtils;
 import org.apache.syncope.common.lib.SyncopeClientException;
@@ -32,8 +33,8 @@ public class LoggerCreate extends AbstractLoggerCommand {
 
     private static final Logger LOG = LoggerFactory.getLogger(LoggerCreate.class);
 
-    private static final String CREATE_HELP_MESSAGE
-            = "logger --create {LOG-NAME}={LOG-LEVEL} {LOG-NAME}={LOG-LEVEL} [...]";
+    private static final String CREATE_HELP_MESSAGE =
+            "logger --create {LOG-NAME}={LOG-LEVEL} {LOG-NAME}={LOG-LEVEL} [...]";
 
     private final Input input;
 
@@ -43,19 +44,17 @@ public class LoggerCreate extends AbstractLoggerCommand {
 
     public void create() {
         if (input.parameterNumber() >= 1) {
-            Input.PairParameter pairParameter;
-            LoggerTO loggerTO;
             final LinkedList<LoggerTO> loggerTOs = new LinkedList<>();
             boolean failed = false;
-            for (final String parameter : input.getParameters()) {
-                loggerTO = new LoggerTO();
+            for (String parameter : input.getParameters()) {
+                LoggerTO loggerTO = new LoggerTO();
+                Pair<String, String> pairParameter = input.toPairParameter(parameter);
                 try {
-                    pairParameter = input.toPairParameter(parameter);
                     loggerTO.setKey(pairParameter.getKey());
                     loggerTO.setLevel(LoggerLevel.valueOf(pairParameter.getValue()));
                     loggerSyncopeOperations.update(loggerTO);
                     loggerTOs.add(loggerTO);
-                } catch (final WebServiceException | SyncopeClientException | IllegalArgumentException ex) {
+                } catch (WebServiceException | SyncopeClientException | IllegalArgumentException ex) {
                     LOG.error("Error creating logger", ex);
                     loggerResultManager.typeNotValidError(
                             "logger level", input.firstParameter(), CommandUtils.fromEnumToArray(LoggerLevel.class));

http://git-wip-us.apache.org/repos/asf/syncope/blob/0b2757e4/client/cli/src/main/java/org/apache/syncope/client/cli/commands/logger/LoggerUpdate.java
----------------------------------------------------------------------
diff --git a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/logger/LoggerUpdate.java b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/logger/LoggerUpdate.java
index 590d5e2..64bbde1 100644
--- a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/logger/LoggerUpdate.java
+++ b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/logger/LoggerUpdate.java
@@ -20,6 +20,7 @@ package org.apache.syncope.client.cli.commands.logger;
 
 import java.util.LinkedList;
 import javax.xml.ws.WebServiceException;
+import org.apache.commons.lang3.tuple.Pair;
 import org.apache.syncope.client.cli.Input;
 import org.apache.syncope.client.cli.util.CommandUtils;
 import org.apache.syncope.common.lib.SyncopeClientException;
@@ -32,8 +33,8 @@ public class LoggerUpdate extends AbstractLoggerCommand {
 
     private static final Logger LOG = LoggerFactory.getLogger(LoggerUpdate.class);
 
-    private static final String UPDATE_HELP_MESSAGE
-            = "logger --update {LOG-NAME}={LOG-LEVEL} {LOG-NAME}={LOG-LEVEL} [...]";
+    private static final String UPDATE_HELP_MESSAGE =
+            "logger --update {LOG-NAME}={LOG-LEVEL} {LOG-NAME}={LOG-LEVEL} [...]";
 
     private final Input input;
 
@@ -43,18 +44,16 @@ public class LoggerUpdate extends AbstractLoggerCommand {
 
     public void update() {
         if (input.parameterNumber() >= 1) {
-            Input.PairParameter pairParameter;
-            LoggerTO loggerTO;
             final LinkedList<LoggerTO> loggerTOs = new LinkedList<>();
             boolean failed = false;
-            for (final String parameter : input.getParameters()) {
+            for (String parameter : input.getParameters()) {
+                Pair<String, String> pairParameter = input.toPairParameter(parameter);
                 try {
-                    pairParameter = input.toPairParameter(parameter);
-                    loggerTO = loggerSyncopeOperations.read(pairParameter.getKey());
+                    LoggerTO loggerTO = loggerSyncopeOperations.read(pairParameter.getKey());
                     loggerTO.setLevel(LoggerLevel.valueOf(pairParameter.getValue()));
                     loggerSyncopeOperations.update(loggerTO);
                     loggerTOs.add(loggerTO);
-                } catch (final WebServiceException | SyncopeClientException | IllegalArgumentException ex) {
+                } catch (WebServiceException | SyncopeClientException | IllegalArgumentException ex) {
                     LOG.error("Error updating logger", ex);
                     if (ex.getMessage().startsWith("No enum constant org.apache.syncope.common.lib.types.")) {
                         loggerResultManager.typeNotValidError(

http://git-wip-us.apache.org/repos/asf/syncope/blob/0b2757e4/client/cli/src/main/java/org/apache/syncope/client/cli/commands/user/UserDeleteAll.java
----------------------------------------------------------------------
diff --git a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/user/UserDeleteAll.java b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/user/UserDeleteAll.java
index 2bde176..30d0953 100644
--- a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/user/UserDeleteAll.java
+++ b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/user/UserDeleteAll.java
@@ -73,7 +73,7 @@ public class UserDeleteAll extends AbstractUserCommand {
                         }
                         userResultManager.genericMessage("Deleted users: " + deletedUsers);
                         if (!users.isEmpty()) {
-                            userResultManager.printUndeletedUsers(users);
+                            userResultManager.printFailedUsers(users);
                         }
                     } else {
                         userResultManager.genericError("Authentication error");

http://git-wip-us.apache.org/repos/asf/syncope/blob/0b2757e4/client/cli/src/main/java/org/apache/syncope/client/cli/commands/user/UserDeleteByAttribute.java
----------------------------------------------------------------------
diff --git a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/user/UserDeleteByAttribute.java b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/user/UserDeleteByAttribute.java
index b559672..38e4782 100644
--- a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/user/UserDeleteByAttribute.java
+++ b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/user/UserDeleteByAttribute.java
@@ -21,6 +21,7 @@ package org.apache.syncope.client.cli.commands.user;
 import java.util.HashMap;
 import java.util.Map;
 import javax.xml.ws.WebServiceException;
+import org.apache.commons.lang3.tuple.Pair;
 import org.apache.syncope.client.cli.Input;
 import org.apache.syncope.common.lib.SyncopeClientException;
 import org.apache.syncope.common.lib.to.BulkActionResult;
@@ -41,38 +42,38 @@ public class UserDeleteByAttribute extends AbstractUserCommand {
 
     public void delete() {
         if (input.parameterNumber() == 2) {
-            final String realm = input.firstParameter();
-            final Input.PairParameter pairParameter = input.toPairParameter(input.secondParameter());
+            String realm = input.firstParameter();
+            Pair<String, String> pairParameter = input.toPairParameter(input.secondParameter());
             try {
                 if (!realmSyncopeOperations.exists(realm)) {
                     userResultManager.notFoundError("Realm", realm);
                     return;
                 }
-                final Map<String, BulkActionResult.Status> results = userSyncopeOperations.deleteByAttribute(
+                Map<String, BulkActionResult.Status> results = userSyncopeOperations.deleteByAttribute(
                         realm, pairParameter.getKey(), pairParameter.getValue());
-                final Map<String, String> users = new HashMap<>();
+                Map<String, String> failedUsers = new HashMap<>();
                 int deletedUsers = 0;
                 for (final Map.Entry<String, BulkActionResult.Status> entrySet : results.entrySet()) {
-                    final String userId = entrySet.getKey();
-                    final BulkActionResult.Status status = entrySet.getValue();
-                    if (!BulkActionResult.Status.SUCCESS.equals(status)) {
-                        users.put(userId, status.name());
-                    } else {
+                    String userId = entrySet.getKey();
+                    BulkActionResult.Status status = entrySet.getValue();
+                    if (BulkActionResult.Status.SUCCESS == status) {
                         deletedUsers++;
+                    } else {
+                        failedUsers.put(userId, status.name());
                     }
                 }
                 userResultManager.genericMessage("Deleted users: " + deletedUsers);
-                if (!users.isEmpty()) {
-                    userResultManager.printUndeletedUsers(users);
+                if (!failedUsers.isEmpty()) {
+                    userResultManager.printFailedUsers(failedUsers);
                 }
-            } catch (final WebServiceException | SyncopeClientException ex) {
+            } catch (WebServiceException | SyncopeClientException ex) {
                 LOG.error("Error searching user", ex);
                 if (ex.getMessage().startsWith("NotFound")) {
                     userResultManager.notFoundError("User with " + pairParameter.getKey(), pairParameter.getValue());
                 } else {
                     userResultManager.genericError(ex.getMessage());
                 }
-            } catch (final IllegalArgumentException ex) {
+            } catch (IllegalArgumentException ex) {
                 LOG.error("Error searching user", ex);
                 userResultManager.genericError(ex.getMessage());
                 userResultManager.genericError(SEARCH_HELP_MESSAGE);

http://git-wip-us.apache.org/repos/asf/syncope/blob/0b2757e4/client/cli/src/main/java/org/apache/syncope/client/cli/commands/user/UserResultManager.java
----------------------------------------------------------------------
diff --git a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/user/UserResultManager.java b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/user/UserResultManager.java
index 8e3dae2..50ccd74 100644
--- a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/user/UserResultManager.java
+++ b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/user/UserResultManager.java
@@ -101,7 +101,7 @@ public class UserResultManager extends CommonsResultManager {
         }
     }
 
-    public void printUndeletedUsers(final Map<String, String> users) {
+    public void printFailedUsers(final Map<String, String> users) {
         final Table.TableBuilder tableBuilder =
                 new Table.TableBuilder("Users not deleted").header("user id").header("cause");
         for (final Map.Entry<String, String> entrySet : users.entrySet()) {

http://git-wip-us.apache.org/repos/asf/syncope/blob/0b2757e4/client/cli/src/main/java/org/apache/syncope/client/cli/commands/user/UserSearchByAttribute.java
----------------------------------------------------------------------
diff --git a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/user/UserSearchByAttribute.java b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/user/UserSearchByAttribute.java
index 95ad127..4181f83 100644
--- a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/user/UserSearchByAttribute.java
+++ b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/user/UserSearchByAttribute.java
@@ -20,6 +20,7 @@ package org.apache.syncope.client.cli.commands.user;
 
 import java.util.List;
 import javax.xml.ws.WebServiceException;
+import org.apache.commons.lang3.tuple.Pair;
 import org.apache.syncope.client.cli.Input;
 import org.apache.syncope.common.lib.SyncopeClientException;
 import org.apache.syncope.common.lib.to.UserTO;
@@ -40,30 +41,30 @@ public class UserSearchByAttribute extends AbstractUserCommand {
 
     public void search() {
         if (input.parameterNumber() == 2) {
-            final String realm = input.firstParameter();
-            final Input.PairParameter pairParameter = input.toPairParameter(input.secondParameter());
+            String realm = input.firstParameter();
+            Pair<String, String> pairParameter = input.toPairParameter(input.secondParameter());
             try {
-                List<UserTO> userTOs;
                 if (!realmSyncopeOperations.exists(realm)) {
-                    userResultManager.genericMessage("Operation performed on root realm because " + realm
-                            + " does not exists");
+                    userResultManager.genericMessage(
+                            "Operation performed on root realm because " + realm + " does not exists");
                 }
-                userTOs = userSyncopeOperations.searchByAttribute(
-                        realm, pairParameter.getKey(), pairParameter.getValue());
-                if (userTOs == null || userTOs.isEmpty()) {
+                List<UserTO> userTOs =
+                        userSyncopeOperations.searchByAttribute(
+                                realm, pairParameter.getKey(), pairParameter.getValue());
+                if (userTOs.isEmpty()) {
                     userResultManager.genericMessage("No users found with attribute "
                             + pairParameter.getKey() + " and value " + pairParameter.getValue());
                 } else {
                     userResultManager.printUsers(userTOs);
                 }
-            } catch (final WebServiceException | SyncopeClientException ex) {
+            } catch (WebServiceException | SyncopeClientException ex) {
                 LOG.error("Error searching user", ex);
                 if (ex.getMessage().startsWith("NotFound")) {
                     userResultManager.notFoundError("User with " + pairParameter.getKey(), pairParameter.getValue());
                 } else {
                     userResultManager.genericError(ex.getMessage());
                 }
-            } catch (final IllegalArgumentException ex) {
+            } catch (IllegalArgumentException ex) {
                 LOG.error("Error searching user", ex);
                 userResultManager.genericError(ex.getMessage());
                 userResultManager.genericError(SEARCH_HELP_MESSAGE);