[SYNCOPE-896] fix for drop down null valid flag + destination realm management improvement
Project: http://git-wip-us.apache.org/repos/asf/syncope/repo Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/49b4f39c Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/49b4f39c Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/49b4f39c Branch: refs/heads/2_0_NO_JAXB Commit: 49b4f39c8aaf35362f72dc23d1698e1d1879b8d2 Parents: e3fc226 Author: fmartelli <fabio.marte...@gmail.com> Authored: Fri Jul 8 16:54:56 2016 +0200 Committer: fmartelli <fabio.marte...@gmail.com> Committed: Fri Jul 8 16:54:56 2016 +0200 ---------------------------------------------------------------------- .../html/form/AjaxDropDownChoicePanel.java | 10 +++++- .../any/AnyObjectTemplateWizardBuilder.java | 12 +++++++ .../wizards/any/AnyObjectWizardBuilder.java | 9 ++--- .../console/wizards/any/AnyWizardBuilder.java | 15 ++++---- .../client/console/wizards/any/Details.java | 38 ++++++++++++++++---- .../wizards/any/GroupTemplateWizardBuilder.java | 12 +++++++ .../console/wizards/any/GroupWizardBuilder.java | 9 ++--- .../wizards/any/UserTemplateWizardBuilder.java | 12 +++++++ .../console/wizards/any/UserWizardBuilder.java | 9 ++--- 9 files changed, 95 insertions(+), 31 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/syncope/blob/49b4f39c/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/AjaxDropDownChoicePanel.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/AjaxDropDownChoicePanel.java b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/AjaxDropDownChoicePanel.java index f08684f..7a1bfc4 100644 --- a/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/AjaxDropDownChoicePanel.java +++ b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/AjaxDropDownChoicePanel.java @@ -59,6 +59,14 @@ public class AjaxDropDownChoicePanel<T extends Serializable> extends FieldPanel< } }); } + + setNullValid(true); + } + + @Override + public FieldPanel<T> setRequired(final boolean required) { + setNullValid(!required); + return super.setRequired(required); } @SuppressWarnings("unchecked") @@ -79,7 +87,7 @@ public class AjaxDropDownChoicePanel<T extends Serializable> extends FieldPanel< return this; } - public AjaxDropDownChoicePanel<T> setNullValid(final boolean validity) { + public final AjaxDropDownChoicePanel<T> setNullValid(final boolean validity) { BootstrapSelect.class.cast(field).setNullValid(validity); return this; } http://git-wip-us.apache.org/repos/asf/syncope/blob/49b4f39c/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/AnyObjectTemplateWizardBuilder.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/AnyObjectTemplateWizardBuilder.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/AnyObjectTemplateWizardBuilder.java index da37ad5..239a503 100644 --- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/AnyObjectTemplateWizardBuilder.java +++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/AnyObjectTemplateWizardBuilder.java @@ -31,6 +31,8 @@ public class AnyObjectTemplateWizardBuilder extends AnyObjectWizardBuilder private static final long serialVersionUID = 6716803168859873877L; + private final TemplatableTO templatable; + public AnyObjectTemplateWizardBuilder( final TemplatableTO templatable, final String anyType, @@ -38,6 +40,7 @@ public class AnyObjectTemplateWizardBuilder extends AnyObjectWizardBuilder final AnyObjectFormLayoutInfo formLayoutInfo, final PageReference pageRef) { super(null, anyTypeClasses, formLayoutInfo, pageRef); + this.templatable = templatable; if (templatable.getTemplates().containsKey(anyType)) { setItem(new AnyWrapper<>(AnyObjectTO.class.cast(templatable.getTemplates().get(anyType)))); @@ -52,6 +55,15 @@ public class AnyObjectTemplateWizardBuilder extends AnyObjectWizardBuilder } @Override + protected Details<AnyObjectTO> addOptionalDetailsPanel(final AnyWrapper<AnyObjectTO> modelObject) { + final Details<AnyObjectTO> details = super.addOptionalDetailsPanel(modelObject); + if (templatable instanceof RealmTO) { + details.disableRealmSpecification(); + } + return details; + } + + @Override public AjaxWizard<AnyWrapper<AnyObjectTO>> build(final String id) { return super.build(id, AjaxWizard.Mode.TEMPLATE); } http://git-wip-us.apache.org/repos/asf/syncope/blob/49b4f39c/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/AnyObjectWizardBuilder.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/AnyObjectWizardBuilder.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/AnyObjectWizardBuilder.java index 9a8ad87..3eb30ea 100644 --- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/AnyObjectWizardBuilder.java +++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/AnyObjectWizardBuilder.java @@ -31,7 +31,6 @@ import org.apache.syncope.common.lib.patch.AnyObjectPatch; import org.apache.syncope.common.lib.to.AnyObjectTO; import org.apache.syncope.common.lib.to.ProvisioningResult; import org.apache.wicket.PageReference; -import org.apache.wicket.extensions.wizard.WizardModel; import org.apache.wicket.model.util.ListModel; public class AnyObjectWizardBuilder extends AnyWizardBuilder<AnyObjectTO> implements AnyObjectForm { @@ -72,13 +71,11 @@ public class AnyObjectWizardBuilder extends AnyWizardBuilder<AnyObjectTO> implem } @Override - protected AnyObjectWizardBuilder addOptionalDetailsPanel( - final AnyWrapper<AnyObjectTO> modelObject, final WizardModel wizardModel) { - wizardModel.add(new AnyObjectDetails( + protected Details<AnyObjectTO> addOptionalDetailsPanel(final AnyWrapper<AnyObjectTO> modelObject) { + return new AnyObjectDetails( modelObject, new ListModel<>(Collections.<StatusBean>emptyList()), mode == AjaxWizard.Mode.TEMPLATE, - modelObject.getInnerObject().getKey() != null, pageRef)); - return this; + modelObject.getInnerObject().getKey() != null, pageRef); } } http://git-wip-us.apache.org/repos/asf/syncope/blob/49b4f39c/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/AnyWizardBuilder.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/AnyWizardBuilder.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/AnyWizardBuilder.java index 793ebc7..4df08c0 100644 --- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/AnyWizardBuilder.java +++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/AnyWizardBuilder.java @@ -84,7 +84,10 @@ public abstract class AnyWizardBuilder<A extends AnyTO> extends AjaxWizardBuilde @Override protected WizardModel buildModelSteps(final AnyWrapper<A> modelObject, final WizardModel wizardModel) { // optional details panel step - addOptionalDetailsPanel(modelObject, wizardModel); + final Details<A> details = addOptionalDetailsPanel(modelObject); + if (details != null) { + wizardModel.add(details); + } if ((this instanceof GroupWizardBuilder) && (modelObject.getInnerObject() instanceof GroupTO) @@ -155,17 +158,17 @@ public abstract class AnyWizardBuilder<A extends AnyTO> extends AjaxWizardBuilde return wizardModel; } - protected AnyWizardBuilder<A> addOptionalDetailsPanel( - final AnyWrapper<A> modelObject, final WizardModel wizardModel) { + protected Details<A> addOptionalDetailsPanel(final AnyWrapper<A> modelObject) { if (modelObject.getInnerObject().getKey() != null) { - wizardModel.add(new Details<>( + return new Details<>( modelObject, new ListModel<>(Collections.<StatusBean>emptyList()), mode == AjaxWizard.Mode.TEMPLATE, true, - pageRef)); + pageRef); + } else { + return null; } - return this; } } http://git-wip-us.apache.org/repos/asf/syncope/blob/49b4f39c/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/Details.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/Details.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/Details.java index 483539a..8e1ccfb 100644 --- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/Details.java +++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/Details.java @@ -18,11 +18,17 @@ */ package org.apache.syncope.client.console.wizards.any; +import java.util.ArrayList; import java.util.List; -import org.apache.commons.lang3.StringUtils; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.collections4.Transformer; import org.apache.syncope.client.console.commons.status.StatusBean; +import org.apache.syncope.client.console.rest.RealmRestClient; +import org.apache.syncope.client.console.wicket.markup.html.form.AjaxDropDownChoicePanel; import org.apache.syncope.client.console.wicket.markup.html.form.AjaxTextFieldPanel; +import org.apache.syncope.client.console.wicket.markup.html.form.FieldPanel; import org.apache.syncope.common.lib.to.AnyTO; +import org.apache.syncope.common.lib.to.RealmTO; import org.apache.wicket.PageReference; import org.apache.wicket.extensions.wizard.WizardStep; import org.apache.wicket.model.IModel; @@ -40,6 +46,8 @@ public class Details<T extends AnyTO> extends WizardStep { protected final StatusPanel statusPanel; + private final FieldPanel<String> realm; + public Details( final AnyWrapper<T> wrapper, final IModel<List<StatusBean>> statusModel, @@ -51,13 +59,26 @@ public class Details<T extends AnyTO> extends WizardStep { final T inner = wrapper.getInnerObject(); - final AjaxTextFieldPanel realm = new AjaxTextFieldPanel( - "destinationRealm", "destinationRealm", new PropertyModel<String>(inner, "realm"), false); - add(realm.setReadOnly(StringUtils.isNotEmpty(inner.getRealm()))); if (templateMode) { - realm.enableJexlHelp(); + realm = new AjaxTextFieldPanel( + "destinationRealm", "destinationRealm", new PropertyModel<String>(inner, "realm"), false); + AjaxTextFieldPanel.class.cast(realm).enableJexlHelp(); + } else { + realm = new AjaxDropDownChoicePanel<>( + "destinationRealm", "destinationRealm", new PropertyModel<String>(inner, "realm"), false); + + ((AjaxDropDownChoicePanel<String>) realm).setChoices(CollectionUtils.collect( + new RealmRestClient().list(), + new Transformer<RealmTO, String>() { + + @Override + public String transform(final RealmTO input) { + return input.getFullPath(); + } + }, new ArrayList<String>())); } - + add(realm); + statusPanel = new StatusPanel("status", inner, statusModel, pageRef); add(statusPanel.setEnabled(includeStatusPanel). @@ -67,6 +88,11 @@ public class Details<T extends AnyTO> extends WizardStep { setEnabled(includeStatusPanel).setVisible(includeStatusPanel).setRenderBodyOnly(true)); } + public Details<T> disableRealmSpecification() { + this.realm.setReadOnly(true); + return this; + } + protected AnnotatedBeanPanel getGeneralStatusInformation(final String id, final T anyTO) { return new AnnotatedBeanPanel(id, anyTO); } http://git-wip-us.apache.org/repos/asf/syncope/blob/49b4f39c/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/GroupTemplateWizardBuilder.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/GroupTemplateWizardBuilder.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/GroupTemplateWizardBuilder.java index cccc25f..13f0698 100644 --- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/GroupTemplateWizardBuilder.java +++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/GroupTemplateWizardBuilder.java @@ -31,12 +31,15 @@ public class GroupTemplateWizardBuilder extends GroupWizardBuilder implements Te private static final long serialVersionUID = 6716803168859873877L; + private final TemplatableTO templatable; + public GroupTemplateWizardBuilder( final TemplatableTO templatable, final List<String> anyTypeClasses, final GroupFormLayoutInfo formLayoutInfo, final PageReference pageRef) { super(null, anyTypeClasses, formLayoutInfo, pageRef); + this.templatable = templatable; if (templatable.getTemplates().containsKey(AnyTypeKind.GROUP.name())) { setItem(new GroupWrapper(GroupTO.class.cast(templatable.getTemplates().get(AnyTypeKind.GROUP.name())))); @@ -50,6 +53,15 @@ public class GroupTemplateWizardBuilder extends GroupWizardBuilder implements Te } @Override + protected Details<GroupTO> addOptionalDetailsPanel(final AnyWrapper<GroupTO> modelObject) { + final Details<GroupTO> details = super.addOptionalDetailsPanel(modelObject); + if (templatable instanceof RealmTO) { + details.disableRealmSpecification(); + } + return details; + } + + @Override public AjaxWizard<AnyWrapper<GroupTO>> build(final String id) { return super.build(id, AjaxWizard.Mode.TEMPLATE); } http://git-wip-us.apache.org/repos/asf/syncope/blob/49b4f39c/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/GroupWizardBuilder.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/GroupWizardBuilder.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/GroupWizardBuilder.java index 875cca0..04f72dc 100644 --- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/GroupWizardBuilder.java +++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/GroupWizardBuilder.java @@ -32,7 +32,6 @@ import org.apache.syncope.common.lib.patch.GroupPatch; import org.apache.syncope.common.lib.to.GroupTO; import org.apache.syncope.common.lib.to.ProvisioningResult; import org.apache.wicket.PageReference; -import org.apache.wicket.extensions.wizard.WizardModel; import org.apache.wicket.model.util.ListModel; public class GroupWizardBuilder extends AnyWizardBuilder<GroupTO> implements GroupForm { @@ -88,13 +87,11 @@ public class GroupWizardBuilder extends AnyWizardBuilder<GroupTO> implements Gro } @Override - protected GroupWizardBuilder addOptionalDetailsPanel( - final AnyWrapper<GroupTO> modelObject, final WizardModel wizardModel) { - wizardModel.add(new GroupDetails( + protected Details<GroupTO> addOptionalDetailsPanel(final AnyWrapper<GroupTO> modelObject) { + return new GroupDetails( GroupWrapper.class.cast(modelObject), new ListModel<>(Collections.<StatusBean>emptyList()), mode == AjaxWizard.Mode.TEMPLATE, - modelObject.getInnerObject().getKey() != null, pageRef)); - return this; + modelObject.getInnerObject().getKey() != null, pageRef); } } http://git-wip-us.apache.org/repos/asf/syncope/blob/49b4f39c/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/UserTemplateWizardBuilder.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/UserTemplateWizardBuilder.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/UserTemplateWizardBuilder.java index a795cd7..9873e35 100644 --- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/UserTemplateWizardBuilder.java +++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/UserTemplateWizardBuilder.java @@ -31,12 +31,15 @@ public class UserTemplateWizardBuilder extends UserWizardBuilder implements Temp private static final long serialVersionUID = 6716803168859873877L; + private final TemplatableTO templatable; + public UserTemplateWizardBuilder( final TemplatableTO templatable, final List<String> anyTypeClasses, final UserFormLayoutInfo formLayoutInfo, final PageReference pageRef) { super(null, anyTypeClasses, formLayoutInfo, pageRef); + this.templatable = templatable; if (templatable.getTemplates().containsKey(AnyTypeKind.USER.name())) { setItem(new UserWrapper(UserTO.class.cast(templatable.getTemplates().get(AnyTypeKind.USER.name())))); @@ -50,6 +53,15 @@ public class UserTemplateWizardBuilder extends UserWizardBuilder implements Temp } @Override + protected Details<UserTO> addOptionalDetailsPanel(final AnyWrapper<UserTO> modelObject) { + final Details<UserTO> details = super.addOptionalDetailsPanel(modelObject); + if (templatable instanceof RealmTO) { + details.disableRealmSpecification(); + } + return details; + } + + @Override public AjaxWizard<AnyWrapper<UserTO>> build(final String id) { return super.build(id, AjaxWizard.Mode.TEMPLATE); } http://git-wip-us.apache.org/repos/asf/syncope/blob/49b4f39c/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/UserWizardBuilder.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/UserWizardBuilder.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/UserWizardBuilder.java index 8d4d758..11078e7 100644 --- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/UserWizardBuilder.java +++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/UserWizardBuilder.java @@ -35,7 +35,6 @@ import org.apache.syncope.common.lib.patch.UserPatch; import org.apache.syncope.common.lib.to.ProvisioningResult; import org.apache.syncope.common.lib.to.UserTO; import org.apache.wicket.PageReference; -import org.apache.wicket.extensions.wizard.WizardModel; import org.apache.wicket.model.IModel; import org.apache.wicket.model.util.ListModel; @@ -98,15 +97,13 @@ public class UserWizardBuilder extends AnyWizardBuilder<UserTO> implements UserF } @Override - protected UserWizardBuilder addOptionalDetailsPanel( - final AnyWrapper<UserTO> modelObject, final WizardModel wizardModel) { + protected Details<UserTO> addOptionalDetailsPanel(final AnyWrapper<UserTO> modelObject) { - wizardModel.add(new UserDetails( + return new UserDetails( UserWrapper.class.cast(modelObject), statusModel, mode == AjaxWizard.Mode.TEMPLATE, modelObject.getInnerObject().getKey() != null, UserFormLayoutInfo.class.cast(formLayoutInfo).isPasswordManagement(), - pageRef)); - return this; + pageRef); } /**