Fixed SYNCOPE-591
Project: http://git-wip-us.apache.org/repos/asf/syncope/repo Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/435e59db Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/435e59db Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/435e59db Branch: refs/heads/SYNCOPE-156 Commit: 435e59db756bbfcd836f651010cc9e4a61ba2957 Parents: 74e867e Author: massi <massimiliano.perr...@tirasa.net> Authored: Wed Oct 28 12:11:19 2015 +0100 Committer: massi <massimiliano.perr...@tirasa.net> Committed: Wed Oct 28 12:11:19 2015 +0100 ---------------------------------------------------------------------- .../question/AbstractQuestionCommand.java | 27 +++++ .../cli/commands/question/QuestionCommand.java | 114 +++++++++++++++++++ .../cli/commands/question/QuestionDelete.java | 57 ++++++++++ .../cli/commands/question/QuestionList.java | 32 ++++++ .../cli/commands/question/QuestionRead.java | 61 ++++++++++ .../commands/question/QuestionReadByUser.java | 53 +++++++++ .../question/QuestionResultManager.java | 38 +++++++ .../question/QuestionSyncopeOperations.java | 46 ++++++++ .../cli/commands/role/AbstractRoleCommand.java | 6 +- .../client/cli/commands/role/RoleDelete.java | 2 +- 10 files changed, 432 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/syncope/blob/435e59db/client/cli/src/main/java/org/apache/syncope/client/cli/commands/question/AbstractQuestionCommand.java ---------------------------------------------------------------------- diff --git a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/question/AbstractQuestionCommand.java b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/question/AbstractQuestionCommand.java new file mode 100644 index 0000000..0a3846a --- /dev/null +++ b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/question/AbstractQuestionCommand.java @@ -0,0 +1,27 @@ +/* + * 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.question; + +public abstract class AbstractQuestionCommand { + + protected final QuestionSyncopeOperations questionSyncopeOperations = new QuestionSyncopeOperations(); + + protected final QuestionResultManager questionResultManager = new QuestionResultManager(); + +} http://git-wip-us.apache.org/repos/asf/syncope/blob/435e59db/client/cli/src/main/java/org/apache/syncope/client/cli/commands/question/QuestionCommand.java ---------------------------------------------------------------------- diff --git a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/question/QuestionCommand.java b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/question/QuestionCommand.java new file mode 100644 index 0000000..2427203 --- /dev/null +++ b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/question/QuestionCommand.java @@ -0,0 +1,114 @@ +/* + * 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.question; + +import java.util.ArrayList; +import java.util.List; +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.commands.AbstractCommand; + +@Command(name = "question") +public class QuestionCommand extends AbstractCommand { + + private static final String HELP_MESSAGE = "Usage: question [options]\n" + + " Options:\n" + + " --help \n" + + " --list \n" + + " --read \n" + + " Syntax: --read {QUESTION-ID} {QUESTION-ID} [...]\n" + + " --read-by-user \n" + + " Syntax: --read-by-user {USERNAME}\n" + + " --delete \n" + + " Syntax: --delete {QUESTION-ID} {QUESTION-ID} [...]"; + + @Override + public void execute(final Input input) { + if (StringUtils.isBlank(input.getOption())) { + input.setOption(QuestionOptions.HELP.getOptionName()); + } + + switch (QuestionOptions.fromName(input.getOption())) { + case LIST: + new QuestionList().list(); + break; + case READ: + new QuestionRead(input).read(); + break; + case READ_BY_USER: + new QuestionReadByUser(input).read(); + break; + case DELETE: + break; + case HELP: + System.out.println(HELP_MESSAGE); + break; + default: + new QuestionResultManager().defaultError(input.getOption(), HELP_MESSAGE); + } + } + + @Override + public String getHelpMessage() { + return HELP_MESSAGE; + } + + private enum QuestionOptions { + + HELP("--help"), + LIST("--list"), + READ("--read"), + READ_BY_USER("--read-by-user"), + DELETE("--delete"); + + private final String optionName; + + QuestionOptions(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 QuestionOptions fromName(final String name) { + QuestionOptions optionToReturn = HELP; + for (final QuestionOptions option : QuestionOptions.values()) { + if (option.equalsOptionName(name)) { + optionToReturn = option; + } + } + return optionToReturn; + } + + public static List<String> toList() { + final List<String> options = new ArrayList<>(); + for (final QuestionOptions value : values()) { + options.add(value.getOptionName()); + } + return options; + } + } + +} http://git-wip-us.apache.org/repos/asf/syncope/blob/435e59db/client/cli/src/main/java/org/apache/syncope/client/cli/commands/question/QuestionDelete.java ---------------------------------------------------------------------- diff --git a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/question/QuestionDelete.java b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/question/QuestionDelete.java new file mode 100644 index 0000000..d57ae5c --- /dev/null +++ b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/question/QuestionDelete.java @@ -0,0 +1,57 @@ +/* + * 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.question; + +import javax.xml.ws.WebServiceException; +import org.apache.syncope.client.cli.Input; +import org.apache.syncope.common.lib.SyncopeClientException; + +public class QuestionDelete extends AbstractQuestionCommand { + + private static final String DELETE_HELP_MESSAGE = "question --delete {QUESTION-ID} {QUESTION-ID} [...]"; + + private final Input input; + + public QuestionDelete(final Input input) { + this.input = input; + } + + public void delete() { + if (input.getParameters().length >= 1) { + for (final String parameter : input.getParameters()) { + try { + questionSyncopeOperations.delete(parameter); + questionResultManager.deletedMessage("security question", parameter); + } catch (final SyncopeClientException | WebServiceException ex) { + if (ex.getMessage().startsWith("NotFound")) { + questionResultManager.notFoundError("Security question", parameter); + } else { + questionResultManager.generic("Error: " + ex.getMessage()); + } + break; + } catch (final NumberFormatException ex) { + questionResultManager.numberFormatException("security question", parameter); + } + } + } else { + questionResultManager.commandOptionError(DELETE_HELP_MESSAGE); + } + } + +} http://git-wip-us.apache.org/repos/asf/syncope/blob/435e59db/client/cli/src/main/java/org/apache/syncope/client/cli/commands/question/QuestionList.java ---------------------------------------------------------------------- diff --git a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/question/QuestionList.java b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/question/QuestionList.java new file mode 100644 index 0000000..836554a --- /dev/null +++ b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/question/QuestionList.java @@ -0,0 +1,32 @@ +/* + * 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.question; + +import org.apache.syncope.common.lib.SyncopeClientException; + +public class QuestionList extends AbstractQuestionCommand { + + public void list() { + try { + questionResultManager.toView(questionSyncopeOperations.list()); + } catch (final SyncopeClientException ex) { + questionResultManager.generic(ex.getMessage()); + } + } +} http://git-wip-us.apache.org/repos/asf/syncope/blob/435e59db/client/cli/src/main/java/org/apache/syncope/client/cli/commands/question/QuestionRead.java ---------------------------------------------------------------------- diff --git a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/question/QuestionRead.java b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/question/QuestionRead.java new file mode 100644 index 0000000..5f96cd5 --- /dev/null +++ b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/question/QuestionRead.java @@ -0,0 +1,61 @@ +/* + * 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.question; + +import java.util.ArrayList; +import java.util.List; +import javax.xml.ws.WebServiceException; +import org.apache.syncope.client.cli.Input; +import org.apache.syncope.common.lib.SyncopeClientException; +import org.apache.syncope.common.lib.to.SecurityQuestionTO; + +public class QuestionRead extends AbstractQuestionCommand { + + private static final String READ_HELP_MESSAGE = "question --read {QUESTION-ID} {QUESTION-ID} [...]"; + + private final Input input; + + public QuestionRead(final Input input) { + this.input = input; + } + + public void read() { + if (input.getParameters().length >= 1) { + final List<SecurityQuestionTO> questionTOs = new ArrayList<>(); + for (final String parameter : input.getParameters()) { + try { + questionTOs.add(questionSyncopeOperations.read(parameter)); + } catch (final SyncopeClientException | WebServiceException ex) { + if (ex.getMessage().startsWith("NotFound")) { + questionResultManager.notFoundError("Security question", parameter); + } else { + questionResultManager.generic("Error: " + ex.getMessage()); + } + break; + } catch (final NumberFormatException ex) { + questionResultManager.numberFormatException("security question", parameter); + } + } + questionResultManager.toView(questionTOs); + } else { + questionResultManager.commandOptionError(READ_HELP_MESSAGE); + } + } + +} http://git-wip-us.apache.org/repos/asf/syncope/blob/435e59db/client/cli/src/main/java/org/apache/syncope/client/cli/commands/question/QuestionReadByUser.java ---------------------------------------------------------------------- diff --git a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/question/QuestionReadByUser.java b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/question/QuestionReadByUser.java new file mode 100644 index 0000000..fa7b23d --- /dev/null +++ b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/question/QuestionReadByUser.java @@ -0,0 +1,53 @@ +/* + * 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.question; + +import javax.xml.ws.WebServiceException; +import org.apache.syncope.client.cli.Input; +import org.apache.syncope.common.lib.SyncopeClientException; + +public class QuestionReadByUser extends AbstractQuestionCommand { + + private static final String READ_HELP_MESSAGE = "question --read-by-user {USERNAME}"; + + private final Input input; + + public QuestionReadByUser(final Input input) { + this.input = input; + } + + public void read() { + if (input.getParameters().length == 1) { + try { + questionResultManager.printQuestion(questionSyncopeOperations.readByUser(input.firstParameter())); + } catch (final SyncopeClientException | WebServiceException ex) { + if (ex.getMessage().startsWith("NotFound")) { + questionResultManager.notFoundError("Security question", input.firstParameter()); + } else { + questionResultManager.generic("Error: " + ex.getMessage()); + } + } catch (final NumberFormatException ex) { + questionResultManager.numberFormatException("security question", input.firstParameter()); + } + } else { + questionResultManager.commandOptionError(READ_HELP_MESSAGE); + } + } + +} http://git-wip-us.apache.org/repos/asf/syncope/blob/435e59db/client/cli/src/main/java/org/apache/syncope/client/cli/commands/question/QuestionResultManager.java ---------------------------------------------------------------------- diff --git a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/question/QuestionResultManager.java b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/question/QuestionResultManager.java new file mode 100644 index 0000000..761b56b --- /dev/null +++ b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/question/QuestionResultManager.java @@ -0,0 +1,38 @@ +/* + * 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.question; + +import java.util.List; +import org.apache.syncope.client.cli.commands.CommonsResultManager; +import org.apache.syncope.common.lib.to.SecurityQuestionTO; + +public class QuestionResultManager extends CommonsResultManager { + + public void toView(final List<SecurityQuestionTO> questionTOs) { + for (final SecurityQuestionTO questionTO : questionTOs) { + printQuestion(questionTO); + } + } + + public void printQuestion(final SecurityQuestionTO securityQuestionTO) { + System.out.println(" > SECURITY QUESTION ID: " + securityQuestionTO.getKey()); + System.out.println(" content: " + securityQuestionTO.getContent()); + System.out.println(""); + } +} http://git-wip-us.apache.org/repos/asf/syncope/blob/435e59db/client/cli/src/main/java/org/apache/syncope/client/cli/commands/question/QuestionSyncopeOperations.java ---------------------------------------------------------------------- diff --git a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/question/QuestionSyncopeOperations.java b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/question/QuestionSyncopeOperations.java new file mode 100644 index 0000000..238a576 --- /dev/null +++ b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/question/QuestionSyncopeOperations.java @@ -0,0 +1,46 @@ +/* + * 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.question; + +import java.util.List; +import org.apache.syncope.client.cli.SyncopeServices; +import org.apache.syncope.common.lib.to.SecurityQuestionTO; +import org.apache.syncope.common.rest.api.service.SecurityQuestionService; + +public class QuestionSyncopeOperations { + + private final SecurityQuestionService securityQuestionService = SyncopeServices.get(SecurityQuestionService.class); + + public List<SecurityQuestionTO> list() { + return securityQuestionService.list(); + } + + public void delete(final String questionId) { + securityQuestionService.delete(Long.valueOf(questionId)); + } + + public SecurityQuestionTO read(final String questionId) { + return securityQuestionService.read(Long.valueOf(questionId)); + } + + public SecurityQuestionTO readByUser(final String username) { + return securityQuestionService.readByUser(username); + } + +} http://git-wip-us.apache.org/repos/asf/syncope/blob/435e59db/client/cli/src/main/java/org/apache/syncope/client/cli/commands/role/AbstractRoleCommand.java ---------------------------------------------------------------------- diff --git a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/role/AbstractRoleCommand.java b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/role/AbstractRoleCommand.java index b4709a0..de4aac6 100644 --- a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/role/AbstractRoleCommand.java +++ b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/role/AbstractRoleCommand.java @@ -18,10 +18,10 @@ */ package org.apache.syncope.client.cli.commands.role; -public class AbstractRoleCommand { +public abstract class AbstractRoleCommand { - protected RoleSyncopeOperations roleSyncopeOperations = new RoleSyncopeOperations(); + protected final RoleSyncopeOperations roleSyncopeOperations = new RoleSyncopeOperations(); - protected RoleResultManager roleResultManager = new RoleResultManager(); + protected final RoleResultManager roleResultManager = new RoleResultManager(); } http://git-wip-us.apache.org/repos/asf/syncope/blob/435e59db/client/cli/src/main/java/org/apache/syncope/client/cli/commands/role/RoleDelete.java ---------------------------------------------------------------------- diff --git a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/role/RoleDelete.java b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/role/RoleDelete.java index 50ac248..e47a40e 100644 --- a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/role/RoleDelete.java +++ b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/role/RoleDelete.java @@ -46,7 +46,7 @@ public class RoleDelete extends AbstractRoleCommand { } break; } catch (final NumberFormatException ex) { - roleResultManager.numberFormatException("user", parameter); + roleResultManager.numberFormatException("role", parameter); } } } else {