You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@syncope.apache.org by ma...@apache.org on 2015/10/14 15:11:04 UTC

[3/5] syncope git commit: Fixed SYNCOPE-586

Fixed SYNCOPE-586


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

Branch: refs/heads/master
Commit: 1483986e37ba33d62be19f8fc3370cd5b79a0d34
Parents: 237f90f
Author: massi <ma...@tirasa.net>
Authored: Wed Oct 14 15:10:16 2015 +0200
Committer: massi <ma...@tirasa.net>
Committed: Wed Oct 14 15:10:16 2015 +0200

----------------------------------------------------------------------
 .../client/cli/commands/PolicyCommand.java      | 193 +++++++++++++------
 1 file changed, 134 insertions(+), 59 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/syncope/blob/1483986e/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 ae34f53..d17419f 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
@@ -18,10 +18,12 @@
  */
 package org.apache.syncope.client.cli.commands;
 
-import com.beust.jcommander.Parameter;
-import com.beust.jcommander.Parameters;
+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.policy.AbstractPolicyTO;
 import org.apache.syncope.common.lib.types.PolicyType;
@@ -29,76 +31,149 @@ import org.apache.syncope.common.rest.api.service.PolicyService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-@Parameters(
-        commandNames = "policy",
-        optionPrefixes = "-",
-        separators = "=",
-        commandDescription = "Apache Syncope policy service")
+@Command(name = "policy")
 public class PolicyCommand extends AbstractCommand {
 
     private static final Logger LOG = LoggerFactory.getLogger(PolicyCommand.class);
 
-    private final String helpMessage = "Usage: policy [options]\n"
+    private static final String HELP_MESSAGE = "Usage: policy [options]\n"
             + "  Options:\n"
-            + "    -h, --help \n"
-            + "    -l, --list \n"
-            + "    -ll, --list-policy \n"
-            + "       Syntax: -ll={POLICY-TYPE} \n"
-            + "    -r, --read \n"
-            + "       Syntax: -r={POLICY-ID} \n"
-            + "    -d, --delete \n"
-            + "       Syntax: -d={POLICY-ID}";
+            + "    --help \n"
+            + "    --list-policy \n"
+            + "       Syntax: --list-policy {POLICY-TYPE} \n"
+            + "          Policy type: ACCOUNT / PASSWORD / SYNC / PUSH\n"
+            + "    --read \n"
+            + "       Syntax: --read {POLICY-ID} {POLICY-ID} [...]\n"
+            + "    --delete \n"
+            + "       Syntax: --delete {POLICY-ID} {POLICY-ID} [...]";
 
-    @Parameter(names = { "-ll", "--list-policy" })
-    private String policyType;
+    @Override
+    public void execute(final Input input) {
+        LOG.debug("Option: {}", input.getOption());
+        LOG.debug("Parameters:");
+        for (final String parameter : input.getParameters()) {
+            LOG.debug("   > " + parameter);
+        }
 
-    @Parameter(names = { "-r", "--read" })
-    private Long policyIdToRead = -1L;
+        final String[] parameters = input.getParameters();
 
-    @Parameter(names = { "-d", "--delete" })
-    private Long policyIdToDelete = -1L;
+        if (StringUtils.isBlank(input.getOption())) {
+            input.setOption(Options.HELP.getOptionName());
+        }
 
-    @Override
-    public void execute() {
         final PolicyService policyService = SyncopeServices.get(PolicyService.class);
-        LOG.debug("Policy service successfully created");
-
-        if (help) {
-            LOG.debug("- policy help command");
-            System.out.println(helpMessage);
-        } else if (list) {
-            // do nothing for the moment...
-        } else if (StringUtils.isNotBlank(policyType)) {
-            LOG.debug("- policy list command for type {}", policyType);
-            try {
-                for (final AbstractPolicyTO policyTO : policyService.list(PolicyType.valueOf(policyType))) {
-                    System.out.println(policyTO);
+        switch (Options.fromName(input.getOption())) {
+            case LIST_POLICY:
+                final String listPolicyErrorMessage = UsageMessages.optionCommandMessage(
+                        "Usage: policy --list-policy {POLICY-TYPE}\n"
+                        + "   Policy type: ACCOUNT / PASSWORD / SYNC / PUSH");
+                if (parameters.length == 1) {
+                    try {
+                        for (final AbstractPolicyTO policyTO : policyService.list(PolicyType.valueOf(parameters[0]))) {
+                            System.out.println(policyTO);
+                        }
+                    } catch (final SyncopeClientException ex) {
+                        UsageMessages.printErrorMessage(ex.getMessage());
+                    } catch (final IllegalArgumentException ex) {
+                        UsageMessages.printErrorMessage(
+                                "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("");
+                    }
+                } else {
+                    System.out.println(listPolicyErrorMessage);
                 }
-            } catch (final SyncopeClientException ex) {
-                System.out.println(" - Error: " + ex.getMessage());
-            } catch (final IllegalArgumentException ex) {
-                System.out.println(" - Error: " + policyType + " isn't a valid policy type, try with:");
-                for (final PolicyType type : PolicyType.values()) {
-                    System.out.println("  *** " + type.name());
+                break;
+            case READ:
+                final String readErrorMessage = UsageMessages.optionCommandMessage(
+                        "Usage: policy --read {POLICY-ID} {POLICY-ID} [...]");
+                if (parameters.length >= 1) {
+                    for (final String parameter : parameters) {
+                        try {
+                            System.out.println(policyService.read(Long.valueOf(parameter)));
+                        } catch (final NumberFormatException ex) {
+                            UsageMessages.printErrorMessage(
+                                    "Error reading " + parameter + ". It isn't a valid policy id");
+                        } catch (final WebServiceException | SyncopeClientException ex) {
+                            if (ex.getMessage().startsWith("NotFound")) {
+                                UsageMessages.printErrorMessage("Policy " + parameter + " doesn't exists!");
+                            } else {
+                                UsageMessages.printErrorMessage(ex.getMessage());
+                            }
+                        }
+                    }
+                } else {
+                    System.out.println(readErrorMessage);
+                }
+                break;
+            case DELETE:
+                final String deleteErrorMessage = UsageMessages.optionCommandMessage(
+                        "Usage: policy --delete {POLICY-ID} {POLICY-ID} [...]");
+
+                if (parameters.length >= 1) {
+                    for (final String parameter : parameters) {
+                        try {
+                            policyService.delete(Long.valueOf(parameter));
+                            System.out.println(" - Policy " + parameter + " deleted!");
+                        } catch (final WebServiceException | SyncopeClientException ex) {
+                            System.out.println("Error:");
+                            if (ex.getMessage().startsWith("NotFound")) {
+                                UsageMessages.printErrorMessage("Policy " + parameter + " doesn't exists!");
+                            } else if (ex.getMessage().startsWith("DataIntegrityViolation")) {
+                                UsageMessages.printErrorMessage("You cannot delete policy " + parameter);
+                            } else {
+                                UsageMessages.printErrorMessage(ex.getMessage());
+                            }
+                        } catch (final NumberFormatException ex) {
+                            UsageMessages.printErrorMessage(
+                                    "Error reading " + parameter + ". It isn't a valid policy id");
+                        }
+                    }
+                } 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_POLICY("--list-policy"),
+        READ("--read"),
+        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 (policyIdToRead > -1L) {
-            LOG.debug("- policy read {} command", policyIdToRead);
-            try {
-                System.out.println(policyService.read(policyIdToRead));
-            } catch (final SyncopeClientException ex) {
-                System.out.println(" - Error: " + ex.getMessage());
-            }
-        } else if (policyIdToDelete > -1L) {
-            try {
-                LOG.debug("- policy delete {} command", policyIdToDelete);
-                policyService.delete(policyIdToDelete);
-                System.out.println(" - Report " + policyIdToDelete + " deleted!");
-            } catch (final SyncopeClientException ex) {
-                System.out.println(" - Error: " + ex.getMessage());
-            }
-        } else {
-            System.out.println(helpMessage);
+            return optionToReturn;
         }
     }