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