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 <massimiliano.perr...@tirasa.net>
Authored: Wed Oct 14 15:10:29 2015 +0200
Committer: massi <massimiliano.perr...@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;
+        }
+    }
 }

Reply via email to