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:05 UTC

[4/5] syncope git commit: Fixed SYNCOPE-587

Fixed SYNCOPE-587


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

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

----------------------------------------------------------------------
 .../client/cli/commands/ReportCommand.java      | 438 +++++++++++++------
 1 file changed, 308 insertions(+), 130 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/syncope/blob/a61c801b/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 def8f50..ffa8ecd 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
@@ -18,162 +18,340 @@
  */
 package org.apache.syncope.client.cli.commands;
 
-import com.beust.jcommander.Parameter;
-import com.beust.jcommander.Parameters;
 import java.io.IOException;
 import java.io.SequenceInputStream;
+import java.util.Arrays;
 import java.util.List;
 import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.transform.TransformerConfigurationException;
 import javax.xml.transform.TransformerException;
+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.client.cli.util.XMLUtils;
 import org.apache.syncope.common.lib.SyncopeClientException;
 import org.apache.syncope.common.lib.to.ReportExecTO;
 import org.apache.syncope.common.lib.to.ReportTO;
+import org.apache.syncope.common.lib.types.JobStatusType;
 import org.apache.syncope.common.lib.types.ReportExecExportFormat;
 import org.apache.syncope.common.rest.api.service.ReportService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.xml.sax.SAXException;
 
-@Parameters(
-        commandNames = "report",
-        optionPrefixes = "-",
-        separators = "=",
-        commandDescription = "Apache Syncope report service")
+@Command(name = "report")
 public class ReportCommand extends AbstractCommand {
 
     private static final Logger LOG = LoggerFactory.getLogger(ReportCommand.class);
 
-    private final String helpMessage = "Usage: report [options]\n"
+    private static final String HELP_MESSAGE = "Usage: report [options]\n"
             + "  Options:\n"
-            + "    -h, --help \n"
-            + "    -l, --list \n"
-            + "    -r, --read \n"
-            + "       Syntax: -r={POLICY-ID} \n"
-            + "    -d, --delete \n"
-            + "       Syntax: -d={POLICY-ID} \n"
-            + "    -e, --execute \n"
-            + "       Syntax: -e={POLICY-ID} \n"
-            + "    -re, --read-executecution \n"
-            + "       Syntax: -re={EXECUTION-ID} \n"
-            + "    -de, --delete-executecution \n"
-            + "       Syntax: -de={EXECUTION-ID} \n"
-            + "    -eer, --export-executecution-result \n"
-            + "       Syntax: -eer={EXECUTION-ID} \n"
-            + "    -rc, --reportlet-class";
-
-    @Parameter(names = { "-r", "--read" })
-    private Long reportIdToRead = -1L;
-
-    @Parameter(names = { "-d", "--delete" })
-    private Long reportIdToDelete = -1L;
-
-    @Parameter(names = { "-e", "--execute" })
-    private Long reportIdToExecute = -1L;
-
-    @Parameter(names = { "-re", "--read-execution" })
-    private Long executionIdToRead = -1L;
-
-    @Parameter(names = { "-de", "--delete-execution" })
-    private Long executionIdToDelete = -1L;
-
-    @Parameter(names = { "-eer", "--export-execution-result" })
-    private Long exportId = -1L;
+            + "    --help \n"
+            + "    --list \n"
+            + "    --read \n"
+            + "       Syntax: --read {REPORT-ID} {REPORT-ID} [...] \n"
+            + "    --delete \n"
+            + "       Syntax: --delete {REPORT-ID} {REPORT-ID} [...]\n"
+            + "    --execute \n"
+            + "       Syntax: --execute {REPORT-ID} \n"
+            + "    --read-execution \n"
+            + "       Syntax: --read-execution {EXECUTION-ID} {EXECUTION-ID} [...]\n"
+            + "    --delete-execution \n"
+            + "       Syntax: --delete-execution {EXECUTION-ID} {EXECUTION-ID} [...]\n"
+            + "    --export-execution-result \n"
+            + "       Syntax: --export-execution-result {EXECUTION-ID} {EXECUTION-ID} [...] {FORMAT}\n"
+            + "          Format: CSV / HTML / PDF / XML / RTF"
+            + "    --reportlet-class";
 
     @Override
-    public void execute() {
+    public void execute(final Input input) {
+        LOG.debug("Option: {}", input.getOption());
+        LOG.debug("Parameters:");
+        for (final String parameter : input.getParameters()) {
+            LOG.debug("   > " + parameter);
+        }
+
+        String[] parameters = input.getParameters();
+
+        if (StringUtils.isBlank(input.getOption())) {
+            input.setOption(Options.HELP.getOptionName());
+        }
+
         final ReportService reportService = SyncopeServices.get(ReportService.class);
-        LOG.debug("Report service successfully created");
-
-        if (help) {
-            LOG.debug("- report help command");
-            System.out.println(helpMessage);
-        } else if (list) {
-            LOG.debug("- report list command");
-            try {
-                for (ReportTO reportTO : reportService.list()) {
-                    System.out.println(reportTO);
+        switch (Options.fromName(input.getOption())) {
+            case LIST:
+                try {
+                    for (final ReportTO reportTO : reportService.list()) {
+                        System.out.println(reportTO);
+                    }
+                } catch (final SyncopeClientException ex) {
+                    UsageMessages.printErrorMessage(ex.getMessage());
                 }
-            } catch (final SyncopeClientException ex) {
-                System.out.println(" - Error: " + ex.getMessage());
-            }
-        } else if (reportIdToRead > -1L) {
-            LOG.debug("- report read {} command", reportIdToRead);
-            try {
-                System.out.println(reportService.read(reportIdToRead));
-            } catch (final SyncopeClientException ex) {
-                System.out.println(" - Error: " + ex.getMessage());
-            }
-        } else if (reportIdToDelete > -1L) {
-            try {
-                LOG.debug("- report delete {} command", reportIdToDelete);
-                reportService.delete(reportIdToDelete);
-                System.out.println(" - Report " + reportIdToDelete + " deleted!");
-            } catch (final SyncopeClientException ex) {
-                System.out.println(" - Error: " + ex.getMessage());
-            }
-        } else if (reportIdToExecute > -1L) {
-            try {
-                LOG.debug("- report execute {} command", reportIdToExecute);
-                reportService.execute(reportIdToExecute);
-                final List<ReportExecTO> executionList = reportService.read(reportIdToExecute).getExecutions();
-                final ReportExecTO lastExecution = executionList.get(executionList.size() - 1);
-                System.out.println(" - Report execution id: " + lastExecution.getKey());
-                System.out.println(" - Report execution status: " + lastExecution.getStatus());
-                System.out.println(" - Report execution start date: " + lastExecution.getStartDate());
-            } catch (final SyncopeClientException ex) {
-                System.out.println(" - Error: " + ex.getMessage());
-            }
-        } else if (executionIdToRead > -1L) {
-            try {
-                LOG.debug("- report execution read {} command", executionIdToRead);
-                ReportExecTO reportExecTO = reportService.readExecution(executionIdToRead);
-                System.out.println(" - Report execution id: " + reportExecTO.getKey());
-                System.out.println(" - Report execution status: " + reportExecTO.getStatus());
-                System.out.println(" - Report execution start date: " + reportExecTO.getStartDate());
-                System.out.println(" - Report execution end date: " + reportExecTO.getEndDate());
-            } catch (final SyncopeClientException ex) {
-                System.out.println(" - Error: " + ex.getMessage());
-            }
-        } else if (executionIdToDelete > -1L) {
-            try {
-                LOG.debug("- report execution delete {} command", executionIdToDelete);
-                reportService.deleteExecution(executionIdToDelete);
-                System.out.println(" - Report execution " + executionIdToDelete + "successfyllt deleted!");
-            } catch (final SyncopeClientException ex) {
-                System.out.println(" - Error: " + ex.getMessage());
-            }
-        } else if (exportId > -1L) {
-            LOG.debug("- report export command for report: {}", exportId);
-
-            try {
-                XMLUtils.createXMLFile((SequenceInputStream) reportService.exportExecutionResult(exportId,
-                        ReportExecExportFormat.XML).getEntity(), "export_" + exportId + ".xml");
-                System.out.println(" - " + "export_" + exportId + " successfully created");
-            } catch (final IOException ex) {
-                LOG.error("Error creating xml file", ex);
-                System.out.println(" - Error creating " + "export_" + exportId + " " + ex.getMessage());
-            } catch (final ParserConfigurationException ex) {
-                LOG.error("Error creating xml file", ex);
-                System.out.println(" - Error creating " + "export_" + exportId + " " + ex.getMessage());
-            } catch (final SAXException ex) {
-                LOG.error("Error creating xml file", ex);
-                System.out.println(" - Error creating " + "export_" + exportId + " " + ex.getMessage());
-            } catch (final TransformerConfigurationException ex) {
-                LOG.error("Error creating xml file", ex);
-                System.out.println(" - Error creating " + "export_" + exportId + " " + ex.getMessage());
-            } catch (final TransformerException ex) {
-                LOG.error("Error creating xml file", ex);
-                System.out.println(" - Error creating export_" + exportId + " " + ex.getMessage());
-            } catch (final SyncopeClientException ex) {
-                LOG.error("Error calling configuration service", ex);
-                System.out.println(" - Error calling configuration service " + ex.getMessage());
-            }
-        } else {
-            System.out.println(helpMessage);
+                break;
+            case LIST_JOBS:
+                try {
+                    for (final JobStatusType jobStatusType : JobStatusType.values()) {
+                        System.out.println("Report execution for " + jobStatusType);
+                        final List<ReportExecTO> reportExecTOs = reportService.listJobs(jobStatusType);
+                        for (final ReportExecTO reportExecTO : reportExecTOs) {
+                            System.out.println(" - Report execution id: " + reportExecTO.getKey());
+                            System.out.println(" - Report execution status: " + reportExecTO.getStatus());
+                            System.out.println(" - Report execution start date: " + reportExecTO.getStartDate());
+                            System.out.println(" - Report execution end date: " + reportExecTO.getEndDate());
+                            System.out.println();
+                        }
+                    }
+                } catch (final SyncopeClientException ex) {
+                    UsageMessages.printErrorMessage(ex.getMessage());
+                }
+                break;
+            case READ:
+                final String readErrorMessage = UsageMessages.optionCommandMessage(
+                        "Usage: 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) {
+                            UsageMessages.printErrorMessage(
+                                    "Error reading " + parameter + ". It isn't a valid report id");
+                        } catch (final WebServiceException | SyncopeClientException ex) {
+                            if (ex.getMessage().startsWith("NotFound")) {
+                                UsageMessages.printErrorMessage("Report " + parameter + " doesn't exists!");
+                            } else {
+                                UsageMessages.printErrorMessage(ex.getMessage());
+                            }
+                        }
+                    }
+                } else {
+                    System.out.println(readErrorMessage);
+                }
+                break;
+            case DELETE:
+                final String deleteErrorMessage = UsageMessages.optionCommandMessage(
+                        "Usage: report --execute {REPORT-ID}");
+
+                if (parameters.length == 1) {
+                    for (final String parameter : parameters) {
+                        try {
+                            reportService.delete(Long.valueOf(parameter));
+                            System.out.println(" - Report " + parameter + " deleted!");
+                        } catch (final WebServiceException | SyncopeClientException ex) {
+                            if (ex.getMessage().startsWith("NotFound")) {
+                                UsageMessages.printErrorMessage("Report " + parameter + " doesn't exists!");
+                            } else if (ex.getMessage().startsWith("DataIntegrityViolation")) {
+                                UsageMessages.printErrorMessage("You cannot delete report " + parameter);
+                            } else {
+                                UsageMessages.printErrorMessage(ex.getMessage());
+                            }
+                        } catch (final NumberFormatException ex) {
+                            UsageMessages.printErrorMessage(
+                                    "Error reading " + parameter + ". It isn't a valid report id");
+                        }
+                    }
+                } else {
+                    System.out.println(deleteErrorMessage);
+                }
+                break;
+            case EXECUTE:
+                final String executeErrorMessage = UsageMessages.optionCommandMessage(
+                        "Usage: report --execute {REPORT-ID}");
+
+                if (parameters.length == 1) {
+
+                    try {
+                        final Long reportIdToExecute = Long.valueOf(parameters[0]);
+                        reportService.execute(reportIdToExecute);
+                        final List<ReportExecTO> executionList
+                                = reportService.read(reportIdToExecute).getExecutions();
+                        final ReportExecTO lastExecution = executionList.get(executionList.size() - 1);
+                        System.out.println(" - Report execution id: " + lastExecution.getKey());
+                        System.out.println(" - Report execution status: " + lastExecution.getStatus());
+                        System.out.println(" - Report execution start date: " + lastExecution.getStartDate());
+                    } catch (final WebServiceException | SyncopeClientException ex) {
+                        System.out.println("Error:");
+                        if (ex.getMessage().startsWith("NotFound")) {
+                            UsageMessages.printErrorMessage("Report " + parameters[0] + " doesn't exists!");
+                        } else if (ex.getMessage().startsWith("DataIntegrityViolation")) {
+                            UsageMessages.printErrorMessage("You cannot delete report " + parameters[0]);
+                        } else {
+                            UsageMessages.printErrorMessage(ex.getMessage());
+                        }
+                    } catch (final NumberFormatException ex) {
+                        UsageMessages.printErrorMessage(
+                                "Error reading " + parameters[0] + ". It isn't a valid report id");
+                    }
+                } else {
+                    System.out.println(executeErrorMessage);
+                }
+                break;
+            case READ_EXECUTION:
+                final String readExecutionErrorMessage = UsageMessages.optionCommandMessage(
+                        "Usage: report --read-execution {EXECUTION-ID} {EXECUTION-ID} [...]");
+
+                if (parameters.length >= 1) {
+                    for (final String parameter : parameters) {
+
+                        try {
+                            ReportExecTO reportExecTO = reportService.readExecution(Long.valueOf(parameter));
+                            System.out.println(" - Report execution id: " + reportExecTO.getKey());
+                            System.out.println(" - Report execution status: " + reportExecTO.getStatus());
+                            System.out.println(" - Report execution start date: " + reportExecTO.getStartDate());
+                            System.out.println(" - Report execution end date: " + reportExecTO.getEndDate());
+                        } catch (final WebServiceException | SyncopeClientException ex) {
+                            System.out.println("Error:");
+                            if (ex.getMessage().startsWith("NotFound")) {
+                                UsageMessages.printErrorMessage(" - Report " + parameter + " doesn't exists!");
+                            } else if (ex.getMessage().startsWith("DataIntegrityViolation")) {
+                                UsageMessages.printErrorMessage("You cannot delete report " + parameter);
+                            } else {
+                                UsageMessages.printErrorMessage(ex.getMessage());
+                            }
+                        } catch (final NumberFormatException ex) {
+                            UsageMessages.printErrorMessage(
+                                    "Error reading " + parameter + ". It isn't a valid report id");
+                        }
+                    }
+                } else {
+                    System.out.println(readExecutionErrorMessage);
+                }
+                break;
+            case DELETE_EXECUTION:
+                final String deleteExecutionErrorMessage = UsageMessages.optionCommandMessage(
+                        "Usage: report --delete-execution {EXECUTION-ID} {EXECUTION-ID} [...]");
+
+                if (parameters.length >= 1) {
+                    for (final String parameter : parameters) {
+
+                        try {
+                            reportService.deleteExecution(Long.valueOf(parameter));
+                            System.out.println(" - Report execution " + parameter + "successfully deleted!");
+                        } catch (final WebServiceException | SyncopeClientException ex) {
+                            System.out.println("Error:");
+                            if (ex.getMessage().startsWith("NotFound")) {
+                                System.out.println(" - Report " + parameter + " doesn't exists!");
+                            } else if (ex.getMessage().startsWith("DataIntegrityViolation")) {
+                                System.out.println(" - You cannot delete report " + parameter);
+                            } else {
+                                System.out.println(ex.getMessage());
+                            }
+                        } catch (final NumberFormatException ex) {
+                            System.out.println("Error reading " + parameter + ". It isn't a valid report id");
+                        }
+                    }
+                } else {
+                    System.out.println(deleteExecutionErrorMessage);
+                }
+                break;
+            case EXPORT_EXECUTION_RESULT:
+                final String exportExecutionErrorMessage = UsageMessages.optionCommandMessage(
+                        "Usage: report --export-execution-result {EXECUTION-ID} {EXECUTION-ID} [...] {FORMAT}\n"
+                        + "          Format: CSV / HTML / PDF / XML / RTF");
+
+                if (parameters.length >= 2) {
+                    parameters = Arrays.copyOf(parameters, parameters.length - 1);
+                    for (final String parameter : parameters) {
+                        try {
+                            final ReportExecExportFormat format = ReportExecExportFormat.valueOf(input.lastParameter());
+                            final Long exportId = Long.valueOf(parameter);
+                            final SequenceInputStream report = (SequenceInputStream) reportService.
+                                    exportExecutionResult(exportId, format).getEntity();
+                            switch (format) {
+                                case XML:
+                                    final String xmlFinalName = "export_" + exportId + ".xml";
+                                    XMLUtils.createXMLFile(report, xmlFinalName);
+                                    UsageMessages.printErrorMessage(xmlFinalName + " successfully created");
+                                    break;
+                                case CSV:
+                                    UsageMessages.printErrorMessage(format + " doesn't supported");
+                                    break;
+                                case PDF:
+                                    UsageMessages.printErrorMessage(format + " doesn't supported");
+                                    break;
+                                case HTML:
+                                    UsageMessages.printErrorMessage(format + " doesn't supported");
+                                    break;
+                                case RTF:
+                                    UsageMessages.printErrorMessage(format + " doesn't supported");
+                                    break;
+                                default:
+                                    UsageMessages.printErrorMessage(format + " doesn't supported");
+                                    break;
+                            }
+                        } catch (final WebServiceException | SyncopeClientException ex) {
+                            System.out.println("Error:");
+                            if (ex.getMessage().startsWith("NotFound")) {
+                                UsageMessages.printErrorMessage("Report " + parameter + " doesn't exists!");
+                            } else if (ex.getMessage().startsWith("DataIntegrityViolation")) {
+                                System.out.println(" - You cannot delete report " + parameter);
+                            } else {
+                                System.out.println(ex.getMessage());
+                            }
+                        } catch (final NumberFormatException ex) {
+                            System.out.println("Error reading " + parameter + ". It isn't a valid report id");
+                        } 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;
+                        }
+                    }
+                } else {
+                    System.out.println(exportExecutionErrorMessage);
+                }
+                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"),
+        LIST_JOBS("--list-jobs"),
+        READ("--read"),
+        DELETE("--delete"),
+        EXECUTE("--execute"),
+        READ_EXECUTION("--read-execution"),
+        DELETE_EXECUTION("--delete-execution"),
+        EXPORT_EXECUTION_RESULT("--export-execution-result");
+
+        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;
+        }
+    }
 }