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 4d153110726ec3e06ef262f96fd86843690aed9d
Author: Francesco Chicchiriccò <ilgro...@users.noreply.github.com>
AuthorDate: Wed Mar 22 09:02:04 2023 +0100

    [SYNCOPE-1745] Managing ConnId bundles with one or more Connectors (#430)
---
 .../wizards/resources/ConnectorConfPanel.java      |   8 +-
 .../wizards/resources/ConnectorDetailsPanel.java   | 164 ++++++++++-----------
 .../wizards/resources/ConnectorWizardBuilder.java  |  29 ++--
 .../wizards/resources/ResourceDetailsPanel.java    |  13 +-
 .../wizards/resources/ConnectorDetailsPanel.html   |   4 +
 .../resources/ConnectorDetailsPanel.properties     |   1 +
 .../ConnectorDetailsPanel_fr_CA.properties         |   5 +-
 .../resources/ConnectorDetailsPanel_it.properties  |   1 +
 .../resources/ConnectorDetailsPanel_ja.properties  |   1 +
 .../ConnectorDetailsPanel_pt_BR.properties         |   1 +
 .../resources/ConnectorDetailsPanel_ru.properties  |   1 +
 .../src/test/resources/domains/MasterContent.xml   |  16 +-
 .../src/test/resources/domains/MasterContent.xml   |  16 +-
 .../apache/syncope/fit/core/ConnectorITCase.java   |  24 +--
 .../src/test/resources/test.properties             |   2 +-
 pom.xml                                            |  12 +-
 .../configuration/connectorbundles.adoc            |   6 +-
 17 files changed, 135 insertions(+), 169 deletions(-)

diff --git 
a/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ConnectorConfPanel.java
 
b/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ConnectorConfPanel.java
index 4574260c8d..a9588bf736 100644
--- 
a/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ConnectorConfPanel.java
+++ 
b/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ConnectorConfPanel.java
@@ -45,13 +45,7 @@ public abstract class ConnectorConfPanel extends 
AbstractConnConfPanel<ConnInsta
                 ConnectorConfPanel.this.modelObject.getConf().clear();
 
                 // re-order properties
-                properties.sort((o1, o2) -> {
-                    if (o1 == null) {
-                        return -1;
-                    } else {
-                        return o1.compareTo(o2);
-                    }
-                });
+                properties.sort((o1, o2) -> o1 == null ? -1 : 
o1.compareTo(o2));
 
                 
ConnectorConfPanel.this.modelObject.getConf().addAll(properties);
                 return properties;
diff --git 
a/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ConnectorDetailsPanel.java
 
b/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ConnectorDetailsPanel.java
index e285ed2bc9..f769716a09 100644
--- 
a/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ConnectorDetailsPanel.java
+++ 
b/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ConnectorDetailsPanel.java
@@ -18,14 +18,13 @@
  */
 package org.apache.syncope.client.console.wizards.resources;
 
-import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Optional;
 import java.util.stream.Collectors;
-import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang3.tuple.Pair;
 import org.apache.syncope.client.console.SyncopeConsoleSession;
 import org.apache.syncope.client.console.commons.RealmsUtils;
-import org.apache.syncope.client.console.rest.ConnectorRestClient;
 import org.apache.syncope.client.console.rest.RealmRestClient;
 import 
org.apache.syncope.client.console.wicket.markup.html.form.AjaxSearchFieldPanel;
 import org.apache.syncope.client.ui.commons.Constants;
@@ -41,7 +40,6 @@ import org.apache.syncope.common.lib.to.RealmTO;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import 
org.apache.wicket.extensions.ajax.markup.html.autocomplete.AutoCompleteSettings;
 import org.apache.wicket.extensions.wizard.WizardStep;
-import org.apache.wicket.markup.html.form.DropDownChoice;
 import org.apache.wicket.model.PropertyModel;
 
 public class ConnectorDetailsPanel extends WizardStep {
@@ -76,79 +74,40 @@ public class ConnectorDetailsPanel extends WizardStep {
         add(realm.addRequiredLabel().setOutputMarkupId(true));
 
         AjaxTextFieldPanel displayName = new AjaxTextFieldPanel(
-                "displayName", "displayName", new 
PropertyModel<>(connInstanceTO, "displayName"), false);
-        displayName.setOutputMarkupId(true);
-        displayName.addRequiredLabel();
-        add(displayName);
+                "displayName",
+                "displayName",
+                new PropertyModel<>(connInstanceTO, "displayName"), false);
+        add(displayName.addRequiredLabel().setOutputMarkupId(true));
 
-        final AjaxDropDownChoicePanel<String> bundleName = new 
AjaxDropDownChoicePanel<>(
+        AjaxTextFieldPanel location = new AjaxTextFieldPanel(
+                "location", "location", new PropertyModel<>(connInstanceTO, 
"location"), false);
+        
add(location.addRequiredLabel().setOutputMarkupId(true).setEnabled(false));
+
+        AjaxDropDownChoicePanel<String> bundleName = new 
AjaxDropDownChoicePanel<>(
                 "bundleName",
                 "bundleName",
                 new PropertyModel<>(connInstanceTO, "bundleName"), false);
-
-        if (StringUtils.isNotBlank(connInstanceTO.getLocation())) {
-            AjaxTextFieldPanel location = new AjaxTextFieldPanel(
-                    "location", "location", new 
PropertyModel<>(connInstanceTO, "location"), false);
-            location.addRequiredLabel();
-            location.setOutputMarkupId(true);
-            location.setEnabled(false);
-            add(location);
-        } else {
-            final AjaxDropDownChoicePanel<String> location = new 
AjaxDropDownChoicePanel<>(
-                    "location", "location", new 
PropertyModel<>(connInstanceTO, "location"), false);
-            location.setChoices(new 
ArrayList<>(SyncopeConsoleSession.get().getPlatformInfo().getConnIdLocations()));
-            location.addRequiredLabel();
-            location.setOutputMarkupId(true);
-            location.getField().setOutputMarkupId(true);
-            add(location);
-
-            location.getField().add(new 
IndicatorAjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
-
-                private static final long serialVersionUID = 
-5609231641453245929L;
-
-                @Override
-                protected void onUpdate(final AjaxRequestTarget target) {
-                    ((DropDownChoice<String>) 
location.getField()).setNullValid(false);
-                    bundleName.setEnabled(true);
-
-                    List<ConnIdBundle> bundles = 
ConnectorRestClient.getAllBundles().stream().
-                            filter(object -> 
object.getLocation().equals(connInstanceTO.getLocation())).
-                            collect(Collectors.toList());
-
-                    List<String> listBundles = getBundles(connInstanceTO, 
bundles);
-                    if (listBundles.size() == 1) {
-                        connInstanceTO.setBundleName(listBundles.get(0));
-                        
bundleName.getField().setModelObject(listBundles.get(0));
-                    }
-                    bundleName.setChoices(listBundles);
-
-                    target.add(bundleName);
-                }
-            });
-        }
-
-        ((DropDownChoice<String>) bundleName.getField()).setNullValid(true);
-
-        List<String> bundleNames = new ArrayList<>();
-        bundles.stream().
-                filter(bundle -> 
(!bundleNames.contains(bundle.getBundleName()))).
-                forEachOrdered(bundle -> 
bundleNames.add(bundle.getBundleName()));
-
-        bundleName.setChoices(bundleNames);
-        bundleName.addRequiredLabel();
-        bundleName.setOutputMarkupId(true);
         bundleName.setEnabled(connInstanceTO.getKey() == null);
+        
bundleName.setChoices(bundles.stream().map(ConnIdBundle::getBundleName).
+                distinct().sorted().collect(Collectors.toList()));
         bundleName.getField().setOutputMarkupId(true);
-        add(bundleName);
-
-        final AjaxDropDownChoicePanel<String> version = new 
AjaxDropDownChoicePanel<>(
+        add(bundleName.addRequiredLabel().setOutputMarkupId(true));
+
+        AjaxDropDownChoicePanel<String> connectorName = new 
AjaxDropDownChoicePanel<>(
+                "connectorName",
+                "connectorName",
+                new PropertyModel<>(connInstanceTO, "connectorName"), false);
+        connectorName.setEnabled(connInstanceTO.getBundleName() == null);
+        Optional.ofNullable(connInstanceTO.getConnectorName()).ifPresent(v -> 
connectorName.setChoices(List.of(v)));
+        connectorName.getField().setOutputMarkupId(true);
+        add(connectorName.addRequiredLabel().setOutputMarkupId(true));
+
+        AjaxDropDownChoicePanel<String> version = new 
AjaxDropDownChoicePanel<>(
                 "version", "version", new PropertyModel<>(connInstanceTO, 
"version"), false);
-        version.setChoices(getVersions(connInstanceTO, bundles));
-        version.addRequiredLabel();
-        version.setEnabled(connInstanceTO.getBundleName() != null);
-        version.setOutputMarkupId(true);
+        version.setEnabled(connInstanceTO.getConnectorName() == null);
+        Optional.ofNullable(connInstanceTO.getVersion()).ifPresent(v -> 
version.setChoices(List.of(v)));
         version.getField().setOutputMarkupId(true);
-        add(version);
+        add(version.addRequiredLabel().setOutputMarkupId(true));
 
         bundleName.getField().add(new 
IndicatorAjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
 
@@ -156,18 +115,54 @@ public class ConnectorDetailsPanel extends WizardStep {
 
             @Override
             protected void onUpdate(final AjaxRequestTarget target) {
-                ((DropDownChoice<String>) 
bundleName.getField()).setNullValid(false);
-                version.setEnabled(true);
-
-                List<String> versions;
-                if (bundles.isEmpty()) {
-                    List<ConnIdBundle> bundles = 
ConnectorRestClient.getAllBundles().stream().
-                            filter(object -> 
object.getLocation().equals(connInstanceTO.getLocation())).
-                            collect(Collectors.toList());
-                    versions = getVersions(connInstanceTO, bundles);
+                connectorName.setEnabled(true);
+
+                List<Pair<String, String>> connectors = bundles.stream().
+                        filter(bundle -> 
bundle.getBundleName().equals(connInstanceTO.getBundleName())).
+                        map(bundle -> Pair.of(bundle.getConnectorName(), 
bundle.getVersion())).
+                        collect(Collectors.toList());
+                if (connectors.size() == 1) {
+                    Pair<String, String> entry = connectors.get(0);
+
+                    connInstanceTO.setConnectorName(entry.getLeft());
+                    connectorName.getField().setModelObject(entry.getLeft());
+                    connectorName.setChoices(List.of(entry.getLeft()));
+
+                    connInstanceTO.setVersion(entry.getRight());
+                    version.getField().setModelObject(entry.getRight());
+                    version.setChoices(List.of(entry.getRight()));
                 } else {
-                    versions = getVersions(connInstanceTO, bundles);
+                    connectorName.setChoices(connectors.stream().
+                            
map(Pair::getLeft).distinct().sorted().collect(Collectors.toList()));
+
+                    List<String> versions = connectors.stream().
+                            
map(Pair::getRight).distinct().sorted().collect(Collectors.toList());
+                    version.setChoices(versions);
+
+                    if (versions.size() == 1) {
+                        connInstanceTO.setVersion(versions.get(0));
+                        version.getField().setModelObject(versions.get(0));
+                    } else {
+                        connInstanceTO.setVersion(null);
+                        version.getField().setModelObject(null);
+                    }
                 }
+
+                target.add(version);
+                target.add(connectorName);
+            }
+        });
+
+        connectorName.getField().add(new 
IndicatorAjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
+
+            private static final long serialVersionUID = -1107858522700306810L;
+
+            @Override
+            protected void onUpdate(final AjaxRequestTarget target) {
+                List<String> versions = bundles.stream().
+                        filter(bundle -> 
bundle.getBundleName().equals(connInstanceTO.getBundleName())
+                        && 
bundle.getConnectorName().equals(connInstanceTO.getConnectorName())).
+                        
map(ConnIdBundle::getVersion).collect(Collectors.toList());
                 if (versions.size() == 1) {
                     connInstanceTO.setVersion(versions.get(0));
                     version.getField().setModelObject(versions.get(0));
@@ -206,15 +201,4 @@ public class ConnectorDetailsPanel extends WizardStep {
                 "poolMinEvictableIdleTime", "poolMinEvictableIdleTime", 
Long.class,
                 new PropertyModel<>(connInstanceTO.getPoolConf(), 
"minEvictableIdleTimeMillis")));
     }
-
-    private static List<String> getVersions(final ConnInstanceTO 
connInstanceTO, final List<ConnIdBundle> bundles) {
-        return bundles.stream().filter(object -> 
object.getLocation().equals(connInstanceTO.getLocation())
-                && 
object.getBundleName().equals(connInstanceTO.getBundleName())).
-                map(ConnIdBundle::getVersion).collect(Collectors.toList());
-    }
-
-    private List<String> getBundles(final ConnInstanceTO connInstanceTO, final 
List<ConnIdBundle> bundles) {
-        return bundles.stream().filter(object -> 
object.getLocation().equals(connInstanceTO.getLocation())).
-                map(ConnIdBundle::getBundleName).collect(Collectors.toList());
-    }
 }
diff --git 
a/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ConnectorWizardBuilder.java
 
b/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ConnectorWizardBuilder.java
index 7fc06a4dd1..1b5e18f19d 100644
--- 
a/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ConnectorWizardBuilder.java
+++ 
b/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/resources/ConnectorWizardBuilder.java
@@ -99,39 +99,32 @@ public class ConnectorWizardBuilder extends 
AbstractResourceWizardBuilder<ConnIn
             connInstanceTO.setPoolConf(null);
         }
 
-        ConnInstanceTO res;
+        ConnInstanceTO connInstance;
         if (mode == AjaxWizard.Mode.CREATE) {
-            res = ConnectorRestClient.create(connInstanceTO);
+            connInstance = ConnectorRestClient.create(connInstanceTO);
         } else {
             ConnectorRestClient.update(connInstanceTO);
-            res = connInstanceTO;
+            connInstance = connInstanceTO;
         }
 
-        return res;
+        return connInstance;
     }
 
     @Override
     protected Serializable getCreateCustomPayloadEvent(final Serializable 
afterObject, final AjaxRequestTarget target) {
-        final ConnInstanceTO actual = ConnInstanceTO.class.cast(afterObject);
+        ConnInstanceTO connInstance = ConnInstanceTO.class.cast(afterObject);
         return new CreateEvent(
-                actual.getKey(),
-                actual.getDisplayName(),
+                connInstance.getKey(),
+                connInstance.getDisplayName(),
                 TopologyNode.Kind.CONNECTOR,
-                URI.create(actual.getLocation()).toASCIIString(),
+                URI.create(connInstance.getLocation()).toASCIIString(),
                 target);
     }
 
     protected static ConnIdBundle getBundle(final ConnInstanceTO 
connInstanceTO, final List<ConnIdBundle> bundles) {
-        List<ConnIdBundle> bundlesList;
-        if (bundles.isEmpty()) {
-            bundlesList = ConnectorRestClient.getAllBundles().stream().
-                    filter(object -> 
object.getLocation().equals(connInstanceTO.getLocation())).
-                    collect(Collectors.toList());
-        } else {
-            bundlesList = bundles;
-        }
-        return bundlesList.stream().filter(bundle
-                -> 
bundle.getBundleName().equals(connInstanceTO.getBundleName())
+        return bundles.stream().
+                filter(bundle -> 
bundle.getBundleName().equals(connInstanceTO.getBundleName())
+                && 
bundle.getConnectorName().equals(connInstanceTO.getConnectorName())
                 && bundle.getVersion().equals(connInstanceTO.getVersion())).
                 findFirst().orElse(null);
     }
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 03bb66fbbb..1a4e2f871d 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
@@ -18,11 +18,10 @@
  */
 package org.apache.syncope.client.console.wizards.resources;
 
-import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Optional;
 import java.util.stream.Collectors;
 import org.apache.syncope.client.console.rest.ConnectorRestClient;
 import org.apache.syncope.client.console.rest.ImplementationRestClient;
@@ -32,6 +31,7 @@ import 
org.apache.syncope.client.ui.commons.markup.html.form.AjaxDropDownChoiceP
 import org.apache.syncope.client.ui.commons.markup.html.form.AjaxPalettePanel;
 import 
org.apache.syncope.client.ui.commons.markup.html.form.AjaxSpinnerFieldPanel;
 import 
org.apache.syncope.client.ui.commons.markup.html.form.AjaxTextFieldPanel;
+import org.apache.syncope.common.lib.to.ConnInstanceTO;
 import org.apache.syncope.common.lib.to.ImplementationTO;
 import org.apache.syncope.common.lib.to.ResourceTO;
 import org.apache.syncope.common.lib.types.IdMImplementationType;
@@ -157,10 +157,9 @@ public class ResourceDetailsPanel extends WizardStep {
                     "connector",
                     new ResourceModel("connector", "connector").getObject(),
                     new PropertyModel<>(resourceTO, "connector"), false);
-            Map<String, String> connectorsMap = new HashMap<>();
-            ConnectorRestClient.getAllConnectors().forEach(conn -> 
connectorsMap.put(conn.getKey(),
-                    conn.getDisplayName()));
-            connector.setChoices(new ArrayList<>(connectorsMap.keySet()));
+            Map<String, String> connectorsMap = 
ConnectorRestClient.getAllConnectors().stream().
+                    collect(Collectors.toMap(ConnInstanceTO::getKey, 
ConnInstanceTO::getDisplayName));
+            
connector.setChoices(connectorsMap.keySet().stream().sorted().collect(Collectors.toList()));
             connector.setChoiceRenderer(new IChoiceRenderer<>() {
 
                 private static final long serialVersionUID = 
91313845533448846L;
@@ -169,7 +168,7 @@ public class ResourceDetailsPanel extends WizardStep {
 
                 @Override
                 public String getDisplayValue(final String value) {
-                    return valueMap.get(value) == null ? value : 
valueMap.get(value);
+                    return 
Optional.ofNullable(valueMap.get(value)).orElse(null);
                 }
 
                 @Override
diff --git 
a/client/idm/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ConnectorDetailsPanel.html
 
b/client/idm/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ConnectorDetailsPanel.html
index 01ac512470..0a032723bf 100644
--- 
a/client/idm/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ConnectorDetailsPanel.html
+++ 
b/client/idm/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ConnectorDetailsPanel.html
@@ -38,6 +38,10 @@ under the License.
         <span wicket:id="bundleName">[bundleName]</span>
       </div>
 
+      <div class="form-group">
+        <span wicket:id="connectorName">[bundleName]</span>
+      </div>
+
       <div class="form-group">
         <span wicket:id="version">[version]</span>
       </div>
diff --git 
a/client/idm/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ConnectorDetailsPanel.properties
 
b/client/idm/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ConnectorDetailsPanel.properties
index 23711a979a..65edc08dd0 100644
--- 
a/client/idm/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ConnectorDetailsPanel.properties
+++ 
b/client/idm/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ConnectorDetailsPanel.properties
@@ -25,3 +25,4 @@ poolMaxIdle=Max idle objects
 poolMaxWait=Max waiting time (msec)
 poolMinEvictableIdleTime=Min eviction time (msec)
 adminRealm=Administration Realm
+connectorName=Connector
diff --git 
a/client/idm/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ConnectorDetailsPanel_fr_CA.properties
 
b/client/idm/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ConnectorDetailsPanel_fr_CA.properties
index 05fd6a980b..9407d943c4 100644
--- 
a/client/idm/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ConnectorDetailsPanel_fr_CA.properties
+++ 
b/client/idm/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ConnectorDetailsPanel_fr_CA.properties
@@ -16,12 +16,13 @@
 # under the License.
 displayName=Afficher nom
 location=Emplacement
-bundleName=Offre group�e
+bundleName=Offre group\u00e9e
 version=Version
-connRequestTimeout=D�lai de demande (sec)
+connRequestTimeout=D\u00e9lai de demande (sec)
 poolMaxObjects=Nombre maximum d'objets (inactif+actif)
 poolMinIdle=Nombre minimum d'objets inactifs
 poolMaxIdle=Nombre maximal d'objets inactifs
 poolMaxWait=Temps d'attente max (msec)
 poolMinEvictableIdleTime=Temps minimum d'expulsion (msec)
 adminRealm=Domaine de l'administration
+connectorName=Connector
diff --git 
a/client/idm/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ConnectorDetailsPanel_it.properties
 
b/client/idm/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ConnectorDetailsPanel_it.properties
index 0fd9aa775c..b162f30e21 100644
--- 
a/client/idm/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ConnectorDetailsPanel_it.properties
+++ 
b/client/idm/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ConnectorDetailsPanel_it.properties
@@ -25,3 +25,4 @@ poolMaxIdle=Max oggetti inattivi
 poolMaxWait=Tempo max attesa
 poolMinEvictableIdleTime=Tempo min espulsione
 adminRealm=Realm di amministrazione
+connectorName=Connettore
diff --git 
a/client/idm/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ConnectorDetailsPanel_ja.properties
 
b/client/idm/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ConnectorDetailsPanel_ja.properties
index d12baa207d..3ce4e9cd20 100644
--- 
a/client/idm/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ConnectorDetailsPanel_ja.properties
+++ 
b/client/idm/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ConnectorDetailsPanel_ja.properties
@@ -25,3 +25,4 @@ 
poolMaxIdle=\u6700\u5927\u30a2\u30a4\u30c9\u30eb\u30aa\u30d6\u30b8\u30a7\u30af\u
 poolMaxWait=\u6700\u5927\u5f85\u6a5f\u6642\u9593 (\u30df\u30ea\u79d2)
 poolMinEvictableIdleTime=\u6700\u5c0f\u6392\u51fa\u6642\u9593 
(\u30df\u30ea\u79d2)
 adminRealm=\u7ba1\u7406\u30ec\u30eb\u30e0
+connectorName=Connector
diff --git 
a/client/idm/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ConnectorDetailsPanel_pt_BR.properties
 
b/client/idm/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ConnectorDetailsPanel_pt_BR.properties
index db06733e5d..23c3a09ec6 100644
--- 
a/client/idm/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ConnectorDetailsPanel_pt_BR.properties
+++ 
b/client/idm/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ConnectorDetailsPanel_pt_BR.properties
@@ -25,3 +25,4 @@ poolMaxIdle=Max idle objects
 poolMaxWait=Max waiting time (msec)
 poolMinEvictableIdleTime=Min eviction time (msec)
 adminRealm=Administration Realm
+connectorName=Connector
diff --git 
a/client/idm/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ConnectorDetailsPanel_ru.properties
 
b/client/idm/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ConnectorDetailsPanel_ru.properties
index c5d4b3f6fa..81db5b8f32 100644
--- 
a/client/idm/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ConnectorDetailsPanel_ru.properties
+++ 
b/client/idm/console/src/main/resources/org/apache/syncope/client/console/wizards/resources/ConnectorDetailsPanel_ru.properties
@@ -26,3 +26,4 @@ poolMaxIdle=\u041c\u0430\u043a\u0441\u0438\u043c\u0443\u043c 
\u043e\u0431\u044a\
 
poolMaxWait=\u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435
 \u0432\u0440\u0435\u043c\u044f 
\u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f (\u043c\u0441)
 
poolMinEvictableIdleTime=\u041c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435
 \u0432\u0440\u0435\u043c\u044f 
\u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f (\u043c\u0441)
 adminRealm=Administration Realm
+connectorName=Connector
diff --git 
a/core/persistence-jpa-json/src/test/resources/domains/MasterContent.xml 
b/core/persistence-jpa-json/src/test/resources/domains/MasterContent.xml
index 223c6b0719..d061c253f4 100644
--- a/core/persistence-jpa-json/src/test/resources/domains/MasterContent.xml
+++ b/core/persistence-jpa-json/src/test/resources/domains/MasterContent.xml
@@ -474,9 +474,9 @@ under the License.
   <ConnInstance id="5aa5b8be-7521-481a-9651-c557aea078c1" displayName="H2"
                 adminRealm_id="e4c28e7a-9dbf-4ee7-9441-93812a0d4a28"
                 
location="connid://${testconnectorserver.key}@localhost:${testconnectorserver.port}"
-                bundleName="net.tirasa.connid.bundles.db.table"
+                bundleName="net.tirasa.connid.bundles.db"
                 
connectorName="net.tirasa.connid.bundles.db.table.DatabaseTableConnector"
-                version="${connid.database.version}"
+                version="${connid.db.version}"
                 
jsonConf='[{"schema":{"name":"disabledStatusValue","displayName":null,"helpMessage":null,"type":"java.lang.String","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["false"]},{"schema":{"name":"user","displayName":null,"helpMessage":null,"type":"java.lang.String","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["sa"]},{"schema":{"name":"keyColumn","displayName":null,"helpM
 [...]
                 
capabilities='["AUTHENTICATE","CREATE","UPDATE","DELETE","SEARCH","SYNC"]'/>
 
@@ -519,25 +519,25 @@ under the License.
   <ConnInstance id="a28abd9b-9f4a-4ef6-a7a8-d19ad2a8f29d" 
displayName="H2-test2"
                 adminRealm_id="e4c28e7a-9dbf-4ee7-9441-93812a0d4a28"
                 
location="connid://${testconnectorserver.key}@localhost:${testconnectorserver.port}"
-                bundleName="net.tirasa.connid.bundles.db.table"
+                bundleName="net.tirasa.connid.bundles.db"
                 
connectorName="net.tirasa.connid.bundles.db.table.DatabaseTableConnector"
-                version="${connid.database.version}"
+                version="${connid.db.version}"
                 
jsonConf='[{"schema":{"name":"disabledStatusValue","displayName":null,"helpMessage":null,"type":"java.lang.String","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["false"]},{"schema":{"name":"user","displayName":null,"helpMessage":null,"type":"java.lang.String","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["sa"]},{"schema":{"name":"keyColumn","displayName":null,"helpM
 [...]
                 capabilities='["CREATE","UPDATE","SYNC","SEARCH"]'/>
   
-  <ConnInstance id="be24b061-019d-4e3e-baf0-0a6d0a45cb9c" 
bundleName="net.tirasa.connid.bundles.db.table" 
+  <ConnInstance id="be24b061-019d-4e3e-baf0-0a6d0a45cb9c" 
bundleName="net.tirasa.connid.bundles.db" 
                 adminRealm_id="e4c28e7a-9dbf-4ee7-9441-93812a0d4a28"
                 
location="connid://${testconnectorserver.key}@localhost:${testconnectorserver.port}"
                 
connectorName="net.tirasa.connid.bundles.db.table.DatabaseTableConnector" 
-                displayName="H2-testpull" version="${connid.database.version}"
+                displayName="H2-testpull" version="${connid.db.version}"
                 
jsonConf='[{"schema":{"name":"changeLogColumn","displayName":"Change Log Column 
(Sync)","helpMessage":"=&lt;b&gt;Change Log Column&lt;/b&gt;&lt;br&gt;The 
change log column store the latest change time. Providing this value the Pull 
capabilities are 
activated.","type":"java.lang.String","required":false,"order":21,"confidential":false,"defaultValues":null},"overridable":false,"values":[]},{"schema":{"name":"nativeTimestamps","displayName":"Native
 Timestamps ","helpMessage" [...]
                 capabilities='["CREATE","UPDATE","DELETE","SEARCH"]'/>
   
-  <ConnInstance id="a6d017fd-a705-4507-bb7c-6ab6a6745997" 
bundleName="net.tirasa.connid.bundles.db.scriptedsql" 
+  <ConnInstance id="a6d017fd-a705-4507-bb7c-6ab6a6745997" 
bundleName="net.tirasa.connid.bundles.db" 
                 adminRealm_id="0679e069-7355-4b20-bd11-a5a0a5453c7c"
                 
location="connid://${testconnectorserver.key}@localhost:${testconnectorserver.port}"
                 
connectorName="net.tirasa.connid.bundles.db.scriptedsql.ScriptedSQLConnector"
-                displayName="Scripted SQL" version="${connid.database.version}"
+                displayName="Scripted SQL" version="${connid.db.version}"
                 
jsonConf='[{&quot;schema&quot;:{&quot;name&quot;:&quot;updateScriptFileName&quot;,&quot;displayName&quot;:&quot;updateScriptFileName&quot;,&quot;helpMessage&quot;:&quot;updateScriptFileName&quot;,&quot;type&quot;:&quot;java.lang.String&quot;,&quot;required&quot;:false,&quot;order&quot;:0,&quot;confidential&quot;:false,&quot;defaultValues&quot;:[]},&quot;overridable&quot;:false,&quot;values&quot;:[&quot;${syncope.conf.dir}/scriptedsql/UpdateScript.groovy&quot;]},{&quot;sch
 [...]
                 
capabilities='["CREATE","UPDATE","UPDATE_DELTA","DELETE","SEARCH","SYNC"]'/>
   
diff --git a/core/persistence-jpa/src/test/resources/domains/MasterContent.xml 
b/core/persistence-jpa/src/test/resources/domains/MasterContent.xml
index a2f86a8566..61ad9a8925 100644
--- a/core/persistence-jpa/src/test/resources/domains/MasterContent.xml
+++ b/core/persistence-jpa/src/test/resources/domains/MasterContent.xml
@@ -560,9 +560,9 @@ under the License.
   <ConnInstance id="5aa5b8be-7521-481a-9651-c557aea078c1" displayName="H2"
                 adminRealm_id="e4c28e7a-9dbf-4ee7-9441-93812a0d4a28"
                 
location="connid://${testconnectorserver.key}@localhost:${testconnectorserver.port}"
-                bundleName="net.tirasa.connid.bundles.db.table"
+                bundleName="net.tirasa.connid.bundles.db"
                 
connectorName="net.tirasa.connid.bundles.db.table.DatabaseTableConnector"
-                version="${connid.database.version}"
+                version="${connid.db.version}"
                 
jsonConf='[{"schema":{"name":"disabledStatusValue","displayName":null,"helpMessage":null,"type":"java.lang.String","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["false"]},{"schema":{"name":"user","displayName":null,"helpMessage":null,"type":"java.lang.String","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["sa"]},{"schema":{"name":"keyColumn","displayName":null,"helpM
 [...]
                 
capabilities='["AUTHENTICATE","CREATE","UPDATE","DELETE","SEARCH","SYNC"]'/>
 
@@ -605,25 +605,25 @@ under the License.
   <ConnInstance id="a28abd9b-9f4a-4ef6-a7a8-d19ad2a8f29d" 
displayName="H2-test2"
                 adminRealm_id="e4c28e7a-9dbf-4ee7-9441-93812a0d4a28"
                 
location="connid://${testconnectorserver.key}@localhost:${testconnectorserver.port}"
-                bundleName="net.tirasa.connid.bundles.db.table"
+                bundleName="net.tirasa.connid.bundles.db"
                 
connectorName="net.tirasa.connid.bundles.db.table.DatabaseTableConnector"
-                version="${connid.database.version}"
+                version="${connid.db.version}"
                 
jsonConf='[{"schema":{"name":"disabledStatusValue","displayName":null,"helpMessage":null,"type":"java.lang.String","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["false"]},{"schema":{"name":"user","displayName":null,"helpMessage":null,"type":"java.lang.String","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["sa"]},{"schema":{"name":"keyColumn","displayName":null,"helpM
 [...]
                 capabilities='["CREATE","UPDATE","SYNC","SEARCH"]'/>
   
-  <ConnInstance id="be24b061-019d-4e3e-baf0-0a6d0a45cb9c" 
bundleName="net.tirasa.connid.bundles.db.table" 
+  <ConnInstance id="be24b061-019d-4e3e-baf0-0a6d0a45cb9c" 
bundleName="net.tirasa.connid.bundles.db" 
                 adminRealm_id="e4c28e7a-9dbf-4ee7-9441-93812a0d4a28"
                 
location="connid://${testconnectorserver.key}@localhost:${testconnectorserver.port}"
                 
connectorName="net.tirasa.connid.bundles.db.table.DatabaseTableConnector" 
-                displayName="H2-testpull" version="${connid.database.version}"
+                displayName="H2-testpull" version="${connid.db.version}"
                 
jsonConf='[{"schema":{"name":"changeLogColumn","displayName":"Change Log Column 
(Sync)","helpMessage":"=&lt;b&gt;Change Log Column&lt;/b&gt;&lt;br&gt;The 
change log column store the latest change time. Providing this value the Pull 
capabilities are 
activated.","type":"java.lang.String","required":false,"order":21,"confidential":false,"defaultValues":null},"overridable":false,"values":[]},{"schema":{"name":"nativeTimestamps","displayName":"Native
 Timestamps ","helpMessage" [...]
                 capabilities='["CREATE","UPDATE","DELETE","SEARCH"]'/>
   
-  <ConnInstance id="a6d017fd-a705-4507-bb7c-6ab6a6745997" 
bundleName="net.tirasa.connid.bundles.db.scriptedsql" 
+  <ConnInstance id="a6d017fd-a705-4507-bb7c-6ab6a6745997" 
bundleName="net.tirasa.connid.bundles.db" 
                 adminRealm_id="0679e069-7355-4b20-bd11-a5a0a5453c7c"
                 
location="connid://${testconnectorserver.key}@localhost:${testconnectorserver.port}"
                 
connectorName="net.tirasa.connid.bundles.db.scriptedsql.ScriptedSQLConnector"
-                displayName="Scripted SQL" version="${connid.database.version}"
+                displayName="Scripted SQL" version="${connid.db.version}"
                 
jsonConf='[{&quot;schema&quot;:{&quot;name&quot;:&quot;updateScriptFileName&quot;,&quot;displayName&quot;:&quot;updateScriptFileName&quot;,&quot;helpMessage&quot;:&quot;updateScriptFileName&quot;,&quot;type&quot;:&quot;java.lang.String&quot;,&quot;required&quot;:false,&quot;order&quot;:0,&quot;confidential&quot;:false,&quot;defaultValues&quot;:[]},&quot;overridable&quot;:false,&quot;values&quot;:[&quot;${syncope.conf.dir}/scriptedsql/UpdateScript.groovy&quot;]},{&quot;sch
 [...]
                 
capabilities='["CREATE","UPDATE","UPDATE_DELTA","DELETE","SEARCH","SYNC"]'/>
   
diff --git 
a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/ConnectorITCase.java
 
b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/ConnectorITCase.java
index 74ca0c171a..682f3b0eac 100644
--- 
a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/ConnectorITCase.java
+++ 
b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/ConnectorITCase.java
@@ -81,7 +81,7 @@ public class ConnectorITCase extends AbstractITCase {
             props.load(propStream);
 
             CONNID_SOAP_VERSION = props.getProperty("connid.soap.version");
-            CONNID_DB_VERSION = props.getProperty("connid.database.version");
+            CONNID_DB_VERSION = props.getProperty("connid.db.version");
 
             TEST_JDBC_URL = props.getProperty("testdb.url");
         } catch (Exception e) {
@@ -350,22 +350,14 @@ public class ConnectorITCase extends AbstractITCase {
     @Test
     public void checkSelectedLanguage() {
         // 1. Check Italian
-        List<ConnInstanceTO> connInstances = CONNECTOR_SERVICE.list("it");
-
-        for (ConnInstanceTO instance : connInstances) {
-            if 
("net.tirasa.connid.bundles.db.table".equals(instance.getBundleName())) {
-                assertEquals("Utente", 
instance.getConf("user").get().getSchema().getDisplayName());
-            }
-        }
+        assertTrue(CONNECTOR_SERVICE.list("it").stream().
+                filter(i -> 
"net.tirasa.connid.bundles.db.table.DatabaseTableConnector".equals(i.getConnectorName())).
+                allMatch(i -> 
"Utente".equals(i.getConf("user").get().getSchema().getDisplayName())));
 
         // 2. Check English (default)
-        connInstances = CONNECTOR_SERVICE.list(null);
-
-        for (ConnInstanceTO instance : connInstances) {
-            if 
("net.tirasa.connid.bundles.db.table".equals(instance.getBundleName())) {
-                assertEquals("User", 
instance.getConf("user").get().getSchema().getDisplayName());
-            }
-        }
+        assertTrue(CONNECTOR_SERVICE.list(null).stream().
+                filter(i -> 
"net.tirasa.connid.bundles.db.table.DatabaseTableConnector".equals(i.getConnectorName())).
+                allMatch(i -> 
"User".equals(i.getConf("user").get().getSchema().getDisplayName())));
     }
 
     @Test
@@ -375,7 +367,7 @@ public class ConnectorITCase extends AbstractITCase {
         connectorTO.setLocation(CONNECTOR_SERVER_LOCATION);
         connectorTO.setVersion(CONNID_DB_VERSION);
         
connectorTO.setConnectorName("net.tirasa.connid.bundles.db.table.DatabaseTableConnector");
-        connectorTO.setBundleName("net.tirasa.connid.bundles.db.table");
+        connectorTO.setBundleName("net.tirasa.connid.bundles.db");
         connectorTO.setDisplayName("H2Test");
 
         // set the connector configuration using PropertyTO
diff --git a/fit/core-reference/src/test/resources/test.properties 
b/fit/core-reference/src/test/resources/test.properties
index 0d0312daef..6e96e78237 100644
--- a/fit/core-reference/src/test/resources/test.properties
+++ b/fit/core-reference/src/test/resources/test.properties
@@ -30,6 +30,6 @@ testdb.username=${testdb.username}
 testdb.password=${testdb.password}
 
 connid.soap.version=${connid.soap.version}
-connid.database.version=${connid.database.version}
+connid.db.version=${connid.db.version}
 
 springActiveProfiles=${spring.profiles.active}
diff --git a/pom.xml b/pom.xml
index 600295eb57..7973b5334a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -400,7 +400,7 @@ under the License.
     <connid.version>1.6.0.0-SNAPSHOT</connid.version>
     <connid.soap.version>1.5.0-SNAPSHOT</connid.soap.version>
     <connid.rest.version>1.1.0-SNAPSHOT</connid.rest.version>
-    <connid.database.version>2.2.10</connid.database.version>
+    <connid.db.version>2.3.0-SNAPSHOT</connid.db.version>
     <connid.csvdir.version>0.8.9</connid.csvdir.version>
     <connid.ldap.version>1.5.7</connid.ldap.version>
     <connid.ad.version>1.3.8</connid.ad.version>
@@ -1500,14 +1500,8 @@ under the License.
               </artifactItem>
               <artifactItem>
                 <groupId>net.tirasa.connid.bundles.db</groupId>
-                <artifactId>net.tirasa.connid.bundles.db.table</artifactId>
-                <version>${connid.database.version}</version>
-                <classifier>bundle</classifier>
-              </artifactItem>
-              <artifactItem>
-                <groupId>net.tirasa.connid.bundles.db</groupId>
-                
<artifactId>net.tirasa.connid.bundles.db.scriptedsql</artifactId>
-                <version>${connid.database.version}</version>
+                <artifactId>net.tirasa.connid.bundles.db</artifactId>
+                <version>${connid.db.version}</version>
                 <classifier>bundle</classifier>
               </artifactItem>
               <artifactItem>
diff --git 
a/src/main/asciidoc/reference-guide/configuration/connectorbundles.adoc 
b/src/main/asciidoc/reference-guide/configuration/connectorbundles.adoc
index 757160f571..15c4323d9a 100644
--- a/src/main/asciidoc/reference-guide/configuration/connectorbundles.adoc
+++ b/src/main/asciidoc/reference-guide/configuration/connectorbundles.adoc
@@ -41,14 +41,14 @@ bundle's version.
 If you want your own project to use a different version of a given connector 
bundle, all you need to do is to override
 the related property in your own project's root pom.xml.
 
-Hence, supposing that you would like to use 
`net.tirasa.connid.bundles.db.table` version `2.2.8-SNAPSHOT` rather than
-`2.2.7` shipped with Apache Syncope, add the following property to your own 
project's root `pom.xml`:
+Hence, supposing that you would like to use `net.tirasa.connid.bundles.db` 
version `3.0.0-SNAPSHOT` rather than
+the one with version shipped with Apache Syncope, add the following property 
to your own project's root `pom.xml`:
 
 [source,xml]
 ....
 <properties>
    ...
-   <connid.database.version>2.2.8-SNAPSHOT</connid.database.version>
+   <connid.db.version>3.0.0-SNAPSHOT</connid.db.version>
 </properties>
 ....
 


Reply via email to