You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@syncope.apache.org by fm...@apache.org on 2012/07/17 12:57:47 UTC
svn commit: r1362443 - in /incubator/syncope/trunk:
client/src/main/java/org/apache/syncope/client/util/
console/src/main/java/org/apache/syncope/console/pages/panels/
console/src/main/java/org/apache/syncope/console/rest/
console/src/test/java/org/apa...
Author: fmartelli
Date: Tue Jul 17 10:57:46 2012
New Revision: 1362443
URL: http://svn.apache.org/viewvc?rev=1362443&view=rev
Log:
SYNCOPE-112 #comment modified connector bean creation + some selenium tests fixed
Removed:
incubator/syncope/trunk/client/src/main/java/org/apache/syncope/client/util/ConnConfPropUtils.java
Modified:
incubator/syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/panels/ResourceConnConfPanel.java
incubator/syncope/trunk/console/src/main/java/org/apache/syncope/console/rest/ConnectorRestClient.java
incubator/syncope/trunk/console/src/test/java/org/apache/syncope/console/ConnInstanceTestITCase.java
incubator/syncope/trunk/console/src/test/java/org/apache/syncope/console/RoleTestITCase.java
incubator/syncope/trunk/core/src/main/java/org/apache/syncope/core/init/ConnInstanceLoader.java
incubator/syncope/trunk/core/src/main/java/org/apache/syncope/core/rest/controller/ConnInstanceController.java
incubator/syncope/trunk/core/src/main/java/org/apache/syncope/core/rest/controller/ResourceController.java
incubator/syncope/trunk/core/src/main/java/org/apache/syncope/core/rest/data/ResourceDataBinder.java
incubator/syncope/trunk/core/src/test/java/org/apache/syncope/core/init/ConnInstanceLoaderTest.java
incubator/syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/ConnInstanceTestITCase.java
Modified: incubator/syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/panels/ResourceConnConfPanel.java
URL: http://svn.apache.org/viewvc/incubator/syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/panels/ResourceConnConfPanel.java?rev=1362443&r1=1362442&r2=1362443&view=diff
==============================================================================
--- incubator/syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/panels/ResourceConnConfPanel.java (original)
+++ incubator/syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/panels/ResourceConnConfPanel.java Tue Jul 17 10:57:46 2012
@@ -41,9 +41,7 @@ import org.apache.wicket.spring.injectio
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.util.ClassUtils;
-import org.apache.syncope.client.to.ConnInstanceTO;
import org.apache.syncope.client.to.ResourceTO;
-import org.apache.syncope.client.util.ConnConfPropUtils;
import org.apache.syncope.console.pages.BaseModalPage;
import org.apache.syncope.console.pages.ResourceModalPage.ResourceEvent;
import org.apache.syncope.console.pages.panels.ResourceDetailsPanel.DetailsModEvent;
@@ -116,13 +114,7 @@ public class ResourceConnConfPanel exten
@Override
public void onClick(final AjaxRequestTarget target) {
- ConnInstanceTO connectorTO = connRestClient.read(resourceTO.getConnectorId());
-
- connectorTO.setConfiguration(ConnConfPropUtils.joinConnInstanceProperties(connectorTO.
- getConfigurationMap(),
- ConnConfPropUtils.getConnConfPropertyMap(resourceTO.getConnConfProperties())));
-
- if (connRestClient.check(connectorTO).booleanValue()) {
+ if (connRestClient.check(resourceTO).booleanValue()) {
info(getString("success_connection"));
} else {
error(getString("error_connection"));
Modified: incubator/syncope/trunk/console/src/main/java/org/apache/syncope/console/rest/ConnectorRestClient.java
URL: http://svn.apache.org/viewvc/incubator/syncope/trunk/console/src/main/java/org/apache/syncope/console/rest/ConnectorRestClient.java?rev=1362443&r1=1362442&r2=1362443&view=diff
==============================================================================
--- incubator/syncope/trunk/console/src/main/java/org/apache/syncope/console/rest/ConnectorRestClient.java (original)
+++ incubator/syncope/trunk/console/src/main/java/org/apache/syncope/console/rest/ConnectorRestClient.java Tue Jul 17 10:57:46 2012
@@ -28,6 +28,7 @@ import org.springframework.beans.BeanUti
import org.springframework.stereotype.Component;
import org.apache.syncope.client.to.ConnBundleTO;
import org.apache.syncope.client.to.ConnInstanceTO;
+import org.apache.syncope.client.to.ResourceTO;
import org.apache.syncope.client.validation.SyncopeClientCompositeErrorException;
import org.apache.syncope.console.SyncopeSession;
import org.apache.syncope.types.ConnConfProperty;
@@ -144,7 +145,7 @@ public class ConnectorRestClient extends
}
/**
- * Test connection.
+ * Test connector connection.
*
* @param connectorTO connector.
* @return Connection status.
@@ -165,6 +166,23 @@ public class ConnectorRestClient extends
}
}
+ /**
+ * Test resource connection.
+ *
+ * @param connectorTO connector.
+ * @return Connection status.
+ */
+ public Boolean check(final ResourceTO resourceTO) {
+
+ try {
+ return SyncopeSession.get().getRestTemplate().postForObject(
+ baseURL + "resource/check.json", resourceTO, Boolean.class);
+ } catch (Exception e) {
+ LOG.error("Connector not found {}", resourceTO.getConnectorId(), e);
+ return false;
+ }
+ }
+
public List<String> getSchemaNames(final ConnInstanceTO connectorTO) {
List<String> schemaNames = null;
Modified: incubator/syncope/trunk/console/src/test/java/org/apache/syncope/console/ConnInstanceTestITCase.java
URL: http://svn.apache.org/viewvc/incubator/syncope/trunk/console/src/test/java/org/apache/syncope/console/ConnInstanceTestITCase.java?rev=1362443&r1=1362442&r2=1362443&view=diff
==============================================================================
--- incubator/syncope/trunk/console/src/test/java/org/apache/syncope/console/ConnInstanceTestITCase.java (original)
+++ incubator/syncope/trunk/console/src/test/java/org/apache/syncope/console/ConnInstanceTestITCase.java Tue Jul 17 10:57:46 2012
@@ -32,7 +32,7 @@ public class ConnInstanceTestITCase exte
selenium.waitForCondition("selenium.isElementPresent(" + "\"//input[@name='version:textField']\");", "30000");
- selenium.select("//select[@name='bundle:dropDownChoiceField']", "label=org.connid.bundles.soap 1.2");
+ selenium.select("//select[@name='bundle:dropDownChoiceField']", "label=org.connid.bundles.soap 1.2.2");
selenium.click("//div[@id='tabs']/ul/li[2]/a/span");
selenium.click("//form/div[@id='tabs']/ul/li[1]/a/span");
@@ -55,7 +55,7 @@ public class ConnInstanceTestITCase exte
assertEquals("ConnInstance103", selenium.getAttribute("//input[@name='displayName:textField']/@value"));
- assertEquals("org.connid.bundles.soap#1.2", selenium
+ assertEquals("org.connid.bundles.soap#1.2.2", selenium
.getSelectedValue("//select[@name='bundle:dropDownChoiceField']"));
selenium.click("//div[@id='tabs']/ul/li[2]/a/span");
Modified: incubator/syncope/trunk/console/src/test/java/org/apache/syncope/console/RoleTestITCase.java
URL: http://svn.apache.org/viewvc/incubator/syncope/trunk/console/src/test/java/org/apache/syncope/console/RoleTestITCase.java?rev=1362443&r1=1362442&r2=1362443&view=diff
==============================================================================
--- incubator/syncope/trunk/console/src/test/java/org/apache/syncope/console/RoleTestITCase.java (original)
+++ incubator/syncope/trunk/console/src/test/java/org/apache/syncope/console/RoleTestITCase.java Tue Jul 17 10:57:46 2012
@@ -168,7 +168,7 @@ public class RoleTestITCase extends Abst
selenium.waitForCondition("selenium.isElementPresent(\"//div[@id='navigationPane']\");", "30000");
- selenium.click("//div[3]/span/div/div/table[12]/tbody/tr/td[6]/table/tbody/tr/td[2]/a");
+ selenium.click("//div[3]/span/div/div/table[12]/tbody/tr/td[5]/table/tbody/tr/td[2]/a");
selenium.waitForCondition("selenium.isElementPresent(\"//div/p/span[2]/span/a[3]\");", "30000");
Modified: incubator/syncope/trunk/core/src/main/java/org/apache/syncope/core/init/ConnInstanceLoader.java
URL: http://svn.apache.org/viewvc/incubator/syncope/trunk/core/src/main/java/org/apache/syncope/core/init/ConnInstanceLoader.java?rev=1362443&r1=1362442&r2=1362443&view=diff
==============================================================================
--- incubator/syncope/trunk/core/src/main/java/org/apache/syncope/core/init/ConnInstanceLoader.java (original)
+++ incubator/syncope/trunk/core/src/main/java/org/apache/syncope/core/init/ConnInstanceLoader.java Tue Jul 17 10:57:46 2012
@@ -18,7 +18,6 @@
*/
package org.apache.syncope.core.init;
-import java.util.HashSet;
import java.util.Locale;
import java.util.Set;
import javassist.NotFoundException;
@@ -27,6 +26,7 @@ import org.apache.syncope.core.persisten
import org.apache.syncope.core.persistence.beans.ExternalResource;
import org.apache.syncope.core.persistence.dao.ResourceDAO;
import org.apache.syncope.core.propagation.ConnectorFacadeProxy;
+import org.apache.syncope.core.rest.data.ResourceDataBinder;
import org.apache.syncope.core.util.ApplicationContextProvider;
import org.apache.syncope.core.util.ConnBundleManager;
import org.apache.syncope.types.ConnConfProperty;
@@ -54,6 +54,9 @@ public class ConnInstanceLoader {
@Autowired
private ConnBundleManager connBundleManager;
+ @Autowired
+ private ResourceDataBinder resourceDataBinder;
+
private DefaultListableBeanFactory getBeanFactory() {
ConfigurableApplicationContext context = ApplicationContextProvider.getApplicationContext();
@@ -71,7 +74,8 @@ public class ConnInstanceLoader {
* @return live connector bran for given resource
* @throws BeansException in case the connector is not registered in the context
*/
- public ConnectorFacadeProxy getConnector(final ExternalResource resource) throws BeansException, NotFoundException {
+ public ConnectorFacadeProxy getConnector(final ExternalResource resource)
+ throws BeansException, NotFoundException {
// Try to re-create connector bean from underlying resource
// (useful for managing failover scenarios)
@@ -82,32 +86,11 @@ public class ConnInstanceLoader {
return (ConnectorFacadeProxy) getBeanFactory().getBean(getBeanName(resource));
}
- public ConnectorFacadeProxy createConnectorBean(final ExternalResource resource) throws NotFoundException {
-
- final Set<ConnConfProperty> configuration = new HashSet<ConnConfProperty>();
-
- // to be used to control managed prop (needed by overridden mechanism)
- final Set<String> propertyNames = new HashSet<String>();
-
- // get overridden connector configuration properties
- for (ConnConfProperty prop : resource.getConfiguration()) {
- if (!propertyNames.contains(prop.getSchema().getName())) {
- configuration.add(prop);
- propertyNames.add(prop.getSchema().getName());
- }
- }
-
- final ConnInstance connInstance = resource.getConnector();
-
- // get connector configuration properties
- for (ConnConfProperty prop : connInstance.getConfiguration()) {
- if (!propertyNames.contains(prop.getSchema().getName())) {
- configuration.add(prop);
- propertyNames.add(prop.getSchema().getName());
- }
- }
+ public ConnectorFacadeProxy createConnectorBean(final ExternalResource resource)
+ throws NotFoundException {
- return createConnectorBean(connInstance, configuration);
+ final ConnInstance connInstanceClone = resourceDataBinder.getConnInstance(resource);
+ return createConnectorBean(resource.getConnector(), connInstanceClone.getConfiguration());
}
/**
@@ -120,7 +103,8 @@ public class ConnInstanceLoader {
* @throws NotFoundException when not able to fetch all the required data.
*/
public ConnectorFacadeProxy createConnectorBean(final ConnInstance connInstance,
- final Set<ConnConfProperty> configuration) throws NotFoundException {
+ final Set<ConnConfProperty> configuration)
+ throws NotFoundException {
final ConnInstance connInstanceClone = (ConnInstance) SerializationUtils.clone(connInstance);
@@ -129,7 +113,8 @@ public class ConnInstanceLoader {
return new ConnectorFacadeProxy(connInstanceClone, connBundleManager);
}
- public void registerConnector(final ExternalResource resource) throws NotFoundException {
+ public void registerConnector(final ExternalResource resource)
+ throws NotFoundException {
final ConnectorFacadeProxy connector = createConnectorBean(resource);
LOG.debug("Connector to be registered: {}", connector);
@@ -160,8 +145,8 @@ public class ConnInstanceLoader {
LOG.info("Registering resource-connector pair {}-{}", resource, resource.getConnector());
registerConnector(resource);
} catch (Exception e) {
- LOG.error("While registering resource-connector pair {}-{}", new Object[] { resource,
- resource.getConnector(), e });
+ LOG.error("While registering resource-connector pair {}-{}", new Object[]{resource,
+ resource.getConnector(), e});
}
}
Modified: incubator/syncope/trunk/core/src/main/java/org/apache/syncope/core/rest/controller/ConnInstanceController.java
URL: http://svn.apache.org/viewvc/incubator/syncope/trunk/core/src/main/java/org/apache/syncope/core/rest/controller/ConnInstanceController.java?rev=1362443&r1=1362442&r2=1362443&view=diff
==============================================================================
--- incubator/syncope/trunk/core/src/main/java/org/apache/syncope/core/rest/controller/ConnInstanceController.java (original)
+++ incubator/syncope/trunk/core/src/main/java/org/apache/syncope/core/rest/controller/ConnInstanceController.java Tue Jul 17 10:57:46 2012
@@ -27,22 +27,6 @@ import java.util.Set;
import javassist.NotFoundException;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.lang.StringUtils;
-import org.identityconnectors.common.l10n.CurrentLocale;
-import org.identityconnectors.framework.api.ConfigurationProperties;
-import org.identityconnectors.framework.api.ConnectorInfo;
-import org.identityconnectors.framework.api.ConnectorInfoManager;
-import org.identityconnectors.framework.api.ConnectorKey;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.HttpStatus;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.stereotype.Controller;
-import org.springframework.transaction.annotation.Transactional;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestMethod;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.servlet.ModelAndView;
import org.apache.syncope.client.to.ConnBundleTO;
import org.apache.syncope.client.to.ConnInstanceTO;
import org.apache.syncope.client.validation.SyncopeClientCompositeErrorException;
@@ -63,7 +47,23 @@ import org.apache.syncope.types.AuditEle
import org.apache.syncope.types.ConnConfPropSchema;
import org.apache.syncope.types.ConnConfProperty;
import org.apache.syncope.types.SyncopeClientExceptionType;
+import org.identityconnectors.common.l10n.CurrentLocale;
+import org.identityconnectors.framework.api.ConfigurationProperties;
+import org.identityconnectors.framework.api.ConnectorInfo;
+import org.identityconnectors.framework.api.ConnectorInfoManager;
+import org.identityconnectors.framework.api.ConnectorKey;
import org.identityconnectors.framework.impl.api.ConfigurationPropertyImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.stereotype.Controller;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.servlet.ModelAndView;
@Controller
@RequestMapping("/connector")
Modified: incubator/syncope/trunk/core/src/main/java/org/apache/syncope/core/rest/controller/ResourceController.java
URL: http://svn.apache.org/viewvc/incubator/syncope/trunk/core/src/main/java/org/apache/syncope/core/rest/controller/ResourceController.java?rev=1362443&r1=1362442&r2=1362443&view=diff
==============================================================================
--- incubator/syncope/trunk/core/src/main/java/org/apache/syncope/core/rest/controller/ResourceController.java (original)
+++ incubator/syncope/trunk/core/src/main/java/org/apache/syncope/core/rest/controller/ResourceController.java Tue Jul 17 10:57:46 2012
@@ -51,11 +51,15 @@ import org.apache.syncope.core.persisten
import org.apache.syncope.core.persistence.dao.ResourceDAO;
import org.apache.syncope.core.persistence.dao.RoleDAO;
import org.apache.syncope.core.propagation.ConnectorFacadeProxy;
+import org.apache.syncope.core.rest.data.ConnInstanceDataBinder;
import org.apache.syncope.core.rest.data.ResourceDataBinder;
+import org.apache.syncope.core.util.ConnBundleManager;
import org.apache.syncope.core.util.ConnObjectUtil;
+import org.apache.syncope.types.AuditElements;
import org.apache.syncope.types.AuditElements.Category;
import org.apache.syncope.types.AuditElements.ResourceSubCategory;
import org.apache.syncope.types.AuditElements.Result;
+import org.springframework.web.servlet.ModelAndView;
@Controller
@RequestMapping("/resource")
@@ -76,6 +80,9 @@ public class ResourceController extends
@Autowired
private ResourceDataBinder binder;
+ @Autowired
+ private ConnInstanceDataBinder connInstancebinder;
+
/**
* ConnectorObject util.
*/
@@ -85,6 +92,9 @@ public class ResourceController extends
@Autowired
private ConnInstanceLoader connLoader;
+ @Autowired
+ private ConnBundleManager bundleManager;
+
@PreAuthorize("hasRole('RESOURCE_CREATE')")
@RequestMapping(method = RequestMethod.POST, value = "/create")
public ResourceTO create(final HttpServletResponse response, @RequestBody final ResourceTO resourceTO)
@@ -131,14 +141,14 @@ public class ResourceController extends
if (resource == null) {
throw new NotFoundException("Resource '" + resourceName + "'");
}
-
+
ResourceTO resourceToDelete = binder.getResourceTO(resource);
auditManager.audit(Category.resource, ResourceSubCategory.delete, Result.success,
"Successfully deleted resource: " + resource.getName());
resourceDAO.delete(resourceName);
-
+
return resourceToDelete;
}
@@ -241,4 +251,33 @@ public class ResourceController extends
return connObjectUtil.getConnObjectTO(connectorObject);
}
+
+ @PreAuthorize("hasRole('CONNECTOR_READ')")
+ @RequestMapping(method = RequestMethod.POST, value = "/check")
+ @Transactional(readOnly = true)
+ public ModelAndView check(final HttpServletResponse response, @RequestBody final ResourceTO resourceTO)
+ throws SyncopeClientCompositeErrorException, NotFoundException {
+
+ final ConnInstance connInstance = binder.getConnInstance(resourceTO);
+
+ final ConnectorFacadeProxy connector =
+ new ConnectorFacadeProxy(connInstance, bundleManager);
+
+ boolean result;
+ try {
+ connector.test();
+ result = true;
+
+ auditManager.audit(Category.connector, AuditElements.ConnectorSubCategory.check, Result.success,
+ "Successfully checked connector: " + resourceTO);
+ } catch (Exception ex) {
+ auditManager.audit(Category.connector, AuditElements.ConnectorSubCategory.check, Result.failure,
+ "Unsuccessful check for connector: " + resourceTO, ex);
+
+ LOG.error("Test connection failure {}", ex);
+ result = false;
+ }
+
+ return new ModelAndView().addObject(result);
+ }
}
Modified: incubator/syncope/trunk/core/src/main/java/org/apache/syncope/core/rest/data/ResourceDataBinder.java
URL: http://svn.apache.org/viewvc/incubator/syncope/trunk/core/src/main/java/org/apache/syncope/core/rest/data/ResourceDataBinder.java?rev=1362443&r1=1362442&r2=1362443&view=diff
==============================================================================
--- incubator/syncope/trunk/core/src/main/java/org/apache/syncope/core/rest/data/ResourceDataBinder.java (original)
+++ incubator/syncope/trunk/core/src/main/java/org/apache/syncope/core/rest/data/ResourceDataBinder.java Tue Jul 17 10:57:46 2012
@@ -20,9 +20,12 @@ package org.apache.syncope.core.rest.dat
import java.util.ArrayList;
import java.util.Collection;
+import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
+import java.util.Map;
import java.util.Set;
+import javassist.NotFoundException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
@@ -54,10 +57,10 @@ public class ResourceDataBinder {
*/
private static final Logger LOG = LoggerFactory.getLogger(ResourceDataBinder.class);
- private static final String[] MAPPING_IGNORE_PROPERTIES = { "id", "resource", "syncToken" };
+ private static final String[] MAPPING_IGNORE_PROPERTIES = {"id", "resource", "syncToken"};
@Autowired
- private ConnInstanceDAO connectorInstanceDAO;
+ private ConnInstanceDAO connInstanceDAO;
@Autowired
private JexlUtil jexlUtil;
@@ -65,7 +68,11 @@ public class ResourceDataBinder {
@Autowired
private PolicyDAO policyDAO;
- public ExternalResource create(final ResourceTO resourceTO) throws SyncopeClientCompositeErrorException {
+ @Autowired
+ private ConnInstanceDataBinder connInstancebinder;
+
+ public ExternalResource create(final ResourceTO resourceTO)
+ throws SyncopeClientCompositeErrorException {
return update(new ExternalResource(), resourceTO);
}
@@ -80,7 +87,7 @@ public class ResourceDataBinder {
resource.setName(resourceTO.getName());
if (resourceTO.getConnectorId() != null) {
- ConnInstance connector = connectorInstanceDAO.find(resourceTO.getConnectorId());
+ ConnInstance connector = connInstanceDAO.find(resourceTO.getConnectorId());
resource.setConnector(connector);
if (!connector.getResources().contains(resource)) {
@@ -312,4 +319,59 @@ public class ResourceDataBinder {
return schemaMappingTO;
}
+
+ public ConnInstance getConnInstance(ExternalResource resource)
+ throws NotFoundException {
+
+ final ConnInstance connInstanceClone =
+ (ConnInstance) org.apache.commons.lang.SerializationUtils.clone(resource.getConnector());
+
+ return getConnInstance(connInstanceClone, resource.getConfiguration());
+ }
+
+ public ConnInstance getConnInstance(final ResourceTO resourceTO)
+ throws NotFoundException {
+ ConnInstance connInstance = connInstanceDAO.find(resourceTO.getConnectorId());
+
+ final ConnInstance connInstanceClone =
+ (ConnInstance) org.apache.commons.lang.SerializationUtils.clone(connInstance);
+
+ if (connInstance == null) {
+ throw new NotFoundException("Connector '" + resourceTO.getConnectorId() + "'");
+ }
+
+ return getConnInstance(connInstanceClone, resourceTO.getConnConfProperties());
+ }
+
+ private ConnInstance getConnInstance(
+ final ConnInstance connInstance, final Set<ConnConfProperty> overridden)
+ throws NotFoundException {
+
+ final Set<ConnConfProperty> configuration = new HashSet<ConnConfProperty>();
+ final Map<String, ConnConfProperty> overridable = new HashMap<String, ConnConfProperty>();
+
+ // add not overridable properties
+ for (ConnConfProperty prop : connInstance.getConfiguration()) {
+ if (prop.isOverridable()) {
+ overridable.put(prop.getSchema().getName(), prop);
+ } else {
+ configuration.add(prop);
+ }
+ }
+
+ // add overridden properties
+ for (ConnConfProperty prop : overridden) {
+ if (overridable.containsKey(prop.getSchema().getName()) && !prop.getValues().isEmpty()) {
+ configuration.add(prop);
+ overridable.remove(prop.getSchema().getName());
+ }
+ }
+
+ // add overridable properties not overridden
+ configuration.addAll(overridable.values());
+
+ connInstance.setConfiguration(configuration);
+
+ return connInstance;
+ }
}
Modified: incubator/syncope/trunk/core/src/test/java/org/apache/syncope/core/init/ConnInstanceLoaderTest.java
URL: http://svn.apache.org/viewvc/incubator/syncope/trunk/core/src/test/java/org/apache/syncope/core/init/ConnInstanceLoaderTest.java?rev=1362443&r1=1362442&r2=1362443&view=diff
==============================================================================
--- incubator/syncope/trunk/core/src/test/java/org/apache/syncope/core/init/ConnInstanceLoaderTest.java (original)
+++ incubator/syncope/trunk/core/src/test/java/org/apache/syncope/core/init/ConnInstanceLoaderTest.java Tue Jul 17 10:57:46 2012
@@ -28,6 +28,7 @@ import org.springframework.transaction.a
import org.apache.syncope.core.AbstractTest;
import org.apache.syncope.core.persistence.dao.ResourceDAO;
import org.apache.syncope.core.propagation.ConnectorFacadeProxy;
+import org.apache.syncope.core.rest.data.ResourceDataBinder;
import org.apache.syncope.core.util.ApplicationContextProvider;
import org.apache.syncope.core.util.ConnBundleManager;
@@ -42,11 +43,15 @@ public class ConnInstanceLoaderTest exte
@Autowired
private ConnBundleManager connBundleManager;
+ @Autowired
+ private ResourceDataBinder resourceDataBinder;
+
@Before
public void before() {
cil = new ConnInstanceLoader();
ReflectionTestUtils.setField(cil, "resourceDAO", resourceDAO);
ReflectionTestUtils.setField(cil, "connBundleManager", connBundleManager);
+ ReflectionTestUtils.setField(cil, "resourceDataBinder", resourceDataBinder);
// Remove any other connector instance bean set up by
// standard ConnInstanceLoader.load()
Modified: incubator/syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/ConnInstanceTestITCase.java
URL: http://svn.apache.org/viewvc/incubator/syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/ConnInstanceTestITCase.java?rev=1362443&r1=1362442&r2=1362443&view=diff
==============================================================================
--- incubator/syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/ConnInstanceTestITCase.java (original)
+++ incubator/syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/ConnInstanceTestITCase.java Tue Jul 17 10:57:46 2012
@@ -39,10 +39,12 @@ import org.springframework.web.client.Ht
import org.apache.syncope.client.to.ConnBundleTO;
import org.apache.syncope.client.to.ConnInstanceTO;
import org.apache.syncope.client.to.ResourceTO;
+import org.apache.syncope.client.to.SchemaMappingTO;
import org.apache.syncope.client.validation.SyncopeClientCompositeErrorException;
import org.apache.syncope.types.ConnConfPropSchema;
import org.apache.syncope.types.ConnConfProperty;
import org.apache.syncope.types.ConnectorCapability;
+import org.apache.syncope.types.IntMappingType;
public class ConnInstanceTestITCase extends AbstractTest {
@@ -535,4 +537,88 @@ public class ConnInstanceTestITCase exte
assertNotNull(schemaNames);
assertFalse(schemaNames.isEmpty());
}
+
+ @Test
+ public void issueSYNCOPE112() {
+
+ // ----------------------------------------
+ // Create a new connector
+ // ----------------------------------------
+ ConnInstanceTO connectorTO = new ConnInstanceTO();
+
+ // set connector version
+ connectorTO.setVersion(connidSoapVersion);
+
+ // set connector name
+ connectorTO.setConnectorName(WebServiceConnector.class.getName());
+
+ // set bundle name
+ connectorTO.setBundleName("org.connid.bundles.soap");
+
+ // set display name
+ connectorTO.setDisplayName("WSSoap");
+
+ // set the connector configuration using PropertyTO
+ Set<ConnConfProperty> conf = new HashSet<ConnConfProperty>();
+
+ ConnConfPropSchema userSchema = new ConnConfPropSchema();
+ userSchema.setName("endpoint");
+ userSchema.setType(String.class.getName());
+ userSchema.setRequired(true);
+ ConnConfProperty endpoint = new ConnConfProperty();
+ endpoint.setSchema(userSchema);
+ endpoint.setValues(Collections.singletonList("http://localhost:9080/does_not_work"));
+ endpoint.setOverridable(true);
+
+ ConnConfPropSchema keyColumnSchema = new ConnConfPropSchema();
+ keyColumnSchema.setName("servicename");
+ keyColumnSchema.setType(String.class.getName());
+ keyColumnSchema.setRequired(true);
+ ConnConfProperty servicename = new ConnConfProperty();
+ servicename.setSchema(keyColumnSchema);
+ servicename.setValues(
+ Collections.singletonList("org.connid.bundles.soap.provisioning.interfaces.Provisioning"));
+ servicename.setOverridable(false);
+
+ conf.add(endpoint);
+ conf.add(servicename);
+
+ // set connector configuration
+ connectorTO.setConfiguration(conf);
+
+ assertFalse(restTemplate.postForObject(BASE_URL + "connector/check.json", connectorTO, Boolean.class));
+
+ connectorTO = restTemplate.postForObject(BASE_URL + "connector/create.json", connectorTO, ConnInstanceTO.class);
+ assertNotNull(connectorTO);
+ // ----------------------------------------
+
+ // ----------------------------------------
+ // create a resourceTO
+ // ----------------------------------------
+ String resourceName = "checkForPropOverriding";
+ ResourceTO resourceTO = new ResourceTO();
+
+ resourceTO.setName(resourceName);
+ resourceTO.setConnectorId(connectorTO.getId());
+
+ conf = new HashSet<ConnConfProperty>();
+ endpoint.setValues(Collections.singletonList("http://localhost:9080/wssample/services/provisioning"));
+ conf.add(endpoint);
+
+ resourceTO.setConnectorConfigurationProperties(conf);
+
+ SchemaMappingTO schemaMappingTO = new SchemaMappingTO();
+ schemaMappingTO.setExtAttrName("uid");
+ schemaMappingTO.setIntAttrName("userId");
+ schemaMappingTO.setIntMappingType(IntMappingType.UserSchema);
+ schemaMappingTO.setAccountid(true);
+ resourceTO.addMapping(schemaMappingTO);
+ // ----------------------------------------
+
+ // ----------------------------------------
+ // Check connection without saving the resource ....
+ // ----------------------------------------
+ assertTrue(restTemplate.postForObject(BASE_URL + "resource/check.json", resourceTO, Boolean.class));
+ // ----------------------------------------
+ }
}