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; } }