Repository: syncope
Updated Branches:
  refs/heads/master 958919948 -> 7642af97c


Fixed SYNCOPE-584


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

Branch: refs/heads/master
Commit: 87ad997748fa7197584463e2aabcb7745f89f5b0
Parents: 9589199
Author: massi <massimiliano.perr...@tirasa.net>
Authored: Wed Oct 14 15:09:37 2015 +0200
Committer: massi <massimiliano.perr...@tirasa.net>
Committed: Wed Oct 14 15:09:37 2015 +0200

----------------------------------------------------------------------
 .../client/cli/commands/LoggerCommand.java      | 339 ++++++++++++-------
 1 file changed, 225 insertions(+), 114 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/syncope/blob/87ad9977/client/cli/src/main/java/org/apache/syncope/client/cli/commands/LoggerCommand.java
----------------------------------------------------------------------
diff --git 
a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/LoggerCommand.java
 
b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/LoggerCommand.java
index 469e68a..00f12b1 100644
--- 
a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/LoggerCommand.java
+++ 
b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/LoggerCommand.java
@@ -18,13 +18,12 @@
  */
 package org.apache.syncope.client.cli.commands;
 
-import com.beust.jcommander.DynamicParameter;
-import com.beust.jcommander.Parameter;
-import com.beust.jcommander.Parameters;
-import java.util.HashMap;
-import java.util.Map;
+import javax.xml.ws.WebServiceException;
 import org.apache.commons.lang3.StringUtils;
+import org.apache.syncope.client.cli.Command;
+import org.apache.syncope.client.cli.Input;
 import org.apache.syncope.client.cli.SyncopeServices;
+import org.apache.syncope.client.cli.messages.UsageMessages;
 import org.apache.syncope.common.lib.SyncopeClientException;
 import org.apache.syncope.common.lib.to.LoggerTO;
 import org.apache.syncope.common.lib.types.LoggerLevel;
@@ -33,135 +32,247 @@ import 
org.apache.syncope.common.rest.api.service.LoggerService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-@Parameters(
-        commandNames = "logger",
-        optionPrefixes = "-",
-        separators = "=",
-        commandDescription = "Apache Syncope logger service")
+@Command(name = "logger")
 public class LoggerCommand extends AbstractCommand {
 
     private static final Logger LOG = 
LoggerFactory.getLogger(LoggerCommand.class);
 
-    private final String helpMessage = "Usage: logger [options]\n"
+    private static final String HELP_MESSAGE = "Usage: logger [options]\n"
             + "  Options:\n"
-            + "    -h, --help \n"
-            + "    -l, --list \n"
-            + "    -r, --read \n"
-            + "       Syntax: -r={LOG-NAME} \n"
-            + "    -u, --update \n"
-            + "       Syntax: {LOG-NAME}={LOG-LEVEL} \n"
-            + "    -ua, --update-all \n"
-            + "       Syntax: -ua={LOG-LEVEL} \n"
-            + "    -c, --create \n"
-            + "       Syntax: {LOG-NAME}={LOG-LEVEL} \n"
-            + "    -d, --delete \n"
-            + "       Syntax: -d={LOG-NAME}";
-
-    @Parameter(names = { "-r", "--read" })
-    private String logNameToRead;
-
-    @DynamicParameter(names = { "-u", "--update" })
-    private final Map<String, String> updateLogs = new HashMap<String, 
String>();
-
-    @Parameter(names = { "-ua", "--update-all" })
-    private String logLevel;
-
-    @DynamicParameter(names = { "-c", "--create" })
-    private final Map<String, String> createLogs = new HashMap<String, 
String>();
-
-    @Parameter(names = { "-d", "--delete" })
-    private String logNameToDelete;
+            + "    --help \n"
+            + "    --list \n"
+            + "    --read \n"
+            + "       Syntax: --read {LOG-NAME} {LOG-NAME} [...]\n"
+            + "    --update \n"
+            + "       Syntax: --update {LOG-NAME}={LOG-LEVEL} 
{LOG-NAME}={LOG-LEVEL} [...]\n"
+            + "    --update-all \n"
+            + "       Syntax: --update-all {LOG-LEVEL} \n"
+            + "    --create \n"
+            + "       Syntax: --create {LOG-NAME}={LOG-LEVEL} 
{LOG-NAME}={LOG-LEVEL} [...]\n"
+            + "    --delete \n"
+            + "       Syntax: --delete {LOG-NAME} {LOG-NAME} [...]";
 
     @Override
-    public void execute() {
-        final LoggerService loggerService = 
SyncopeServices.get(LoggerService.class);
+    public void execute(final Input input) {
+        LOG.debug("Option: {}", input.getOption());
+        LOG.debug("Parameters:");
+        for (final String parameter : input.getParameters()) {
+            LOG.debug("   > " + parameter);
+        }
 
-        LOG.debug("Logger service successfully created");
+        final String[] parameters = input.getParameters();
 
-        if (help) {
-            LOG.debug("- logger help command");
-            System.out.println(helpMessage);
-        } else if (list) {
-            LOG.debug("- logger list command");
-            try {
-                for (final LoggerTO loggerTO : 
loggerService.list(LoggerType.LOG)) {
-                    System.out.println(" - " + loggerTO.getKey() + " -> " + 
loggerTO.getLevel());
-                }
-            } catch (final SyncopeClientException ex) {
-                System.out.println(" - Error: " + ex.getMessage());
-            }
-        } else if (StringUtils.isNotBlank(logNameToRead)) {
-            LOG.debug("- logger read {} command", logNameToRead);
-            try {
-                final LoggerTO loggerTO = loggerService.read(LoggerType.LOG, 
logNameToRead);
-                System.out.println(" - Logger " + loggerTO.getKey() + " with 
level -> " + loggerTO.getLevel());
-            } catch (final SyncopeClientException ex) {
-                System.out.println(" - Error: " + ex.getMessage());
-            }
-        } else if (!updateLogs.isEmpty()) {
-            LOG.debug("- logger update command with params {}", updateLogs);
+        if (StringUtils.isBlank(input.getOption())) {
+            input.setOption(Options.HELP.getOptionName());
+        }
 
-            for (final Map.Entry<String, String> log : updateLogs.entrySet()) {
-                final LoggerTO loggerTO = loggerService.read(LoggerType.LOG, 
log.getKey());
+        final LoggerService loggerService = 
SyncopeServices.get(LoggerService.class);
+        switch (Options.fromName(input.getOption())) {
+            case LIST:
                 try {
-                    loggerTO.setLevel(LoggerLevel.valueOf(log.getValue()));
-                    loggerService.update(LoggerType.LOG, loggerTO);
-                    System.out.println(" - Logger " + loggerTO.getKey() + " 
new level -> " + loggerTO.getLevel());
+                    System.out.println("\n");
+                    for (final LoggerTO loggerTO : 
loggerService.list(LoggerType.LOG)) {
+                        System.out.println(" - " + loggerTO.getKey() + " -> " 
+ loggerTO.getLevel());
+                        System.out.println("");
+                    }
                 } catch (final SyncopeClientException ex) {
-                    System.out.println(" - Error: " + ex.getMessage());
-                } catch (final IllegalArgumentException ex) {
-                    System.out.println(" - Error: " + log.getValue() + " isn't 
a valid logger level, try with:");
-                    for (final LoggerLevel level : LoggerLevel.values()) {
-                        System.out.println("  *** " + level.name());
+                    UsageMessages.printErrorMessage("Error: " + 
ex.getMessage());
+                }
+                break;
+            case READ:
+                final String readErrorMessage = 
UsageMessages.optionCommandMessage(
+                        "logger --read {LOG-NAME} {LOG-NAME} [...]");
+                if (parameters.length >= 1) {
+                    for (final String parameter : parameters) {
+                        try {
+                            final LoggerTO loggerTO = 
loggerService.read(LoggerType.LOG, parameter);
+                            System.out.println("\n - Logger");
+                            System.out.println("   - key: " + 
loggerTO.getKey());
+                            System.out.println("   - level: " + 
loggerTO.getLevel());
+                            System.out.println("");
+                        } catch (final SyncopeClientException | 
WebServiceException ex) {
+                            if (ex.getMessage().startsWith("NotFound")) {
+                                UsageMessages.printErrorMessage(
+                                        "Logger " + parameter + " doesn't 
exist!");
+                            } else {
+                                UsageMessages.printErrorMessage("Error: " + 
ex.getMessage());
+                            }
+                        }
                     }
+                } else {
+                    System.out.println(readErrorMessage);
                 }
-            }
-        } else if (StringUtils.isNotBlank(logLevel)) {
-            LOG.debug("- logger update all command with level {}", logLevel);
-            for (final LoggerTO loggerTO : loggerService.list(LoggerType.LOG)) 
{
-                try {
-                    loggerTO.setLevel(LoggerLevel.valueOf(logLevel));
-                    loggerService.update(LoggerType.LOG, loggerTO);
-                    System.out.println(" - Logger " + loggerTO.getKey() + " 
new level -> " + loggerTO.getLevel());
-                } catch (final SyncopeClientException ex) {
-                    System.out.println(" - Error: " + ex.getMessage());
-                } catch (final IllegalArgumentException ex) {
-                    System.out.println(" - Error: " + loggerTO.getLevel() + " 
isn't a valid logger level, try with:");
-                    for (final LoggerLevel level : LoggerLevel.values()) {
-                        System.out.println("  *** " + level.name());
+                break;
+            case UPDATE:
+                final String updateErrorMessage = 
UsageMessages.optionCommandMessage(
+                        "logger --update {LOG-NAME}={LOG-LEVEL} 
{LOG-NAME}={LOG-LEVEL} [...]");
+
+                if (parameters.length >= 1) {
+                    Input.PairParameter pairParameter = null;
+                    for (final String parameter : parameters) {
+                        try {
+                            pairParameter = input.toPairParameter(parameter);
+                            final LoggerTO loggerTO = 
loggerService.read(LoggerType.LOG, pairParameter.getKey());
+                            
loggerTO.setLevel(LoggerLevel.valueOf(pairParameter.getValue()));
+                            loggerService.update(LoggerType.LOG, loggerTO);
+                            System.out.
+                                    println("\n - Logger " + loggerTO.getKey() 
+ " updated");
+                            System.out.println("   - new level: " + 
loggerTO.getLevel());
+                            System.out.println("");
+                        } catch (final WebServiceException | 
SyncopeClientException | IllegalArgumentException ex) {
+                            if (ex.getMessage().startsWith("No enum constant 
org.apache.syncope.common.lib.types.")) {
+                                
UsageMessages.printErrorMessage(ex.getMessage());
+                                System.out.println("Try with:");
+                                for (final LoggerLevel level : 
LoggerLevel.values()) {
+                                    System.out.println("  *** " + 
level.name());
+                                }
+                                System.out.println("");
+                            } else if ("Parameter syntax 
error!".equalsIgnoreCase(ex.getMessage())) {
+                                
UsageMessages.printErrorMessage(ex.getMessage(), updateErrorMessage);
+                            } else if (ex.getMessage().startsWith("NotFound")) 
{
+                                UsageMessages.printErrorMessage(
+                                        "Logger " + pairParameter.getKey() + " 
doesn't exists!");
+                            } else {
+                                
UsageMessages.printErrorMessage(ex.getMessage(), updateErrorMessage);
+                            }
+                            break;
+                        }
                     }
+                } else {
+                    System.out.println(updateErrorMessage);
                 }
-            }
-        } else if (!createLogs.isEmpty()) {
-            LOG.debug("- logger create command with params {}", createLogs);
+                break;
+            case UPDATE_ALL:
+                final String updateAllErrorMessage = 
UsageMessages.optionCommandMessage(
+                        "logger --update-all {LOG-LEVEL}");
 
-            for (final Map.Entry<String, String> entrySet : 
createLogs.entrySet()) {
-                final LoggerTO loggerTO = new LoggerTO();
-                try {
-                    loggerTO.setKey(entrySet.getKey());
-                    
loggerTO.setLevel(LoggerLevel.valueOf(entrySet.getValue()));
-                    loggerService.update(LoggerType.LOG, loggerTO);
-                    System.out.println(" - Logger " + loggerTO.getKey() + " 
created with level -> " + loggerTO.
-                            getLevel());
-                } catch (final SyncopeClientException ex) {
-                    System.out.println(" - Error: " + ex.getMessage());
-                } catch (final IllegalArgumentException ex) {
-                    System.out.println(" - Error: " + loggerTO.getLevel() + " 
isn't a valid logger level, try with:");
-                    for (final LoggerLevel level : LoggerLevel.values()) {
-                        System.out.println("  *** " + level.name());
+                if (parameters.length == 1) {
+                    for (final LoggerTO loggerTO : 
loggerService.list(LoggerType.LOG)) {
+                        try {
+                            
loggerTO.setLevel(LoggerLevel.valueOf(parameters[0]));
+                            loggerService.update(LoggerType.LOG, loggerTO);
+                            System.out.
+                                    println("\n - Logger " + loggerTO.getKey() 
+ " updated");
+                            System.out.println("   - new level: " + 
loggerTO.getLevel());
+                            System.out.println("");
+                        } catch (final WebServiceException | 
SyncopeClientException | IllegalArgumentException ex) {
+                            if (ex.getMessage().startsWith("No enum constant 
org.apache.syncope.common.lib.types.")) {
+                                
UsageMessages.printErrorMessage(ex.getMessage());
+                                System.out.println("Try with:");
+                                for (final LoggerLevel level : 
LoggerLevel.values()) {
+                                    System.out.println("  *** " + 
level.name());
+                                }
+                                System.out.println("");
+                            } else {
+                                
UsageMessages.printErrorMessage(ex.getMessage(), updateAllErrorMessage);
+                            }
+                            break;
+                        }
                     }
+                } else {
+                    System.out.println(updateAllErrorMessage);
+                }
+                break;
+            case CREATE:
+                final String createErrorMessage = 
UsageMessages.optionCommandMessage(
+                        "logger --create {LOG-NAME}={LOG-LEVEL} 
{LOG-NAME}={LOG-LEVEL} [...]");
+
+                if (parameters.length >= 1) {
+                    Input.PairParameter pairParameter;
+                    LoggerTO loggerTO;
+                    for (final String parameter : parameters) {
+                        loggerTO = new LoggerTO();
+                        try {
+                            pairParameter = input.toPairParameter(parameter);
+                            loggerTO.setKey(pairParameter.getKey());
+                            
loggerTO.setLevel(LoggerLevel.valueOf(pairParameter.getValue()));
+                            loggerService.update(LoggerType.LOG, loggerTO);
+                            System.out.
+                                    println("\n - Logger " + loggerTO.getKey() 
+ " updated");
+                            System.out.println("   - level: " + 
loggerTO.getLevel());
+                            System.out.println("");
+                        } catch (final WebServiceException | 
SyncopeClientException | IllegalArgumentException ex) {
+                            if (ex.getMessage().startsWith("No enum constant 
org.apache.syncope.common.lib.types.")) {
+                                
UsageMessages.printErrorMessage(ex.getMessage());
+                                System.out.println("Try with:");
+                                for (final LoggerLevel level : 
LoggerLevel.values()) {
+                                    System.out.println("  *** " + 
level.name());
+                                }
+                                System.out.println("");
+                            } else if ("Parameter syntax 
error!".equalsIgnoreCase(ex.getMessage())) {
+                                
UsageMessages.printErrorMessage(ex.getMessage(), createErrorMessage);
+                            }
+                            break;
+                        }
+                    }
+                } else {
+                    System.out.println(createErrorMessage);
+                }
+                break;
+            case DELETE:
+                final String deleteErrorMessage = 
UsageMessages.optionCommandMessage(
+                        "logger --delete {LOG-NAME} {LOG-NAME} [...]");
+
+                if (parameters.length >= 1) {
+                    for (final String parameter : parameters) {
+                        try {
+                            loggerService.delete(LoggerType.LOG, parameter);
+                            System.out.println("\n - Logger " + parameter + " 
deleted!\n");
+                        } catch (final WebServiceException | 
SyncopeClientException ex) {
+                            if (ex.getMessage().startsWith("NotFound")) {
+                                UsageMessages.printErrorMessage(
+                                        "Logger " + parameter + " doesn't 
exists!");
+                            } else {
+                                
UsageMessages.printErrorMessage(ex.getMessage());
+                            }
+                        }
+                    }
+                } else {
+                    System.out.println(deleteErrorMessage);
+                }
+                break;
+            case HELP:
+                System.out.println(HELP_MESSAGE);
+                break;
+            default:
+                System.out.println(input.getOption() + " is not a valid 
option.");
+                System.out.println("");
+                System.out.println(HELP_MESSAGE);
+        }
+    }
+
+    private enum Options {
+
+        HELP("--help"),
+        LIST("--list"),
+        READ("--read"),
+        UPDATE("--update"),
+        UPDATE_ALL("--update-all"),
+        CREATE("--create"),
+        DELETE("--delete");
+
+        private final String optionName;
+
+        private Options(final String optionName) {
+            this.optionName = optionName;
+        }
+
+        public String getOptionName() {
+            return optionName;
+        }
+
+        public boolean equalsOptionName(final String otherName) {
+            return (otherName == null) ? false : optionName.equals(otherName);
+        }
+
+        public static Options fromName(final String name) {
+            Options optionToReturn = HELP;
+            for (final Options option : Options.values()) {
+                if (option.equalsOptionName(name)) {
+                    optionToReturn = option;
                 }
             }
-        } else if (StringUtils.isNotBlank(logNameToDelete)) {
-            try {
-                LOG.debug("- logger delete {} command", logNameToDelete);
-                loggerService.delete(LoggerType.LOG, logNameToDelete);
-                System.out.println(" - Logger " + logNameToDelete + " 
deleted!");
-            } catch (final SyncopeClientException ex) {
-                System.out.println(" - Error: " + ex.getMessage());
-            }
-        } else {
-            System.out.println(helpMessage);
+            return optionToReturn;
         }
     }
 

Reply via email to