[SYNCOPE-1683] Show properties override during resource create in tabular topology (#354)
diff --git a/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/resources/AbstractConnConfPanel.java b/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/resources/AbstractConnConfPanel.java
index ee230b7..e5ff149 100644
--- a/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/resources/AbstractConnConfPanel.java
+++ b/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/resources/AbstractConnConfPanel.java
@@ -76,7 +76,7 @@
}
protected void setConfPropertyListView(final IModel<List<ConnConfProperty>> model, final boolean withOverridable) {
- propertiesContainer.add(new ConnConfPropertyListView(
+ propertiesContainer.addOrReplace(new ConnConfPropertyListView(
"connectorProperties", model, withOverridable).setOutputMarkupId(true));
}
diff --git a/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceConnConfPanel.java b/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceConnConfPanel.java
index 207be00..f4e04df 100644
--- a/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceConnConfPanel.java
+++ b/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceConnConfPanel.java
@@ -25,6 +25,7 @@
import org.apache.syncope.client.console.rest.ConnectorRestClient;
import org.apache.syncope.common.lib.to.ResourceTO;
import org.apache.syncope.common.lib.types.ConnConfProperty;
+import org.apache.wicket.ajax.markup.html.form.AjaxButton;
import org.apache.wicket.model.LoadableDetachableModel;
import org.apache.wicket.model.PropertyModel;
@@ -107,4 +108,12 @@
return props;
}
+
+ public LoadableDetachableModel<List<ConnConfProperty>> getModel() {
+ return model;
+ }
+
+ public AjaxButton getCheck() {
+ return check;
+ }
}
diff --git a/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceDetailsPanel.java b/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceDetailsPanel.java
index b4bf9c8..232cd05 100644
--- a/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceDetailsPanel.java
+++ b/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceDetailsPanel.java
@@ -50,6 +50,8 @@
private static final long serialVersionUID = -7982691107029848579L;
+ private AjaxDropDownChoicePanel<String> connector;
+
private final IModel<List<String>> propagationActions = new LoadableDetachableModel<>() {
private static final long serialVersionUID = 5275935387613157437L;
@@ -151,7 +153,7 @@
new Model<>(resourceTO.getConnectorDisplayName()),
false).addRequiredLabel().setEnabled(false));
} else {
- final AjaxDropDownChoicePanel<String> connector = new AjaxDropDownChoicePanel<>(
+ connector = new AjaxDropDownChoicePanel<>(
"connector",
new ResourceModel("connector", "connector").getObject(),
new PropertyModel<>(resourceTO, "connector"), false);
@@ -186,4 +188,8 @@
container.add(connector);
}
}
+
+ public AjaxDropDownChoicePanel<String> getConnector() {
+ return connector;
+ }
}
diff --git a/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceWizardBuilder.java b/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceWizardBuilder.java
index 229dd50..1fd2642 100644
--- a/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceWizardBuilder.java
+++ b/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ResourceWizardBuilder.java
@@ -19,17 +19,24 @@
package org.apache.syncope.client.console.wizards.resources;
import java.io.Serializable;
+import java.util.ArrayList;
import java.util.Collections;
+import java.util.List;
import org.apache.commons.lang3.tuple.Pair;
import org.apache.syncope.client.console.rest.ConnectorRestClient;
import org.apache.syncope.client.console.rest.ResourceRestClient;
import org.apache.syncope.client.console.topology.TopologyNode;
+import org.apache.syncope.client.ui.commons.Constants;
+import org.apache.syncope.client.ui.commons.ajax.form.IndicatorAjaxFormComponentUpdatingBehavior;
import org.apache.syncope.client.ui.commons.wizards.AjaxWizard;
import org.apache.syncope.common.lib.to.ResourceTO;
+import org.apache.syncope.common.lib.types.ConnConfProperty;
import org.apache.wicket.PageReference;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.extensions.wizard.WizardModel;
import org.apache.wicket.markup.ComponentTag;
+import org.apache.wicket.model.LoadableDetachableModel;
+import org.apache.wicket.model.PropertyModel;
/**
* Resource wizard builder.
@@ -53,8 +60,9 @@
@Override
protected WizardModel buildModelSteps(final Serializable modelObject, final WizardModel wizardModel) {
ResourceTO resourceTO = ResourceTO.class.cast(modelObject);
- wizardModel.add(new ResourceDetailsPanel(resourceTO, createFlag));
- wizardModel.add(new ResourceConnConfPanel(resourceTO, createFlag) {
+ ResourceDetailsPanel resourceDetailsPanel = new ResourceDetailsPanel(resourceTO, createFlag);
+
+ ResourceConnConfPanel resourceConnConfPanel = new ResourceConnConfPanel(resourceTO, createFlag) {
private static final long serialVersionUID = -1128269449868933504L;
@@ -68,7 +76,59 @@
tag.append("class", "scrollable-tab-content", " ");
}
- });
+ };
+
+ if (createFlag && resourceDetailsPanel.getConnector() != null) {
+ resourceDetailsPanel.getConnector().getField().add(
+ new IndicatorAjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
+
+ private static final long serialVersionUID = 4600298808455564695L;
+
+ @Override
+ protected void onUpdate(final AjaxRequestTarget target) {
+ resourceTO.setConnector(resourceDetailsPanel.getConnector().getModelObject());
+
+ LoadableDetachableModel<List<ConnConfProperty>> model =
+ new LoadableDetachableModel<>() {
+
+ private static final long serialVersionUID = -2965284931860212687L;
+
+ @Override
+ protected List<ConnConfProperty> load() {
+ List<ConnConfProperty> confOverride =
+ resourceConnConfPanel.getConnProperties(resourceTO);
+ resourceTO.getConfOverride().clear();
+ resourceTO.getConfOverride().addAll(confOverride);
+
+ return new PropertyModel<List<ConnConfProperty>>(modelObject, "confOverride") {
+
+ private static final long serialVersionUID = -7809699384012595307L;
+
+ @Override
+ public List<ConnConfProperty> getObject() {
+ List<ConnConfProperty> res = new ArrayList<>(super.getObject());
+
+ // re-order properties
+ Collections.sort(res, (left, right) -> {
+ if (left == null) {
+ return -1;
+ } else {
+ return left.compareTo(right);
+ }
+ });
+
+ return res;
+ }
+ }.getObject();
+ }
+ };
+ resourceConnConfPanel.setConfPropertyListView(model, true);
+ target.add(resourceConnConfPanel.getCheck().setVisible(true).setEnabled(true));
+ }
+ });
+ }
+ wizardModel.add(resourceDetailsPanel);
+ wizardModel.add(resourceConnConfPanel);
if (resourceTO.getConnector() != null) {
wizardModel.add(new ResourceConnCapabilitiesPanel(
resourceTO, ConnectorRestClient.read(resourceTO.getConnector()).getCapabilities()));