You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@syncope.apache.org by il...@apache.org on 2020/04/17 13:30:57 UTC
[syncope] 02/02: [SYNCOPE-957] provides the possibility to specify
a layout for linked account management
This is an automated email from the ASF dual-hosted git repository.
ilgrosso pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/syncope.git
commit 3aded5e99aff685a6ec2b710224e1b3d8b07f5f1
Author: fmartelli <fa...@gmail.com>
AuthorDate: Fri Apr 17 09:40:04 2020 +0200
[SYNCOPE-957] provides the possibility to specify a layout for linked account management
---
.../console/layout/IdMUserFormLayoutInfo.java | 38 ++++++++++
.../client/console/layout/LinkedAccountForm.java | 25 +++++++
.../layout/LinkedAccountFormLayoutInfo.java | 86 ++++++++++++++++++++++
.../console/panels/LinkedAccountModalPanel.java | 28 ++++++-
.../wizards/any/LinkedAccountCredentialsPanel.java | 14 +++-
.../wizards/any/LinkedAccountPlainAttrsPanel.java | 6 +-
.../wizards/any/LinkedAccountWizardBuilder.java | 29 ++++++--
.../client/console/layout/UserFormLayoutInfo.java | 1 -
8 files changed, 213 insertions(+), 14 deletions(-)
diff --git a/client/idm/console/src/main/java/org/apache/syncope/client/console/layout/IdMUserFormLayoutInfo.java b/client/idm/console/src/main/java/org/apache/syncope/client/console/layout/IdMUserFormLayoutInfo.java
new file mode 100644
index 0000000..f3ae43b
--- /dev/null
+++ b/client/idm/console/src/main/java/org/apache/syncope/client/console/layout/IdMUserFormLayoutInfo.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.console.layout;
+
+public class IdMUserFormLayoutInfo extends UserFormLayoutInfo {
+
+ private static final long serialVersionUID = -6577172426410570773L;
+
+ private LinkedAccountFormLayoutInfo linkedAccountFormLayoutInfo;
+
+ public IdMUserFormLayoutInfo() {
+ this.linkedAccountFormLayoutInfo = new LinkedAccountFormLayoutInfo();
+ }
+
+ public LinkedAccountFormLayoutInfo getLinkedAccountFormLayoutInfo() {
+ return linkedAccountFormLayoutInfo;
+ }
+
+ public void setLinkedAccountFormLayoutInfo(final LinkedAccountFormLayoutInfo linkedAccountFormLayoutInfo) {
+ this.linkedAccountFormLayoutInfo = linkedAccountFormLayoutInfo;
+ }
+}
diff --git a/client/idm/console/src/main/java/org/apache/syncope/client/console/layout/LinkedAccountForm.java b/client/idm/console/src/main/java/org/apache/syncope/client/console/layout/LinkedAccountForm.java
new file mode 100644
index 0000000..9a8c410
--- /dev/null
+++ b/client/idm/console/src/main/java/org/apache/syncope/client/console/layout/LinkedAccountForm.java
@@ -0,0 +1,25 @@
+/*
+ * 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.console.layout;
+
+import org.apache.syncope.client.ui.commons.wizards.ModalPanelBuilder;
+import org.apache.syncope.common.lib.to.LinkedAccountTO;
+
+public interface LinkedAccountForm extends ModalPanelBuilder<LinkedAccountTO> {
+}
diff --git a/client/idm/console/src/main/java/org/apache/syncope/client/console/layout/LinkedAccountFormLayoutInfo.java b/client/idm/console/src/main/java/org/apache/syncope/client/console/layout/LinkedAccountFormLayoutInfo.java
new file mode 100644
index 0000000..5ba9115
--- /dev/null
+++ b/client/idm/console/src/main/java/org/apache/syncope/client/console/layout/LinkedAccountFormLayoutInfo.java
@@ -0,0 +1,86 @@
+/*
+ * 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.console.layout;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+import org.apache.syncope.client.console.wizards.any.LinkedAccountWizardBuilder;
+
+public class LinkedAccountFormLayoutInfo implements Serializable {
+
+ private static final long serialVersionUID = -5573691733739618511L;
+
+ private Class<? extends LinkedAccountForm> formClass;
+
+ private boolean credentials = true;
+
+ private final List<String> whichCredentials = new ArrayList<>();
+
+ private boolean plainAttrs = true;
+
+ private final List<String> whichPlainAttrs = new ArrayList<>();
+
+ private boolean privileges = true;
+
+ protected Class<? extends LinkedAccountForm> getDefaultFormClass() {
+ return LinkedAccountWizardBuilder.class;
+ }
+
+ public Class<? extends LinkedAccountForm> getFormClass() {
+ return formClass == null ? getDefaultFormClass() : formClass;
+ }
+
+ public void setFormClass(final Class<? extends LinkedAccountForm> formClass) {
+ this.formClass = formClass;
+ }
+
+ public boolean isPlainAttrs() {
+ return plainAttrs;
+ }
+
+ public void setPlainAttrs(final boolean plainAttrs) {
+ this.plainAttrs = plainAttrs;
+ }
+
+ public List<String> getWhichPlainAttrs() {
+ return whichPlainAttrs;
+ }
+
+ public boolean isCredentials() {
+ return credentials;
+ }
+
+ public void setCredentials(final boolean credentials) {
+ this.credentials = credentials;
+ }
+
+ public List<String> getWhichCredentials() {
+ return whichCredentials;
+ }
+
+ public boolean isPrivileges() {
+ return privileges;
+ }
+
+ public void setPrivileges(final boolean privileges) {
+ this.privileges = privileges;
+ }
+
+}
diff --git a/client/idm/console/src/main/java/org/apache/syncope/client/console/panels/LinkedAccountModalPanel.java b/client/idm/console/src/main/java/org/apache/syncope/client/console/panels/LinkedAccountModalPanel.java
index fe87678..f6bcf8c 100644
--- a/client/idm/console/src/main/java/org/apache/syncope/client/console/panels/LinkedAccountModalPanel.java
+++ b/client/idm/console/src/main/java/org/apache/syncope/client/console/panels/LinkedAccountModalPanel.java
@@ -21,9 +21,16 @@ package org.apache.syncope.client.console.panels;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
+import java.util.stream.Collectors;
import org.apache.commons.lang3.StringUtils;
import org.apache.syncope.client.console.SyncopeConsoleSession;
+import org.apache.syncope.client.console.layout.AnyLayout;
+import org.apache.syncope.client.console.layout.AnyLayoutUtils;
+import org.apache.syncope.client.console.layout.IdMUserFormLayoutInfo;
+import org.apache.syncope.client.console.layout.LinkedAccountForm;
+import org.apache.syncope.client.console.layout.LinkedAccountFormLayoutInfo;
import org.apache.syncope.client.console.pages.BasePage;
+import org.apache.syncope.client.console.rest.AnyTypeRestClient;
import org.apache.syncope.client.console.rest.UserRestClient;
import org.apache.syncope.client.console.status.LinkedAccountStatusPanel;
import org.apache.syncope.client.console.status.ReconTaskPanel;
@@ -38,6 +45,7 @@ import org.apache.syncope.client.ui.commons.wizards.AjaxWizard;
import org.apache.syncope.common.lib.SyncopeClientException;
import org.apache.syncope.common.lib.request.LinkedAccountUR;
import org.apache.syncope.common.lib.request.UserUR;
+import org.apache.syncope.common.lib.to.EntityTO;
import org.apache.syncope.common.lib.to.LinkedAccountTO;
import org.apache.syncope.common.lib.to.PullTaskTO;
import org.apache.syncope.common.lib.to.PushTaskTO;
@@ -64,7 +72,7 @@ public class LinkedAccountModalPanel extends Panel implements ModalPanel {
private static final Logger LOG = LoggerFactory.getLogger(LinkedAccountModalPanel.class);
- private final LinkedAccountWizardBuilder wizard;
+ private LinkedAccountForm wizard;
private final WizardMgtPanel<LinkedAccountTO> list;
@@ -74,6 +82,8 @@ public class LinkedAccountModalPanel extends Panel implements ModalPanel {
private UserRestClient userRestClient = new UserRestClient();
+ private AnyTypeRestClient anyTypeRestClient = new AnyTypeRestClient();
+
private final List<LinkedAccountTO> linkedAccountTOs;
@SuppressWarnings("unchecked")
@@ -93,7 +103,21 @@ public class LinkedAccountModalPanel extends Panel implements ModalPanel {
actionTogglePanel = new ActionLinksTogglePanel<>("toggle", pageRef);
add(actionTogglePanel);
- wizard = new LinkedAccountWizardBuilder(model, pageRef);
+ AnyLayout anyLayout = AnyLayoutUtils.fetch(
+ anyTypeRestClient.listAnyTypes().stream().map(EntityTO::getKey).collect(Collectors.toList()));
+ LinkedAccountFormLayoutInfo linkedAccountFormLayoutInfo =
+ anyLayout.getUser() instanceof IdMUserFormLayoutInfo
+ ? IdMUserFormLayoutInfo.class.cast(anyLayout.getUser()).getLinkedAccountFormLayoutInfo()
+ : new LinkedAccountFormLayoutInfo();
+
+ try {
+ wizard = linkedAccountFormLayoutInfo.getFormClass().
+ getConstructor(model.getClass(), LinkedAccountFormLayoutInfo.class, PageReference.class).
+ newInstance(model, linkedAccountFormLayoutInfo, pageRef);
+ } catch (Exception e) {
+ LOG.error("Error instantiating form layout", e);
+ wizard = new LinkedAccountWizardBuilder(model, linkedAccountFormLayoutInfo, pageRef);
+ }
ListViewPanel.Builder<LinkedAccountTO> builder = new ListViewPanel.Builder<LinkedAccountTO>(
LinkedAccountTO.class, pageRef) {
diff --git a/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/any/LinkedAccountCredentialsPanel.java b/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/any/LinkedAccountCredentialsPanel.java
index e30cfc4..0414781 100644
--- a/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/any/LinkedAccountCredentialsPanel.java
+++ b/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/any/LinkedAccountCredentialsPanel.java
@@ -20,6 +20,7 @@ package org.apache.syncope.client.console.wizards.any;
import de.agilecoders.wicket.extensions.markup.html.bootstrap.form.checkbox.bootstraptoggle.BootstrapToggle;
import de.agilecoders.wicket.extensions.markup.html.bootstrap.form.checkbox.bootstraptoggle.BootstrapToggleConfig;
+import java.util.List;
import org.apache.commons.lang3.StringUtils;
import org.apache.syncope.common.lib.to.LinkedAccountTO;
import org.apache.syncope.client.console.commons.LinkedAccountPlainAttrProperty;
@@ -49,12 +50,14 @@ public class LinkedAccountCredentialsPanel extends WizardStep {
private final LinkedAccountTO linkedAccountTO;
- public LinkedAccountCredentialsPanel(final EntityWrapper<LinkedAccountTO> modelObject) {
+ public LinkedAccountCredentialsPanel(
+ final EntityWrapper<LinkedAccountTO> modelObject, final List<String> whichCredentials) {
super();
setOutputMarkupId(true);
linkedAccountTO = modelObject.getInnerObject();
+ boolean isUsernameManagementEnabled = whichCredentials.contains("username");
AjaxTextFieldPanel usernameField = new AjaxTextFieldPanel(
"username",
"username",
@@ -64,9 +67,12 @@ public class LinkedAccountCredentialsPanel extends WizardStep {
usernameProperty.setOverridable(StringUtils.isNotBlank(linkedAccountTO.getUsername()));
usernameProperty.setSchema("username");
usernameProperty.getValues().add(linkedAccountTO.getUsername());
- usernameField.showExternAction(checkboxToggle(usernameProperty, usernameField));
+ usernameField.showExternAction(
+ checkboxToggle(usernameProperty, usernameField).setEnabled(isUsernameManagementEnabled));
add(usernameField.setOutputMarkupId(true));
+ usernameField.setEnabled(isUsernameManagementEnabled);
+ boolean isPasswordManagementEnabled = whichCredentials.contains("password");
AjaxPasswordFieldPanel passwordField = new AjaxPasswordFieldPanel(
"password",
"password",
@@ -79,9 +85,11 @@ public class LinkedAccountCredentialsPanel extends WizardStep {
passwordProperty.setOverridable(StringUtils.isNotBlank(linkedAccountTO.getPassword()));
passwordProperty.setSchema("password");
passwordProperty.getValues().add(linkedAccountTO.getPassword());
- passwordField.showExternAction(checkboxToggle(passwordProperty, passwordField));
+ passwordField.showExternAction(
+ checkboxToggle(passwordProperty, passwordField).setEnabled(isPasswordManagementEnabled));
((PasswordTextField) passwordField.getField()).setResetPassword(false);
add(passwordField.setOutputMarkupId(true));
+ passwordField.setEnabled(isPasswordManagementEnabled);
}
private FormComponent<?> checkboxToggle(
diff --git a/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/any/LinkedAccountPlainAttrsPanel.java b/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/any/LinkedAccountPlainAttrsPanel.java
index aa2024b..6605691 100644
--- a/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/any/LinkedAccountPlainAttrsPanel.java
+++ b/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/any/LinkedAccountPlainAttrsPanel.java
@@ -43,7 +43,6 @@ import org.apache.syncope.client.ui.commons.markup.html.form.FieldPanel;
import org.apache.syncope.client.ui.commons.wicket.markup.html.bootstrap.tabs.Accordion;
import org.apache.syncope.client.ui.commons.wizards.AjaxWizard;
import org.apache.syncope.common.lib.Attr;
-import org.apache.syncope.client.console.layout.AnyLayoutUtils;
import org.apache.syncope.common.lib.types.SchemaType;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.extensions.markup.html.tabs.AbstractTab;
@@ -72,12 +71,13 @@ public class LinkedAccountPlainAttrsPanel extends AbstractAttrsWizardStep<PlainS
public <T extends AnyTO> LinkedAccountPlainAttrsPanel(
final EntityWrapper<LinkedAccountTO> modelObject,
- final UserTO userTO) throws IllegalArgumentException {
+ final UserTO userTO,
+ final List<String> whichPlainAttrs) throws IllegalArgumentException {
super(userTO,
AjaxWizard.Mode.EDIT,
AnyTypeRestClient.read(userTO.getType()).getClasses(),
- AnyLayoutUtils.fetch(List.of(userTO.getType())).getUser().getWhichPlainAttrs(),
+ whichPlainAttrs,
modelObject);
this.linkedAccountTO = modelObject.getInnerObject();
diff --git a/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/any/LinkedAccountWizardBuilder.java b/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/any/LinkedAccountWizardBuilder.java
index fcfcb9e..9d430d7 100644
--- a/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/any/LinkedAccountWizardBuilder.java
+++ b/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/any/LinkedAccountWizardBuilder.java
@@ -23,6 +23,8 @@ import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;
import java.util.stream.Collectors;
+import org.apache.syncope.client.console.layout.LinkedAccountForm;
+import org.apache.syncope.client.console.layout.LinkedAccountFormLayoutInfo;
import org.apache.syncope.client.console.rest.UserRestClient;
import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal.ModalEvent;
import org.apache.syncope.client.console.wizards.BaseAjaxWizardBuilder;
@@ -40,7 +42,7 @@ import org.apache.wicket.model.IModel;
/**
* Accounts wizard builder.
*/
-public class LinkedAccountWizardBuilder extends BaseAjaxWizardBuilder<LinkedAccountTO> {
+public class LinkedAccountWizardBuilder extends BaseAjaxWizardBuilder<LinkedAccountTO> implements LinkedAccountForm {
private static final long serialVersionUID = -9142332740863374891L;
@@ -48,9 +50,15 @@ public class LinkedAccountWizardBuilder extends BaseAjaxWizardBuilder<LinkedAcco
private final IModel<UserTO> model;
- public LinkedAccountWizardBuilder(final IModel<UserTO> model, final PageReference pageRef) {
+ protected LinkedAccountFormLayoutInfo formLayoutInfo;
+
+ public LinkedAccountWizardBuilder(
+ final IModel<UserTO> model,
+ final LinkedAccountFormLayoutInfo formLayoutInfo,
+ final PageReference pageRef) {
super(new LinkedAccountTO(), pageRef);
this.model = model;
+ this.formLayoutInfo = formLayoutInfo;
}
@Override
@@ -61,9 +69,20 @@ public class LinkedAccountWizardBuilder extends BaseAjaxWizardBuilder<LinkedAcco
@Override
protected WizardModel buildModelSteps(final LinkedAccountTO modelObject, final WizardModel wizardModel) {
wizardModel.add(new LinkedAccountDetailsPanel(modelObject));
- wizardModel.add(new LinkedAccountCredentialsPanel(new EntityWrapper<>(modelObject)));
- wizardModel.add(new LinkedAccountPlainAttrsPanel(new EntityWrapper<>(modelObject), model.getObject()));
- wizardModel.add(new LinkedAccountPrivilegesPanel(modelObject));
+ if (formLayoutInfo.isCredentials()) {
+ wizardModel.add(new LinkedAccountCredentialsPanel(
+ new EntityWrapper<>(modelObject), formLayoutInfo.getWhichCredentials()));
+ }
+
+ if (formLayoutInfo.isPlainAttrs()) {
+ wizardModel.add(new LinkedAccountPlainAttrsPanel(
+ new EntityWrapper<>(modelObject), model.getObject(), formLayoutInfo.getWhichPlainAttrs()));
+ }
+
+ if (formLayoutInfo.isPrivileges()) {
+ wizardModel.add(new LinkedAccountPrivilegesPanel(modelObject));
+ }
+
return wizardModel;
}
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/layout/UserFormLayoutInfo.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/layout/UserFormLayoutInfo.java
index 53e7182..22e7e89 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/layout/UserFormLayoutInfo.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/layout/UserFormLayoutInfo.java
@@ -61,5 +61,4 @@ public class UserFormLayoutInfo extends AbstractAnyFormLayout<UserTO, UserForm>
public void setRelationships(final boolean relationships) {
this.relationships = relationships;
}
-
}