Fixed SYNCOPE-592, messages improvement SYNCOPE-158
Project: http://git-wip-us.apache.org/repos/asf/syncope/repo Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/2a99db9c Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/2a99db9c Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/2a99db9c Branch: refs/heads/SYNCOPE-156 Commit: 2a99db9ce64bd9461fad9e1ac89bed7830b957dc Parents: 405f212 Author: massi <massimiliano.perr...@tirasa.net> Authored: Thu Oct 15 17:27:41 2015 +0200 Committer: massi <massimiliano.perr...@tirasa.net> Committed: Thu Oct 15 17:27:41 2015 +0200 ---------------------------------------------------------------------- .../apache/syncope/client/cli/SyncopeAdm.java | 38 +- .../client/cli/commands/AbstractCommand.java | 9 + .../cli/commands/ConfigurationCommand.java | 4 +- .../client/cli/commands/DomainCommand.java | 4 +- .../client/cli/commands/HelpCommand.java | 4 +- .../client/cli/commands/InfoCommand.java | 4 +- .../client/cli/commands/LoggerCommand.java | 34 +- .../cli/commands/NotificationCommand.java | 9 +- .../client/cli/commands/PolicyCommand.java | 18 +- .../client/cli/commands/ReportCommand.java | 42 +- .../client/cli/commands/SchemaCommand.java | 30 +- .../client/cli/commands/TaskCommand.java | 583 +++++++++++++++++++ .../syncope/client/cli/messages/Messages.java | 30 + .../syncope/common/lib/types/TaskType.java | 2 +- 14 files changed, 690 insertions(+), 121 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/syncope/blob/2a99db9c/client/cli/src/main/java/org/apache/syncope/client/cli/SyncopeAdm.java ---------------------------------------------------------------------- diff --git a/client/cli/src/main/java/org/apache/syncope/client/cli/SyncopeAdm.java b/client/cli/src/main/java/org/apache/syncope/client/cli/SyncopeAdm.java index 3a66baa..d503498 100644 --- a/client/cli/src/main/java/org/apache/syncope/client/cli/SyncopeAdm.java +++ b/client/cli/src/main/java/org/apache/syncope/client/cli/SyncopeAdm.java @@ -20,6 +20,7 @@ package org.apache.syncope.client.cli; import org.apache.syncope.client.cli.commands.AbstractCommand; import org.apache.syncope.client.cli.messages.Messages; +import org.apache.syncope.client.cli.util.CommandUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -27,20 +28,6 @@ public final class SyncopeAdm { private static final Logger LOG = LoggerFactory.getLogger(SyncopeAdm.class); - private static final String HELP_MESSAGE = "Usage: Main [options]\n" - + " Options:\n" - + " logger --help \n" - + " config --help \n" - + " notification --help \n" - + " report --help \n" - + " policy --help \n" - + " entitlement --help \n" - + " schema --help \n" - + " install --help \n" - + " info --help\n" - + " domain --help\n" - + " help\n"; - public static void main(final String[] args) { LOG.debug("Starting with args \n"); @@ -50,15 +37,34 @@ public final class SyncopeAdm { final AbstractCommand command = input.getCommand(); command.execute(input); } catch (final IllegalAccessException | InstantiationException e) { - System.out.println(HELP_MESSAGE); + System.out.println(helpMessage()); } catch (final IllegalArgumentException ex) { LOG.error("Error in main", ex); Messages.printMessage(ex.getMessage()); if (!ex.getMessage().startsWith("It seems you")) { - System.out.println(HELP_MESSAGE); + System.out.println(helpMessage()); + } + } + + } + + private static String helpMessage() { + final StringBuilder helpMessageBuilder = new StringBuilder("Usage: Main [options]\n"); + helpMessageBuilder.append(" Options:\n"); + try { + for (AbstractCommand command : CommandUtils.commands()) { + final String commandName = command.getClass().getAnnotation(Command.class).name(); + helpMessageBuilder.append(" ").append(commandName); + if (!"help".equalsIgnoreCase(commandName)) { + helpMessageBuilder.append(" --help"); + } + helpMessageBuilder.append("\n"); } + } catch (final IllegalAccessException | IllegalArgumentException | InstantiationException ex) { + Messages.printMessage(ex.getMessage()); } + return helpMessageBuilder.toString(); } private SyncopeAdm() { http://git-wip-us.apache.org/repos/asf/syncope/blob/2a99db9c/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 7f272fe..7cee202 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 @@ -35,4 +35,13 @@ public abstract class AbstractCommand { } public abstract String getHelpMessage(); + + protected static String[] fromEnumToArray(final Class<? extends Enum<?>> enumClass) { + final String[] types = new String[enumClass.getFields().length]; + for (int i = 0; i < enumClass.getFields().length; i++) { + types[i] = enumClass.getFields()[i].getName(); + + } + return types; + } } http://git-wip-us.apache.org/repos/asf/syncope/blob/2a99db9c/client/cli/src/main/java/org/apache/syncope/client/cli/commands/ConfigurationCommand.java ---------------------------------------------------------------------- diff --git a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/ConfigurationCommand.java b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/ConfigurationCommand.java index 4b082ee..ee225d7 100644 --- a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/ConfigurationCommand.java +++ b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/ConfigurationCommand.java @@ -264,9 +264,7 @@ public class ConfigurationCommand extends AbstractCommand { 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); + Messages.printDefaultMessage(input.getOption(), HELP_MESSAGE); break; } } http://git-wip-us.apache.org/repos/asf/syncope/blob/2a99db9c/client/cli/src/main/java/org/apache/syncope/client/cli/commands/DomainCommand.java ---------------------------------------------------------------------- diff --git a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/DomainCommand.java b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/DomainCommand.java index e733156..a2a0977 100644 --- a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/DomainCommand.java +++ b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/DomainCommand.java @@ -112,9 +112,7 @@ public class DomainCommand extends AbstractCommand { 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); + Messages.printDefaultMessage(input.getOption(), HELP_MESSAGE); } } http://git-wip-us.apache.org/repos/asf/syncope/blob/2a99db9c/client/cli/src/main/java/org/apache/syncope/client/cli/commands/HelpCommand.java ---------------------------------------------------------------------- diff --git a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/HelpCommand.java b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/HelpCommand.java index c4008eb..85b7d73 100644 --- a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/HelpCommand.java +++ b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/HelpCommand.java @@ -63,9 +63,7 @@ public class HelpCommand extends AbstractCommand { } break; default: - System.out.println(input.getOption() + " is not a valid option."); - System.out.println(""); - System.out.println(helpMessage("help", Options.toList())); + Messages.printDefaultMessage(input.getOption(), helpMessage("info", Options.toList())); break; } } http://git-wip-us.apache.org/repos/asf/syncope/blob/2a99db9c/client/cli/src/main/java/org/apache/syncope/client/cli/commands/InfoCommand.java ---------------------------------------------------------------------- diff --git a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/InfoCommand.java b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/InfoCommand.java index e6e1378..07bb952 100644 --- a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/InfoCommand.java +++ b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/InfoCommand.java @@ -267,9 +267,7 @@ public class InfoCommand extends AbstractCommand { System.out.println(helpMessage("info", Options.toList())); break; default: - System.out.println(input.getOption() + " is not a valid option."); - System.out.println(""); - System.out.println(helpMessage("info", Options.toList())); + Messages.printDefaultMessage(input.getOption(), helpMessage("info", Options.toList())); break; } } http://git-wip-us.apache.org/repos/asf/syncope/blob/2a99db9c/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 6a5cde6..6c11c6f 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 @@ -106,7 +106,7 @@ public class LoggerCommand extends AbstractCommand { final String updateErrorMessage = "logger --update {LOG-NAME}={LOG-LEVEL} {LOG-NAME}={LOG-LEVEL} [...]"; if (parameters.length >= 1) { - Input.PairParameter pairParameter = null; + Input.PairParameter pairParameter; for (final String parameter : parameters) { try { pairParameter = input.toPairParameter(parameter); @@ -119,12 +119,8 @@ public class LoggerCommand extends AbstractCommand { System.out.println(""); } catch (final WebServiceException | SyncopeClientException | IllegalArgumentException ex) { if (ex.getMessage().startsWith("No enum constant org.apache.syncope.common.lib.types.")) { - Messages.printMessage(ex.getMessage()); - System.out.println("Try with:"); - for (final LoggerLevel level : LoggerLevel.values()) { - System.out.println(" *** " + level.name()); - } - System.out.println(""); + Messages.printTypeNotValidMessage( + "logger level", input.firstParameter(), fromEnumToArray(LoggerLevel.class)); } else if ("Parameter syntax error!".equalsIgnoreCase(ex.getMessage())) { Messages.printMessage(ex.getMessage(), updateErrorMessage); } else if (ex.getMessage().startsWith("NotFound")) { @@ -153,12 +149,8 @@ public class LoggerCommand extends AbstractCommand { System.out.println(""); } catch (final WebServiceException | SyncopeClientException | IllegalArgumentException ex) { if (ex.getMessage().startsWith("No enum constant org.apache.syncope.common.lib.types.")) { - Messages.printMessage(ex.getMessage()); - System.out.println("Try with:"); - for (final LoggerLevel level : LoggerLevel.values()) { - System.out.println(" *** " + level.name()); - } - System.out.println(""); + Messages.printTypeNotValidMessage( + "logger level", input.firstParameter(), fromEnumToArray(LoggerLevel.class)); } else { Messages.printMessage(ex.getMessage(), updateAllErrorMessage); } @@ -187,16 +179,8 @@ public class LoggerCommand extends AbstractCommand { 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.")) { - Messages.printMessage(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())) { - Messages.printMessage(ex.getMessage(), createErrorMessage); - } + Messages.printTypeNotValidMessage( + "logger level", input.firstParameter(), fromEnumToArray(LoggerLevel.class)); break; } } @@ -228,9 +212,7 @@ public class LoggerCommand extends AbstractCommand { 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); + Messages.printDefaultMessage(input.getOption(), HELP_MESSAGE); } } http://git-wip-us.apache.org/repos/asf/syncope/blob/2a99db9c/client/cli/src/main/java/org/apache/syncope/client/cli/commands/NotificationCommand.java ---------------------------------------------------------------------- diff --git a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/NotificationCommand.java b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/NotificationCommand.java index 49cc2e2..194ee11 100644 --- a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/NotificationCommand.java +++ b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/NotificationCommand.java @@ -78,7 +78,7 @@ public class NotificationCommand extends AbstractCommand { try { System.out.println(notificationService.read(Long.valueOf(parameter))); } catch (final NumberFormatException ex) { - System.out.println("Error reading " + parameter + ". It isn't a valid notification id"); + Messages.printIdNotNumberDeletedMessage("notification", parameter); } catch (final WebServiceException | SyncopeClientException ex) { if (ex.getMessage().startsWith("NotFound")) { Messages.printNofFoundMessage("Notification", parameter); @@ -106,8 +106,7 @@ public class NotificationCommand extends AbstractCommand { Messages.printMessage(ex.getMessage()); } } catch (final NumberFormatException ex) { - Messages.printMessage( - "Error reading " + parameter + ". It isn't a valid notification id"); + Messages.printIdNotNumberDeletedMessage("notification", parameter); } } } else { @@ -118,9 +117,7 @@ public class NotificationCommand extends AbstractCommand { 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); + Messages.printDefaultMessage(input.getOption(), HELP_MESSAGE); } } http://git-wip-us.apache.org/repos/asf/syncope/blob/2a99db9c/client/cli/src/main/java/org/apache/syncope/client/cli/commands/PolicyCommand.java ---------------------------------------------------------------------- diff --git a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/PolicyCommand.java b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/PolicyCommand.java index cd043ce..a69be18 100644 --- a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/PolicyCommand.java +++ b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/PolicyCommand.java @@ -77,12 +77,8 @@ public class PolicyCommand extends AbstractCommand { } catch (final SyncopeClientException ex) { Messages.printMessage(ex.getMessage()); } catch (final IllegalArgumentException ex) { - Messages.printMessage( - "Error: " + parameters[0] + " isn't a valid policy type, try with:"); - for (final PolicyType type : PolicyType.values()) { - System.out.println(" *** " + type.name()); - } - System.out.println(""); + Messages.printTypeNotValidMessage( + "policy", input.firstParameter(), fromEnumToArray(PolicyType.class)); } } else { Messages.printCommandOptionMessage(listPolicyErrorMessage); @@ -96,8 +92,7 @@ public class PolicyCommand extends AbstractCommand { try { System.out.println(policyService.read(Long.valueOf(parameter))); } catch (final NumberFormatException ex) { - Messages.printMessage( - "Error reading " + parameter + ". It isn't a valid policy id"); + Messages.printIdNotNumberDeletedMessage("policy", parameter); } catch (final WebServiceException | SyncopeClientException ex) { if (ex.getMessage().startsWith("NotFound")) { Messages.printNofFoundMessage("Policy", parameter); @@ -128,8 +123,7 @@ public class PolicyCommand extends AbstractCommand { Messages.printMessage(ex.getMessage()); } } catch (final NumberFormatException ex) { - Messages.printMessage( - "Error reading " + parameter + ". It isn't a valid policy id"); + Messages.printIdNotNumberDeletedMessage("policy", parameter); } } } else { @@ -140,9 +134,7 @@ public class PolicyCommand extends AbstractCommand { 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); + Messages.printDefaultMessage(input.getOption(), HELP_MESSAGE); } } http://git-wip-us.apache.org/repos/asf/syncope/blob/2a99db9c/client/cli/src/main/java/org/apache/syncope/client/cli/commands/ReportCommand.java ---------------------------------------------------------------------- diff --git a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/ReportCommand.java b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/ReportCommand.java index 3d9770e..2178d22 100644 --- a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/ReportCommand.java +++ b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/ReportCommand.java @@ -109,14 +109,13 @@ public class ReportCommand extends AbstractCommand { } break; case READ: - final String readErrorMessage = "Usage: report --read {REPORT-ID} {REPORT-ID} [...]"; + final String readErrorMessage = "report --read {REPORT-ID} {REPORT-ID} [...]"; if (parameters.length >= 1) { for (final String parameter : parameters) { try { System.out.println(reportService.read(Long.valueOf(parameter))); } catch (final NumberFormatException ex) { - Messages.printMessage( - "Error reading " + parameter + ". It isn't a valid report id"); + Messages.printIdNotNumberDeletedMessage("report", parameter); } catch (final WebServiceException | SyncopeClientException ex) { if (ex.getMessage().startsWith("NotFound")) { Messages.printNofFoundMessage("Report", parameter); @@ -130,9 +129,9 @@ public class ReportCommand extends AbstractCommand { } break; case DELETE: - final String deleteErrorMessage = "report --execute {REPORT-ID}"; + final String deleteErrorMessage = "report --delete {REPORT-ID} {REPORT-ID} [...]"; - if (parameters.length == 1) { + if (parameters.length >= 1) { for (final String parameter : parameters) { try { reportService.delete(Long.valueOf(parameter)); @@ -146,8 +145,7 @@ public class ReportCommand extends AbstractCommand { Messages.printMessage(ex.getMessage()); } } catch (final NumberFormatException ex) { - Messages.printMessage( - "Error reading " + parameter + ". It isn't a valid report id"); + Messages.printIdNotNumberDeletedMessage("report", parameter); } } } else { @@ -155,7 +153,7 @@ public class ReportCommand extends AbstractCommand { } break; case EXECUTE: - final String executeErrorMessage = "Usage: report --execute {REPORT-ID}"; + final String executeErrorMessage = "report --execute {REPORT-ID}"; if (parameters.length == 1) { @@ -178,8 +176,7 @@ public class ReportCommand extends AbstractCommand { Messages.printMessage(ex.getMessage()); } } catch (final NumberFormatException ex) { - Messages.printMessage( - "Error reading " + parameters[0] + ". It isn't a valid report id"); + Messages.printIdNotNumberDeletedMessage("report", parameters[0]); } } else { Messages.printCommandOptionMessage(executeErrorMessage); @@ -205,8 +202,7 @@ public class ReportCommand extends AbstractCommand { Messages.printMessage(ex.getMessage()); } } catch (final NumberFormatException ex) { - Messages.printMessage( - "Error reading " + parameter + ". It isn't a valid report id"); + Messages.printIdNotNumberDeletedMessage("report", parameter); } } } else { @@ -232,7 +228,7 @@ public class ReportCommand extends AbstractCommand { System.out.println(ex.getMessage()); } } catch (final NumberFormatException ex) { - System.out.println("Error reading " + parameter + ". It isn't a valid report id"); + Messages.printIdNotNumberDeletedMessage("report", parameter); } } } else { @@ -241,7 +237,7 @@ public class ReportCommand extends AbstractCommand { break; case EXPORT_EXECUTION_RESULT: final String exportExecutionErrorMessage - = "Usage: report --export-execution-result {EXECUTION-ID} {EXECUTION-ID} [...] {FORMAT}\n" + = "report --export-execution-result {EXECUTION-ID} {EXECUTION-ID} [...] {FORMAT}\n" + " Format: CSV / HTML / PDF / XML / RTF"; if (parameters.length >= 2) { @@ -281,19 +277,15 @@ public class ReportCommand extends AbstractCommand { System.out.println(ex.getMessage()); } } catch (final NumberFormatException ex) { - System.out.println("Error reading " + parameter + ". It isn't a valid report id"); + Messages.printIdNotNumberDeletedMessage("report", parameter); } catch (IOException | ParserConfigurationException | SAXException | TransformerException e) { System.out.println(" - Error creating " + "export_" + parameter + " " + e.getMessage()); } catch (final IllegalArgumentException ex) { - if (ex.getMessage().startsWith("No enum constant org.apache.syncope.common.lib.types.")) { - System.out.println(" - Error: " + input.lastParameter() - + " isn't a valid policy type, try with:"); - for (final ReportExecExportFormat type : ReportExecExportFormat.values()) { - System.out.println(" *** " + type.name()); - } - } - break; + Messages.printTypeNotValidMessage( + "format", input.firstParameter(), + fromEnumToArray(ReportExecExportFormat.class)); } + break; } } else { Messages.printCommandOptionMessage(exportExecutionErrorMessage); @@ -303,9 +295,7 @@ public class ReportCommand extends AbstractCommand { 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); + Messages.printDefaultMessage(input.getOption(), HELP_MESSAGE); } } http://git-wip-us.apache.org/repos/asf/syncope/blob/2a99db9c/client/cli/src/main/java/org/apache/syncope/client/cli/commands/SchemaCommand.java ---------------------------------------------------------------------- diff --git a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/SchemaCommand.java b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/SchemaCommand.java index 28e66de..7cb9ca1 100644 --- a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/SchemaCommand.java +++ b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/SchemaCommand.java @@ -18,6 +18,8 @@ */ package org.apache.syncope.client.cli.commands; +import static org.apache.syncope.client.cli.commands.AbstractCommand.fromEnumToArray; + import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -98,12 +100,8 @@ public class SchemaCommand extends AbstractCommand { } catch (final SyncopeClientException ex) { Messages.printMessage(ex.getMessage()); } catch (final IllegalArgumentException ex) { - Messages.printMessage( - input.firstParameter() + " isn't a valid schema type, try with:"); - for (final SchemaType type : SchemaType.values()) { - System.out.println(" *** " + type.name()); - } - System.out.println(""); + Messages.printTypeNotValidMessage( + "schema", input.firstParameter(), fromEnumToArray(SchemaType.class)); } } else { Messages.printCommandOptionMessage(listErrorMessage); @@ -217,12 +215,8 @@ public class SchemaCommand extends AbstractCommand { Messages.printMessage(ex.getMessage()); } } catch (final IllegalArgumentException ex) { - Messages.printMessage( - parameters[0] + " isn't a valid schema type, try with:"); - for (final SchemaType type : SchemaType.values()) { - System.out.println(" *** " + type.name()); - } - System.out.println(""); + Messages.printTypeNotValidMessage( + "schema", input.firstParameter(), fromEnumToArray(SchemaType.class)); } } else { Messages.printCommandOptionMessage(readErrorMessage); @@ -248,12 +242,8 @@ public class SchemaCommand extends AbstractCommand { Messages.printMessage(ex.getMessage()); } } catch (final IllegalArgumentException ex) { - Messages.printMessage( - parameters[0] + " isn't a valid schema type, try with:"); - for (final SchemaType type : SchemaType.values()) { - System.out.println(" *** " + type.name()); - } - System.out.println(""); + Messages.printTypeNotValidMessage( + "schema", input.firstParameter(), fromEnumToArray(SchemaType.class)); } } else { Messages.printCommandOptionMessage(deleteErrorMessage); @@ -263,9 +253,7 @@ public class SchemaCommand extends AbstractCommand { 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); + Messages.printDefaultMessage(input.getOption(), HELP_MESSAGE); } } http://git-wip-us.apache.org/repos/asf/syncope/blob/2a99db9c/client/cli/src/main/java/org/apache/syncope/client/cli/commands/TaskCommand.java ---------------------------------------------------------------------- diff --git a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/TaskCommand.java b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/TaskCommand.java new file mode 100644 index 0000000..9dcb795 --- /dev/null +++ b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/TaskCommand.java @@ -0,0 +1,583 @@ +/* + * 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.commands; + +import java.util.ArrayList; +import java.util.List; +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.Messages; +import org.apache.syncope.common.lib.SyncopeClientException; +import org.apache.syncope.common.lib.to.AbstractTaskTO; +import org.apache.syncope.common.lib.to.AnyTO; +import org.apache.syncope.common.lib.to.NotificationTaskTO; +import org.apache.syncope.common.lib.to.PropagationTaskTO; +import org.apache.syncope.common.lib.to.PushTaskTO; +import org.apache.syncope.common.lib.to.SchedTaskTO; +import org.apache.syncope.common.lib.to.SyncTaskTO; +import org.apache.syncope.common.lib.to.TaskExecTO; +import org.apache.syncope.common.lib.types.JobStatusType; +import org.apache.syncope.common.lib.types.TaskType; +import org.apache.syncope.common.rest.api.beans.TaskQuery; +import org.apache.syncope.common.rest.api.service.TaskService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +@Command(name = "task") +public class TaskCommand extends AbstractCommand { + + private static final Logger LOG = LoggerFactory.getLogger(LoggerCommand.class); + + private static final String HELP_MESSAGE = "Usage: task [options]\n" + + " Options:\n" + + " --help \n" + + " --list-task \n" + + " Syntax: --list-task {TASK-TYPE} \n" + + " Task type: NOTIFICATION / PROPAGATION / PUSH / SCHEDULED / SYNCHRONIZATION\n" + + " --list-running-jobs \n" + + " --list-scheduled-jobs \n" + + " --read \n" + + " Syntax: --read {TASK-ID} {TASK-ID} [...]\n" + + " --read-execution \n" + + " Syntax: --read-execution {TASK-EXEC-ID} {TASK-EXEC-ID} [...]\n" + + " --delete \n" + + " Syntax: --delete {TASK-ID} {TASK-ID} [...]\n" + + " --delete-execution \n" + + " Syntax: --delete-execution {TASK-EXEC-ID} {TASK-EXEC-ID} [...]\n" + + " --execute \n" + + " Syntax: --execute {TASK-ID} {DRY-RUN}" + + " Dry run: true / false"; + + @Override + public void execute(final Input input) { + LOG.debug("Option: {}", input.getOption()); + LOG.debug("Parameters:"); + for (final String parameter : input.getParameters()) { + LOG.debug(" > " + parameter); + } + + final String[] parameters = input.getParameters(); + + if (StringUtils.isBlank(input.getOption())) { + input.setOption(Options.HELP.getOptionName()); + } + + final TaskService taskService = SyncopeServices.get(TaskService.class); + switch (Options.fromName(input.getOption())) { + case LIST_TASK: + final String listTaskErrorMessage = "task --list-task {TASK-TYPE}\n" + + " Task type: NOTIFICATION / PROPAGATION / PUSH / SCHEDULED / SYNCHRONIZATION"; + if (parameters.length == 1) { + try { + final TaskType taskType = TaskType.valueOf(parameters[0]); + for (final AbstractTaskTO taskTO : taskService.list(taskType, new TaskQuery()).getResult()) { + switch (taskType) { + case NOTIFICATION: + final NotificationTaskTO notificationTaskTO = (NotificationTaskTO) taskTO; + System.out.println(""); + System.out.println(" - Notification task key: " + notificationTaskTO.getKey()); + System.out.println(" executed: " + notificationTaskTO.isExecuted()); + System.out.println(" sender: " + notificationTaskTO.getSender()); + System.out.println(" subjetc: " + notificationTaskTO.getSubject()); + System.out.println(" text body: " + notificationTaskTO.getTextBody()); + System.out.println(" html body: " + notificationTaskTO.getHtmlBody()); + System.out.println(" latest execution status: " + + notificationTaskTO.getLatestExecStatus()); + System.out.println(" start date: " + notificationTaskTO.getStartDate()); + System.out.println(" end date: " + notificationTaskTO.getEndDate()); + System.out.println(" recipients: " + notificationTaskTO.getRecipients()); + System.out.println(" trace level: " + notificationTaskTO.getTraceLevel()); + for (final TaskExecTO taskExecTO : notificationTaskTO.getExecutions()) { + printTaskExecTO(taskExecTO); + } + System.out.println(""); + break; + case PROPAGATION: + final PropagationTaskTO propagationTaskTO = (PropagationTaskTO) taskTO; + System.out.println(""); + System.out.println(" - Propagation task key: " + propagationTaskTO.getKey()); + System.out.println(" resource: " + propagationTaskTO.getResource()); + System.out.println(" any key: " + propagationTaskTO.getAnyKey()); + System.out.println(" any type kind: " + propagationTaskTO.getAnyTypeKind()); + System.out.println(" connector object key: " + + propagationTaskTO.getConnObjectKey()); + System.out.println(" old connector object key: " + + propagationTaskTO.getOldConnObjectKey()); + System.out.println(" latest execution status: " + + propagationTaskTO.getLatestExecStatus()); + System.out.println(" class name: " + propagationTaskTO.getObjectClassName()); + System.out.println(" xml attribute: " + propagationTaskTO.getXmlAttributes()); + System.out.println(" start date: " + propagationTaskTO.getStartDate()); + System.out.println(" end date: " + propagationTaskTO.getEndDate()); + System.out.println(" operation: " + propagationTaskTO.getOperation()); + for (final TaskExecTO taskExecTO : propagationTaskTO.getExecutions()) { + printTaskExecTO(taskExecTO); + } + System.out.println(""); + break; + case PUSH: + final PushTaskTO pushTaskTO = (PushTaskTO) taskTO; + System.out.println(""); + System.out.println(" - Push task key: " + pushTaskTO.getKey()); + System.out.println(" name: " + pushTaskTO.getName()); + System.out.println(" resource: " + pushTaskTO.getResource()); + System.out.println(" cron expression: " + pushTaskTO.getCronExpression()); + System.out.println(" description: " + pushTaskTO.getDescription()); + System.out.println(" is perform create: " + pushTaskTO.isPerformCreate()); + System.out.println(" is perform delete: " + pushTaskTO.isPerformDelete()); + System.out.println(" is perform update: " + pushTaskTO.isPerformUpdate()); + System.out.println(" is sync status: " + pushTaskTO.isSyncStatus()); + System.out.println(" start date: " + pushTaskTO.getStartDate()); + System.out.println(" end date: " + pushTaskTO.getEndDate()); + System.out.println(" last execution: " + pushTaskTO.getLastExec()); + System.out.println(" next execution: " + pushTaskTO.getNextExec()); + System.out.println(" latest execution status: " + + pushTaskTO.getLatestExecStatus()); + System.out.println(" filters: " + pushTaskTO.getFilters()); + System.out.println(" delegate class: " + pushTaskTO.getJobDelegateClassName()); + System.out.println(" action class: " + pushTaskTO.getActionsClassNames()); + System.out.println(" matching rule: " + pushTaskTO.getMatchingRule()); + System.out.println(" not matching rule: " + pushTaskTO.getUnmatchingRule()); + for (final TaskExecTO taskExecTO : pushTaskTO.getExecutions()) { + printTaskExecTO(taskExecTO); + } + System.out.println(""); + break; + case SCHEDULED: + final SchedTaskTO schedTaskTO = (SchedTaskTO) taskTO; + System.out.println(""); + System.out.println(" - Scheduled task key: " + schedTaskTO.getKey()); + System.out.println(" name: " + schedTaskTO.getName()); + System.out.println(" cron expression: " + schedTaskTO.getCronExpression()); + System.out.println(" description: " + schedTaskTO.getDescription()); + System.out.println(" start date: " + schedTaskTO.getStartDate()); + System.out.println(" end date: " + schedTaskTO.getEndDate()); + System.out.println(" last execution: " + schedTaskTO.getLastExec()); + System.out.println(" next execution: " + schedTaskTO.getNextExec()); + System.out.println(" latest execution status: " + + schedTaskTO.getLatestExecStatus()); + System.out.println(" job delegate class: " + + schedTaskTO.getJobDelegateClassName()); + for (final TaskExecTO taskExecTO : schedTaskTO.getExecutions()) { + printTaskExecTO(taskExecTO); + } + System.out.println(""); + break; + case SYNCHRONIZATION: + final SyncTaskTO syncTaskTO = (SyncTaskTO) taskTO; + System.out.println(""); + System.out.println(" - Sync task key: " + syncTaskTO.getKey()); + System.out.println(" name: " + syncTaskTO.getName()); + System.out.println(" resource: " + syncTaskTO.getResource()); + System.out.println(" realm destination: " + syncTaskTO.getDestinationRealm()); + System.out.println(" cron expression: " + syncTaskTO.getCronExpression()); + System.out.println(" description: " + syncTaskTO.getDescription()); + System.out.println(" is full reconciliation: " + + syncTaskTO.isFullReconciliation()); + System.out.println(" is perform create: " + syncTaskTO.isPerformCreate()); + System.out.println(" is perform delete: " + syncTaskTO.isPerformDelete()); + System.out.println(" is perform update: " + syncTaskTO.isPerformUpdate()); + System.out.println(" is sync status: " + syncTaskTO.isSyncStatus()); + System.out.println(" templates:"); + for (Map.Entry<String, AnyTO> entrySet : syncTaskTO.getTemplates().entrySet()) { + final String key = entrySet.getKey(); + final AnyTO value = entrySet.getValue(); + System.out.println(" " + key + " key: " + value.getKey() + + " of realm" + value.getRealm() + + " on resource " + value.getResources()); + + } + System.out.println(" start date: " + syncTaskTO.getStartDate()); + System.out.println(" end date: " + syncTaskTO.getEndDate()); + System.out.println(" next execution: " + syncTaskTO.getNextExec()); + System.out.println(" last execution: " + syncTaskTO.getLastExec()); + System.out.println(" latest execution status: " + + syncTaskTO.getLatestExecStatus()); + System.out.println(" job delegate class: " + + syncTaskTO.getJobDelegateClassName()); + System.out.println(" action class name: " + syncTaskTO.getActionsClassNames()); + System.out.println(" matching rule: " + syncTaskTO.getMatchingRule()); + System.out.println(" unmatching rule: " + syncTaskTO.getUnmatchingRule()); + for (final TaskExecTO taskExecTO : syncTaskTO.getExecutions()) { + printTaskExecTO(taskExecTO); + } + System.out.println(""); + break; + default: + break; + } + } + } catch (final SyncopeClientException ex) { + Messages.printMessage(ex.getMessage()); + } catch (final IllegalArgumentException ex) { + Messages.printTypeNotValidMessage("task", parameters[0], fromEnumToArray(TaskType.class)); + } + } else { + Messages.printCommandOptionMessage(listTaskErrorMessage); + } + break; + case LIST_RUNNING_JOBS: + try { + for (final TaskExecTO taskExecTO : taskService.listJobs(JobStatusType.RUNNING)) { + printTaskExecTO(taskExecTO); + } + } catch (final SyncopeClientException ex) { + Messages.printMessage(ex.getMessage()); + } + break; + case LIST_SCHEDULED_JOBS: + try { + for (final TaskExecTO taskExecTO : taskService.listJobs(JobStatusType.SCHEDULED)) { + printTaskExecTO(taskExecTO); + } + } catch (final SyncopeClientException ex) { + Messages.printMessage(ex.getMessage()); + } + break; + case READ: + final String readErrorMessage = "task --read {TASK-ID} {TASK-ID} [...]"; + if (parameters.length >= 1) { + for (final String parameter : parameters) { + try { + final AbstractTaskTO taskTO = taskService.read(Long.valueOf(parameter)); + if (taskTO instanceof NotificationTaskTO) { + final NotificationTaskTO notificationTaskTO = (NotificationTaskTO) taskTO; + System.out.println(""); + System.out.println(" - Notification task key: " + notificationTaskTO.getKey()); + System.out.println(" executed: " + notificationTaskTO.isExecuted()); + System.out.println(" sender: " + notificationTaskTO.getSender()); + System.out.println(" subjetc: " + notificationTaskTO.getSubject()); + System.out.println(" text body: " + notificationTaskTO.getTextBody()); + System.out.println(" html body: " + notificationTaskTO.getHtmlBody()); + System.out.println(" latest execution status: " + + notificationTaskTO.getLatestExecStatus()); + System.out.println(" start date: " + notificationTaskTO.getStartDate()); + System.out.println(" end date: " + notificationTaskTO.getEndDate()); + System.out.println(" recipients: " + notificationTaskTO.getRecipients()); + System.out.println(" trace level: " + notificationTaskTO.getTraceLevel()); + for (final TaskExecTO taskExecTO : notificationTaskTO.getExecutions()) { + printTaskExecTO(taskExecTO); + } + System.out.println(""); + } else if (taskTO instanceof PropagationTaskTO) { + final PropagationTaskTO propagationTaskTO = (PropagationTaskTO) taskTO; + System.out.println(""); + System.out.println(" - Propagation task key: " + propagationTaskTO.getKey()); + System.out.println(" resource: " + propagationTaskTO.getResource()); + System.out.println(" any key: " + propagationTaskTO.getAnyKey()); + System.out.println(" any type kind: " + propagationTaskTO.getAnyTypeKind()); + System.out.println(" connector object key: " + + propagationTaskTO.getConnObjectKey()); + System.out.println(" old connector object key: " + + propagationTaskTO.getOldConnObjectKey()); + System.out.println(" latest execution status: " + + propagationTaskTO.getLatestExecStatus()); + System.out.println(" class name: " + propagationTaskTO.getObjectClassName()); + System.out.println(" xml attribute: " + propagationTaskTO.getXmlAttributes()); + System.out.println(" start date: " + propagationTaskTO.getStartDate()); + System.out.println(" end date: " + propagationTaskTO.getEndDate()); + System.out.println(" operation: " + propagationTaskTO.getOperation()); + for (final TaskExecTO taskExecTO : propagationTaskTO.getExecutions()) { + printTaskExecTO(taskExecTO); + } + System.out.println(""); + } else if (taskTO instanceof PushTaskTO) { + final PushTaskTO pushTaskTO = (PushTaskTO) taskTO; + System.out.println(""); + System.out.println(" - Push task key: " + pushTaskTO.getKey()); + System.out.println(" name: " + pushTaskTO.getName()); + System.out.println(" resource: " + pushTaskTO.getResource()); + System.out.println(" cron expression: " + pushTaskTO.getCronExpression()); + System.out.println(" description: " + pushTaskTO.getDescription()); + System.out.println(" is perform create: " + pushTaskTO.isPerformCreate()); + System.out.println(" is perform delete: " + pushTaskTO.isPerformDelete()); + System.out.println(" is perform update: " + pushTaskTO.isPerformUpdate()); + System.out.println(" is sync status: " + pushTaskTO.isSyncStatus()); + System.out.println(" start date: " + pushTaskTO.getStartDate()); + System.out.println(" end date: " + pushTaskTO.getEndDate()); + System.out.println(" last execution: " + pushTaskTO.getLastExec()); + System.out.println(" next execution: " + pushTaskTO.getNextExec()); + System.out.println(" latest execution status: " + + pushTaskTO.getLatestExecStatus()); + System.out.println(" filters: " + pushTaskTO.getFilters()); + System.out.println(" delegate class: " + pushTaskTO.getJobDelegateClassName()); + System.out.println(" action class: " + pushTaskTO.getActionsClassNames()); + System.out.println(" matching rule: " + pushTaskTO.getMatchingRule()); + System.out.println(" not matching rule: " + pushTaskTO.getUnmatchingRule()); + for (final TaskExecTO taskExecTO : pushTaskTO.getExecutions()) { + printTaskExecTO(taskExecTO); + } + System.out.println(""); + } else if (taskTO instanceof SchedTaskTO) { + final SchedTaskTO schedTaskTO = (SchedTaskTO) taskTO; + System.out.println(""); + System.out.println(" - Scheduled task key: " + schedTaskTO.getKey()); + System.out.println(" name: " + schedTaskTO.getName()); + System.out.println(" cron expression: " + schedTaskTO.getCronExpression()); + System.out.println(" description: " + schedTaskTO.getDescription()); + System.out.println(" start date: " + schedTaskTO.getStartDate()); + System.out.println(" end date: " + schedTaskTO.getEndDate()); + System.out.println(" last execution: " + schedTaskTO.getLastExec()); + System.out.println(" next execution: " + schedTaskTO.getNextExec()); + System.out.println(" latest execution status: " + + schedTaskTO.getLatestExecStatus()); + System.out.println(" job delegate class: " + + schedTaskTO.getJobDelegateClassName()); + for (final TaskExecTO taskExecTO : schedTaskTO.getExecutions()) { + printTaskExecTO(taskExecTO); + } + System.out.println(""); + } else if (taskTO instanceof SyncTaskTO) { + final SyncTaskTO syncTaskTO = (SyncTaskTO) taskTO; + System.out.println(""); + System.out.println(" - Sync task key: " + syncTaskTO.getKey()); + System.out.println(" name: " + syncTaskTO.getName()); + System.out.println(" resource: " + syncTaskTO.getResource()); + System.out.println(" realm destination: " + syncTaskTO.getDestinationRealm()); + System.out.println(" cron expression: " + syncTaskTO.getCronExpression()); + System.out.println(" description: " + syncTaskTO.getDescription()); + System.out.println(" is full reconciliation: " + + syncTaskTO.isFullReconciliation()); + System.out.println(" is perform create: " + syncTaskTO.isPerformCreate()); + System.out.println(" is perform delete: " + syncTaskTO.isPerformDelete()); + System.out.println(" is perform update: " + syncTaskTO.isPerformUpdate()); + System.out.println(" is sync status: " + syncTaskTO.isSyncStatus()); + System.out.println(" templates:"); + for (Map.Entry<String, AnyTO> entrySet : syncTaskTO.getTemplates().entrySet()) { + final String key = entrySet.getKey(); + final AnyTO value = entrySet.getValue(); + System.out.println(" " + key + "key : " + value.getKey() + + " of realm" + value.getRealm() + + " on resource " + value.getResources()); + + } + System.out.println(" start date: " + syncTaskTO.getStartDate()); + System.out.println(" end date: " + syncTaskTO.getEndDate()); + System.out.println(" next execution: " + syncTaskTO.getNextExec()); + System.out.println(" last execution: " + syncTaskTO.getLastExec()); + System.out.println(" latest execution status: " + + syncTaskTO.getLatestExecStatus()); + System.out.println(" job delegate class: " + + syncTaskTO.getJobDelegateClassName()); + System.out.println(" action class name: " + syncTaskTO.getActionsClassNames()); + System.out.println(" matching rule: " + syncTaskTO.getMatchingRule()); + System.out.println(" unmatching rule: " + syncTaskTO.getUnmatchingRule()); + for (final TaskExecTO taskExecTO : syncTaskTO.getExecutions()) { + printTaskExecTO(taskExecTO); + } + System.out.println(""); + } + } catch (final NumberFormatException ex) { + Messages.printIdNotNumberDeletedMessage("task", parameter); + } catch (final SyncopeClientException | WebServiceException ex) { + if (ex.getMessage().startsWith("NotFound")) { + Messages.printNofFoundMessage("Task", parameter); + } else { + Messages.printMessage("Error: " + ex.getMessage()); + } + break; + } + } + } else { + Messages.printCommandOptionMessage(readErrorMessage); + } + break; + case READ_EXECUTION: + final String readExecutionErrorMessage = "task --read-execution {TASK-ID} {TASK-ID} [...]"; + if (parameters.length >= 1) { + for (final String parameter : parameters) { + try { + final TaskExecTO taskExecTO = taskService.readExecution(Long.valueOf(parameter)); + printTaskExecTO(taskExecTO); + } catch (final NumberFormatException ex) { + Messages.printIdNotNumberDeletedMessage("task execution", parameter); + } catch (final SyncopeClientException | WebServiceException ex) { + if (ex.getMessage().startsWith("NotFound")) { + Messages.printNofFoundMessage("Task execution", parameter); + } else { + Messages.printMessage("Error: " + ex.getMessage()); + } + break; + } + } + } else { + Messages.printCommandOptionMessage(readExecutionErrorMessage); + } + break; + case DELETE: + final String deleteErrorMessage = "task --delete {TASK-ID} {TASK-ID} [...]"; + + if (parameters.length >= 1) { + for (final String parameter : parameters) { + try { + taskService.delete(Long.valueOf(parameter)); + Messages.printDeletedMessage("Task", parameter); + } catch (final WebServiceException | SyncopeClientException ex) { + if (ex.getMessage().startsWith("NotFound")) { + Messages.printNofFoundMessage("Task", parameter); + } else if (ex.getMessage().startsWith("DataIntegrityViolation")) { + Messages.printMessage("You cannot delete task " + parameter); + } else { + Messages.printMessage(ex.getMessage()); + } + } catch (final NumberFormatException ex) { + Messages.printIdNotNumberDeletedMessage("task", parameter); + } + } + } else { + Messages.printCommandOptionMessage(deleteErrorMessage); + } + break; + case DELETE_EXECUTION: + final String deleteExecutionErrorMessage = "task --delete-execution " + + "{TASK-EXEC-ID} {TASK-EXEC-ID} [...]"; + + if (parameters.length >= 1) { + for (final String parameter : parameters) { + try { + taskService.deleteExecution(Long.valueOf(parameter)); + Messages.printDeletedMessage("Task execution", parameter); + } catch (final WebServiceException | SyncopeClientException ex) { + if (ex.getMessage().startsWith("NotFound")) { + Messages.printNofFoundMessage("Task execution", parameter); + } else if (ex.getMessage().startsWith("DataIntegrityViolation")) { + Messages.printMessage("You cannot delete task execution" + parameter); + } else { + Messages.printMessage(ex.getMessage()); + } + } catch (final NumberFormatException ex) { + Messages.printIdNotNumberDeletedMessage("task execution", parameter); + } + } + } else { + Messages.printCommandOptionMessage(deleteExecutionErrorMessage); + } + break; + case EXECUTE: + final String executeErrorMessage = "task --execute {TASK-ID} {DRY-RUN}\n" + + " Dry run: true / false"; + + if (parameters.length == 2) { + + try { + final Long taskIdToExecute = Long.valueOf(parameters[0]); + boolean dryRun; + if ("false".equalsIgnoreCase(parameters[1])) { + dryRun = false; + } else if ("true".equalsIgnoreCase(parameters[1])) { + dryRun = true; + } else { + Messages.printNotBooleanDeletedMessage("dry run", parameters[1]); + break; + } + final TaskExecTO taskExecTO = taskService.execute(taskIdToExecute, dryRun); + printTaskExecTO(taskExecTO); + } catch (final WebServiceException | SyncopeClientException ex) { + System.out.println("Error:"); + if (ex.getMessage().startsWith("NotFound")) { + Messages.printNofFoundMessage("Task", parameters[0]); + } else if (ex.getMessage().startsWith("DataIntegrityViolation")) { + Messages.printMessage("You cannot delete task " + parameters[0]); + } else { + Messages.printMessage(ex.getMessage()); + } + } catch (final NumberFormatException ex) { + Messages.printIdNotNumberDeletedMessage("task", parameters[0]); + } + } else { + Messages.printCommandOptionMessage(executeErrorMessage); + } + break; + case HELP: + System.out.println(HELP_MESSAGE); + break; + default: + Messages.printDefaultMessage(input.getOption(), HELP_MESSAGE); + } + + } + + private void printTaskExecTO(final TaskExecTO taskExecTO) { + System.out.println(" EXECUTIONS: "); + System.out.println(" - task execution key: " + taskExecTO.getKey()); + System.out.println(" task: " + taskExecTO.getTask()); + System.out.println(" message: "); + System.out.println(" ############### <BEGIN MESSAGE> ###############"); + System.out.println(" message: " + taskExecTO.getMessage()); + System.out.println(" ############### <END MESSAGE> ###############"); + System.out.println(" status: " + taskExecTO.getStatus()); + System.out.println(" start date: " + taskExecTO.getStartDate()); + System.out.println(" end date: " + taskExecTO.getEndDate()); + System.out.println(""); + } + + @Override + public String getHelpMessage() { + return HELP_MESSAGE; + } + + private enum Options { + + HELP("--help"), + LIST_TASK("--list-task"), + LIST_RUNNING_JOBS("--list-running-jobs"), + LIST_SCHEDULED_JOBS("--list-scheduled-jobs"), + READ("--read"), + READ_EXECUTION("--read-execution"), + DELETE("--delete"), + DELETE_EXECUTION("--delete-execution"), + EXECUTE("--execute"); + + 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; + } + } + return optionToReturn; + } + + public static List<String> toList() { + final List<String> options = new ArrayList<>(); + for (final Options value : values()) { + options.add(value.getOptionName()); + } + return options; + } + } +} http://git-wip-us.apache.org/repos/asf/syncope/blob/2a99db9c/client/cli/src/main/java/org/apache/syncope/client/cli/messages/Messages.java ---------------------------------------------------------------------- diff --git a/client/cli/src/main/java/org/apache/syncope/client/cli/messages/Messages.java b/client/cli/src/main/java/org/apache/syncope/client/cli/messages/Messages.java index d1a9fdc..e2cb159 100644 --- a/client/cli/src/main/java/org/apache/syncope/client/cli/messages/Messages.java +++ b/client/cli/src/main/java/org/apache/syncope/client/cli/messages/Messages.java @@ -26,6 +26,16 @@ public final class Messages { private static final String DOESNT_EXIST_MESSAGE_TEMPLATE = "%s %s doesn't exist"; + private static final String TYPE_NOT_VALID_MESSAGE_TEMPLATE = "%s isn't a valid %s type, try with: %s"; + + private static final String ID_NOT_NUMBER_MESSAGE_TEMPLATE = "Error reading %s. It isn't a valid %s " + + "id because it isn't a long value"; + + private static final String NOT_BOOLEAN_MESSAGE_TEMPLATE = "Error reading %s. It isn't a valid %s " + + "value because it isn't a boolean value"; + + private static final String DEFAULT_MESSAGE_TEMPLATE = "%s is not a valid option. \n\b %s"; + public static void printCommandOptionMessage(final String message) { System.out.println(String.format(OPTION_COMMAND_MESSAGE_TEMPLATE, message)); } @@ -46,6 +56,26 @@ public final class Messages { printMessage(String.format(DELETED_MESSAGE_TEMPLATE, what, key)); } + public static void printIdNotNumberDeletedMessage(final String what, final String key) { + printMessage(String.format(ID_NOT_NUMBER_MESSAGE_TEMPLATE, key, what)); + } + + public static void printNotBooleanDeletedMessage(final String what, final String key) { + printMessage(String.format(NOT_BOOLEAN_MESSAGE_TEMPLATE, key, what)); + } + + public static void printTypeNotValidMessage(final String what, final String key, final String[] types) { + final StringBuilder typesBuilder = new StringBuilder(); + for (final String type : types) { + typesBuilder.append("\n *** ").append(type); + } + printMessage(String.format(TYPE_NOT_VALID_MESSAGE_TEMPLATE, key, what, typesBuilder.toString())); + } + + public static void printDefaultMessage(final String option, final String helpMessage) { + printMessage(String.format(DEFAULT_MESSAGE_TEMPLATE, option, helpMessage)); + } + private Messages() { } http://git-wip-us.apache.org/repos/asf/syncope/blob/2a99db9c/common/lib/src/main/java/org/apache/syncope/common/lib/types/TaskType.java ---------------------------------------------------------------------- diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/types/TaskType.java b/common/lib/src/main/java/org/apache/syncope/common/lib/types/TaskType.java index a20d0a7..a60a5af 100644 --- a/common/lib/src/main/java/org/apache/syncope/common/lib/types/TaskType.java +++ b/common/lib/src/main/java/org/apache/syncope/common/lib/types/TaskType.java @@ -29,7 +29,7 @@ public enum TaskType { SYNCHRONIZATION("sync"), PUSH("push"); - private String name; + private final String name; private TaskType(final String name) { this.name = name;