[exo-jcr-commits] exo-jcr SVN: r4983 - in core/trunk: exo.core.component.organization.ldap and 4 other directories.

do-not-reply at jboss.org do-not-reply at jboss.org
Tue Sep 27 06:20:02 EDT 2011


Author: dkuleshov
Date: 2011-09-27 06:20:01 -0400 (Tue, 27 Sep 2011)
New Revision: 4983

Added:
   core/trunk/exo.core.component.organization.ldap/src/test/java/org/exoplatform/services/organization/DummyLDAPServiceImpl.java
   core/trunk/exo.core.component.organization.ldap/src/test/java/org/exoplatform/services/organization/DummyLdapContext.java
   core/trunk/exo.core.component.organization.ldap/src/test/java/org/exoplatform/services/organization/TestOrganizationServiceWithApacheDS.java
   core/trunk/exo.core.component.organization.ldap/src/test/resources/conf/standalone/
   core/trunk/exo.core.component.organization.ldap/src/test/resources/conf/standalone/test-configuration.xml
Removed:
   core/trunk/exo.core.component.organization.ldap/src/test/resources/conf/portal/
Modified:
   core/trunk/exo.core.component.organization.ldap/pom.xml
   core/trunk/exo.core.component.organization.ldap/src/main/java/org/exoplatform/services/organization/ldap/ADMembershipDAOImpl.java
   core/trunk/exo.core.component.organization.ldap/src/main/java/org/exoplatform/services/organization/ldap/MembershipDAOImpl.java
   core/trunk/pom.xml
Log:
EXOJCR-1381: Ensured running LDAPOrganizationService unit tests. Added several dummy classes to wrap Apache DS implementation of embedded LDAP server to make it usable with org-service unit tests

Modified: core/trunk/exo.core.component.organization.ldap/pom.xml
===================================================================
--- core/trunk/exo.core.component.organization.ldap/pom.xml	2011-09-26 13:25:30 UTC (rev 4982)
+++ core/trunk/exo.core.component.organization.ldap/pom.xml	2011-09-27 10:20:01 UTC (rev 4983)
@@ -1,4 +1,4 @@
-<!--
+  <!--
 
     Copyright (C) 2009 eXo Platform SAS.
 
@@ -33,7 +33,7 @@
    <name>eXo Core :: Component :: Organization Service LDAP</name>
    <description>eXo Organization Service LDAP</description>
 
-   <dependencies>
+   <dependencies>     
       <dependency>
          <groupId>org.exoplatform.kernel</groupId>
          <artifactId>exo.kernel.component.cache</artifactId>
@@ -66,7 +66,19 @@
       <dependency>
          <groupId>org.exoplatform.core</groupId>
          <artifactId>exo.core.component.organization.jdbc</artifactId>
+      </dependency>   
+      <dependency>
+         <groupId>org.apache.directory.server</groupId>
+         <artifactId>apacheds-server-unit</artifactId>
       </dependency>
+      <dependency>
+         <groupId>org.javassist</groupId>
+         <artifactId>javassist</artifactId>
+      </dependency>
+      <dependency>
+         <artifactId>hsqldb</artifactId>
+         <groupId>org.hsqldb</groupId>
+      </dependency>
    </dependencies>
    
    <build>
@@ -121,4 +133,4 @@
          </plugin>
      </plugins>      
    </build>
-</project>
\ No newline at end of file
+</project>

Modified: core/trunk/exo.core.component.organization.ldap/src/main/java/org/exoplatform/services/organization/ldap/ADMembershipDAOImpl.java
===================================================================
--- core/trunk/exo.core.component.organization.ldap/src/main/java/org/exoplatform/services/organization/ldap/ADMembershipDAOImpl.java	2011-09-26 13:25:30 UTC (rev 4982)
+++ core/trunk/exo.core.component.organization.ldap/src/main/java/org/exoplatform/services/organization/ldap/ADMembershipDAOImpl.java	2011-09-27 10:20:01 UTC (rev 4983)
@@ -20,10 +20,10 @@
 
 import org.exoplatform.services.ldap.LDAPService;
 import org.exoplatform.services.organization.CacheHandler;
+import org.exoplatform.services.organization.CacheHandler.CacheType;
 import org.exoplatform.services.organization.Group;
 import org.exoplatform.services.organization.Membership;
 import org.exoplatform.services.organization.OrganizationService;
-import org.exoplatform.services.organization.CacheHandler.CacheType;
 import org.exoplatform.services.organization.impl.MembershipImpl;
 
 import java.util.ArrayList;
@@ -228,11 +228,6 @@
       Group group = getGroupFromMembershipDN(ctx, dn);
       if (type == null)
          type = explodeDN(dn, true)[0];
-      MembershipImpl membership = new MembershipImpl();
-      membership.setId(user + "," + type + "," + group.getId());
-      membership.setUserName(user);
-      membership.setMembershipType(type);
-      membership.setGroupId(group.getId());
-      return membership;
+      return createMembershipObject(user, group.getId(), type);
    }
 }

Modified: core/trunk/exo.core.component.organization.ldap/src/main/java/org/exoplatform/services/organization/ldap/MembershipDAOImpl.java
===================================================================
--- core/trunk/exo.core.component.organization.ldap/src/main/java/org/exoplatform/services/organization/ldap/MembershipDAOImpl.java	2011-09-26 13:25:30 UTC (rev 4982)
+++ core/trunk/exo.core.component.organization.ldap/src/main/java/org/exoplatform/services/organization/ldap/MembershipDAOImpl.java	2011-09-27 10:20:01 UTC (rev 4983)
@@ -222,11 +222,7 @@
             + " because membership type is null");
       }
       
-      MembershipImpl membership = new MembershipImpl();
-      membership.setMembershipType(mt.getName());
-      membership.setUserName(user.getUserName());
-      membership.setGroupId(group.getId());
-      createMembership(membership, broadcast);
+      createMembership(createMembershipObject(user.getUserName(), group.getId(), mt.getName()), broadcast);
    }
 
    /**

Added: core/trunk/exo.core.component.organization.ldap/src/test/java/org/exoplatform/services/organization/DummyLDAPServiceImpl.java
===================================================================
--- core/trunk/exo.core.component.organization.ldap/src/test/java/org/exoplatform/services/organization/DummyLDAPServiceImpl.java	                        (rev 0)
+++ core/trunk/exo.core.component.organization.ldap/src/test/java/org/exoplatform/services/organization/DummyLDAPServiceImpl.java	2011-09-27 10:20:01 UTC (rev 4983)
@@ -0,0 +1,149 @@
+/*
+ * Copyright (C) 2009 eXo Platform SAS.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
+package org.exoplatform.services.organization;
+
+import org.exoplatform.services.ldap.LDAPService;
+import org.exoplatform.services.log.ExoLogger;
+import org.exoplatform.services.log.Log;
+
+import java.util.HashMap;
+import java.util.Hashtable;
+import java.util.Map;
+
+import javax.naming.Context;
+import javax.naming.InitialContext;
+import javax.naming.NamingException;
+import javax.naming.ldap.LdapContext;
+
+/**
+ * @author <a href="mailto:dmi3.kuleshov at gmail.com">Dmitry Kuleshov</a>
+ */
+public class DummyLDAPServiceImpl implements LDAPService
+{
+   private static final Log LOG = ExoLogger.getLogger("exo.core.component.ldap.LDAPServiceImpl");
+
+   private Map<String, String> env = new HashMap<String, String>();
+
+   private int serverType = DEFAULT_SERVER;
+
+   public DummyLDAPServiceImpl()
+   {
+      env.put(Context.PROVIDER_URL, "dc=exoplatform,dc=org");
+      env.put(Context.SECURITY_PRINCIPAL, "uid=admin,ou=system");
+      env.put(Context.SECURITY_CREDENTIALS, "secret");
+      env.put(Context.SECURITY_AUTHENTICATION, "simple");
+      env.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.directory.server.jndi.ServerContextFactory");
+   }
+   @Override
+   public LdapContext getLdapContext() throws NamingException
+   {
+      return new DummyLdapContext(new InitialContext(new Hashtable<String, String>(env)));
+   }
+
+   @Override
+   public LdapContext getLdapContext(boolean renew) throws NamingException
+   {
+      return getLdapContext();
+   }
+
+   @Override
+   public void release(LdapContext ctx) throws NamingException
+   {
+      try
+      {
+         if (ctx != null)
+         {
+            ctx.close();
+         }
+      }
+      catch (NamingException e)
+      {
+         LOG.warn("Exception occurred when tried to close context", e);
+      }
+
+   }
+
+   @Override
+   public InitialContext getInitialContext() throws NamingException
+   {
+      Hashtable<String, String> props = new Hashtable<String, String>(env);
+      props.put(Context.OBJECT_FACTORIES, "com.sun.jndi.ldap.obj.LdapGroupFactory");
+      props.put(Context.STATE_FACTORIES, "com.sun.jndi.ldap.obj.LdapGroupFactory");
+      return new DummyLdapContext(new InitialContext(props));
+   }
+
+   @Override
+   public boolean authenticate(String userDN, String password) throws NamingException
+   {
+      Hashtable<String, String> props = new Hashtable<String, String>(env);
+      props.put(Context.SECURITY_AUTHENTICATION, "simple");
+      props.put(Context.SECURITY_PRINCIPAL, userDN);
+      props.put(Context.SECURITY_CREDENTIALS, password);
+      props.put("com.sun.jndi.ldap.connect.pool", "false");
+
+      InitialContext ctx = null;
+      try
+      {
+         ctx = new DummyLdapContext(new InitialContext(new Hashtable<String, String>(env)));
+         return true;
+      }
+      catch (NamingException e)
+      {
+         LOG.debug("Error during initialization LDAP Context", e);
+         return false;
+      }
+      finally
+      {
+         closeContext(ctx);
+      }
+   }
+
+   @Override
+   public int getServerType()
+   {
+      return 0;
+   }
+
+   private int toServerType(String name)
+   {
+      name = name.trim();
+      if (name == null || name.length() < 1)
+         return DEFAULT_SERVER;
+      if (name.equalsIgnoreCase("ACTIVE.DIRECTORY"))
+         return ACTIVE_DIRECTORY_SERVER;
+      return DEFAULT_SERVER;
+   }
+
+   private void closeContext(Context ctx)
+   {
+      try
+      {
+         if (ctx != null)
+         {
+            ctx.close();
+         }
+      }
+      catch (NamingException e)
+      {
+         LOG.warn("Exception occurred when tried to close context", e);
+      }
+   }
+
+}

Added: core/trunk/exo.core.component.organization.ldap/src/test/java/org/exoplatform/services/organization/DummyLdapContext.java
===================================================================
--- core/trunk/exo.core.component.organization.ldap/src/test/java/org/exoplatform/services/organization/DummyLdapContext.java	                        (rev 0)
+++ core/trunk/exo.core.component.organization.ldap/src/test/java/org/exoplatform/services/organization/DummyLdapContext.java	2011-09-27 10:20:01 UTC (rev 4983)
@@ -0,0 +1,489 @@
+/*
+ * Copyright (C) 2009 eXo Platform SAS.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
+package org.exoplatform.services.organization;
+
+import org.apache.directory.shared.ldap.message.ArrayNamingEnumeration;
+
+import java.util.ArrayList;
+import java.util.Hashtable;
+import java.util.List;
+
+import javax.naming.Binding;
+import javax.naming.Context;
+import javax.naming.InitialContext;
+import javax.naming.Name;
+import javax.naming.NameClassPair;
+import javax.naming.NameParser;
+import javax.naming.NamingEnumeration;
+import javax.naming.NamingException;
+import javax.naming.directory.Attribute;
+import javax.naming.directory.Attributes;
+import javax.naming.directory.BasicAttribute;
+import javax.naming.directory.DirContext;
+import javax.naming.directory.InitialDirContext;
+import javax.naming.directory.ModificationItem;
+import javax.naming.directory.SearchControls;
+import javax.naming.directory.SearchResult;
+import javax.naming.ldap.Control;
+import javax.naming.ldap.ExtendedRequest;
+import javax.naming.ldap.ExtendedResponse;
+import javax.naming.ldap.LdapContext;
+
+/**
+ * @author <a href="mailto:dmi3.kuleshov at gmail.com">Dmitry Kuleshov</a>
+ */
+public class DummyLdapContext extends InitialDirContext implements LdapContext
+{
+   InitialContext initialContext;
+
+   DirContext appRoot;
+
+   public DummyLdapContext(InitialContext initialContext) throws NamingException
+   {
+      this.initialContext = initialContext;
+      appRoot = (DirContext)initialContext.lookup("");
+   }
+
+   @Override
+   public Attributes getAttributes(Name name) throws NamingException
+   {
+      return appRoot.getAttributes(name);
+   }
+
+   @Override
+   public Attributes getAttributes(String name) throws NamingException
+   {
+      return appRoot.getAttributes(removeExoplatformOrg(name));
+   }
+
+   @Override
+   public Attributes getAttributes(Name name, String[] attrIds) throws NamingException
+   {
+      return appRoot.getAttributes(name, attrIds);
+   }
+
+   @Override
+   public Attributes getAttributes(String name, String[] attrIds) throws NamingException
+   {
+      return appRoot.getAttributes(name, attrIds);
+   }
+
+   @Override
+   public void modifyAttributes(Name name, int mod_op, Attributes attrs) throws NamingException
+   {
+      appRoot.modifyAttributes(name, mod_op, attrs);
+   }
+
+   @Override
+   public void modifyAttributes(String name, int mod_op, Attributes attrs) throws NamingException
+   {
+      appRoot.modifyAttributes(name, mod_op, attrs);
+   }
+
+   @Override
+   public void modifyAttributes(Name name, ModificationItem[] mods) throws NamingException
+   {
+      appRoot.modifyAttributes(name, mods);
+   }
+
+   @Override
+   public void modifyAttributes(String name, ModificationItem[] mods) throws NamingException
+   {
+      appRoot.modifyAttributes(removeExoplatformOrg(name), mods);
+   }
+
+   @Override
+   public void bind(Name name, Object obj, Attributes attrs) throws NamingException
+   {
+      appRoot.bind(name, obj, attrs);
+   }
+
+   @Override
+   public void bind(String name, Object obj, Attributes attrs) throws NamingException
+   {
+      appRoot.bind(name, obj, attrs);
+   }
+
+   @Override
+   public void rebind(Name name, Object obj, Attributes attrs) throws NamingException
+   {
+      appRoot.rebind(name, obj, attrs);
+   }
+
+   @Override
+   public void rebind(String name, Object obj, Attributes attrs) throws NamingException
+   {
+      appRoot.rebind(name, obj, attrs);
+   }
+
+   @Override
+   public DirContext createSubcontext(Name name, Attributes attrs) throws NamingException
+   {
+      return appRoot.createSubcontext(name, attrs);
+   }
+
+   @Override
+   public DirContext createSubcontext(String name, Attributes attrs) throws NamingException
+   {
+      Attribute attr = new BasicAttribute("objectclass");
+      attr.add("top");
+      attr.add("organization");
+      attrs.put(attr);
+
+      return appRoot.createSubcontext(removeExoplatformOrg(name), attrs);
+   }
+
+   @Override
+   public DirContext getSchema(Name name) throws NamingException
+   {
+      return appRoot.getSchema(name);
+   }
+
+   @Override
+   public DirContext getSchema(String name) throws NamingException
+   {
+      return appRoot.getSchema(name);
+   }
+
+   @Override
+   public DirContext getSchemaClassDefinition(Name name) throws NamingException
+   {
+      return appRoot.getSchemaClassDefinition(name);
+   }
+
+   @Override
+   public DirContext getSchemaClassDefinition(String name) throws NamingException
+   {
+      return appRoot.getSchemaClassDefinition(name);
+   }
+
+   @Override
+   public NamingEnumeration<SearchResult> search(Name name, Attributes matchingAttributes, String[] attributesToReturn)
+      throws NamingException
+   {
+      return appRoot.search(name, matchingAttributes, attributesToReturn);
+   }
+
+   @Override
+   public NamingEnumeration<SearchResult> search(String name, Attributes matchingAttributes, String[] attributesToReturn)
+      throws NamingException
+   {
+      return appRoot.search(name, matchingAttributes, attributesToReturn);
+   }
+
+   @Override
+   public NamingEnumeration<SearchResult> search(Name name, Attributes matchingAttributes) throws NamingException
+   {
+      return appRoot.search(name, matchingAttributes);
+   }
+
+   @Override
+   public NamingEnumeration<SearchResult> search(String name, Attributes matchingAttributes) throws NamingException
+   {
+      return appRoot.search(name, matchingAttributes);
+   }
+
+   @Override
+   public NamingEnumeration<SearchResult> search(Name name, String filter, SearchControls cons) throws NamingException
+   {
+      return appRoot.search(name, filter, cons);
+   }
+
+   @Override
+   public NamingEnumeration<SearchResult> search(String name, String filter, SearchControls cons)
+      throws NamingException
+   {
+      if (!filter.startsWith("("))
+      {
+         filter = "(" + filter + ")";
+      }
+
+      return swapNameWithNameInNamespace(appRoot.search(removeExoplatformOrg(name), filter, cons));
+   }
+
+   @Override
+   public NamingEnumeration<SearchResult> search(Name name, String filterExpr, Object[] filterArgs, SearchControls cons)
+      throws NamingException
+   {
+      return appRoot.search(name, filterExpr, filterArgs, cons);
+   }
+
+   @Override
+   public NamingEnumeration<SearchResult> search(String name, String filterExpr, Object[] filterArgs,
+      SearchControls cons) throws NamingException
+   {
+      return appRoot.search(name, filterExpr, filterArgs, cons);
+   }
+
+   @Override
+   public Object lookup(Name name) throws NamingException
+   {
+      return initialContext.lookup(name);
+   }
+
+   @Override
+   public Object lookup(String name) throws NamingException
+   {
+      return initialContext.lookup(name);
+   }
+
+   @Override
+   public void bind(Name name, Object obj) throws NamingException
+   {
+      appRoot.bind(name, obj);
+   }
+
+   @Override
+   public void bind(String name, Object obj) throws NamingException
+   {
+      appRoot.bind(name, obj);
+   }
+
+   @Override
+   public void rebind(Name name, Object obj) throws NamingException
+   {
+      appRoot.rebind(name, obj);
+   }
+
+   @Override
+   public void rebind(String name, Object obj) throws NamingException
+   {
+      appRoot.rebind(name, obj);
+   }
+
+   @Override
+   public void unbind(Name name) throws NamingException
+   {
+      appRoot.unbind(name);
+   }
+
+   @Override
+   public void unbind(String name) throws NamingException
+   {
+      appRoot.unbind(name);
+   }
+
+   @Override
+   public void rename(Name oldName, Name newName) throws NamingException
+   {
+      appRoot.rename(oldName, newName);
+   }
+
+   @Override
+   public void rename(String oldName, String newName) throws NamingException
+   {
+      appRoot.rename(oldName, newName);
+   }
+
+   @Override
+   public NamingEnumeration<NameClassPair> list(Name name) throws NamingException
+   {
+      return appRoot.list(name);
+   }
+
+   @Override
+   public NamingEnumeration<NameClassPair> list(String name) throws NamingException
+   {
+      return appRoot.list(name);
+   }
+
+   @Override
+   public NamingEnumeration<Binding> listBindings(Name name) throws NamingException
+   {
+      return appRoot.listBindings(name);
+   }
+
+   @Override
+   public NamingEnumeration<Binding> listBindings(String name) throws NamingException
+   {
+      return appRoot.listBindings(name);
+   }
+
+   @Override
+   public void destroySubcontext(Name name) throws NamingException
+   {
+      appRoot.destroySubcontext(name);
+   }
+
+   @Override
+   public void destroySubcontext(String name) throws NamingException
+   {
+      appRoot.destroySubcontext(removeExoplatformOrg(name));
+   }
+
+   @Override
+   public Context createSubcontext(Name name) throws NamingException
+   {
+      return appRoot.createSubcontext(name);
+   }
+
+   @Override
+   public Context createSubcontext(String name) throws NamingException
+   {
+      return appRoot.createSubcontext(name);
+   }
+
+   @Override
+   public Object lookupLink(Name name) throws NamingException
+   {
+      return initialContext.lookupLink(name);
+   }
+
+   @Override
+   public Object lookupLink(String name) throws NamingException
+   {
+      return initialContext.lookupLink(name);
+   }
+
+   @Override
+   public NameParser getNameParser(Name name) throws NamingException
+   {
+      return initialContext.getNameParser(name);
+   }
+
+   @Override
+   public NameParser getNameParser(String name) throws NamingException
+   {
+      return initialContext.getNameParser(name);
+   }
+
+   @Override
+   public Name composeName(Name name, Name prefix) throws NamingException
+   {
+
+      return appRoot.composeName(name, prefix);
+   }
+
+   @Override
+   public String composeName(String name, String prefix) throws NamingException
+   {
+      return appRoot.composeName(name, prefix);
+   }
+
+   @Override
+   public Object addToEnvironment(String propName, Object propVal) throws NamingException
+   {
+      return appRoot.addToEnvironment(propName, propVal);
+   }
+
+   @Override
+   public Object removeFromEnvironment(String propName) throws NamingException
+   {
+      return appRoot.removeFromEnvironment(propName);
+   }
+
+   @Override
+   public Hashtable<?, ?> getEnvironment() throws NamingException
+   {
+      return appRoot.getEnvironment();
+   }
+
+   @Override
+   public void close() throws NamingException
+   {
+      initialContext.close();
+   }
+
+   @Override
+   public String getNameInNamespace() throws NamingException
+   {
+      return appRoot.getNameInNamespace();
+   }
+
+   @Override
+   public ExtendedResponse extendedOperation(ExtendedRequest request) throws NamingException
+   {
+      return null;
+   }
+
+   @Override
+   public LdapContext newInstance(Control[] requestControls) throws NamingException
+   {
+      return null;
+   }
+
+   @Override
+   public void reconnect(Control[] connCtls) throws NamingException
+   {
+   }
+
+   @Override
+   public Control[] getConnectControls() throws NamingException
+   {
+      return null;
+   }
+
+   @Override
+   public void setRequestControls(Control[] requestControls) throws NamingException
+   {
+   }
+
+   @Override
+   public Control[] getRequestControls() throws NamingException
+   {
+      return null;
+   }
+
+   @Override
+   public Control[] getResponseControls() throws NamingException
+   {
+      return null;
+   }
+
+   private String removeExoplatformOrg(String name)
+   {
+      int i = name.toLowerCase().indexOf("dc=exoplatform,dc=org");
+      if (i > -1)
+      {
+         return name.substring(0, i);
+      }
+      return name;
+   }
+
+   private String removeGroupProtal(String name)
+   {
+      name = removeExoplatformOrg(name);
+      int i = name.toLowerCase().indexOf("ou=groups,ou=portal");
+      if (i > -1)
+      {
+         return name.substring(0, i);
+      }
+      return name;
+   }
+
+   @SuppressWarnings("unchecked")
+   private NamingEnumeration<SearchResult> swapNameWithNameInNamespace(NamingEnumeration<SearchResult> nesr) throws NamingException
+   {
+      List<SearchResult> resultList = new ArrayList<SearchResult>();
+      SearchResult sr;
+
+      while (nesr.hasMore())
+      {
+         sr = nesr.next();
+         sr.setNameInNamespace(sr.getName());
+         sr.setName(removeGroupProtal(sr.getName()));
+
+         resultList.add(sr);
+      }
+
+      return new ArrayNamingEnumeration(resultList.toArray());
+   }
+
+}

Added: core/trunk/exo.core.component.organization.ldap/src/test/java/org/exoplatform/services/organization/TestOrganizationServiceWithApacheDS.java
===================================================================
--- core/trunk/exo.core.component.organization.ldap/src/test/java/org/exoplatform/services/organization/TestOrganizationServiceWithApacheDS.java	                        (rev 0)
+++ core/trunk/exo.core.component.organization.ldap/src/test/java/org/exoplatform/services/organization/TestOrganizationServiceWithApacheDS.java	2011-09-27 10:20:01 UTC (rev 4983)
@@ -0,0 +1,482 @@
+/*
+ * Copyright (C) 2009 eXo Platform SAS.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.exoplatform.services.organization;
+
+import org.apache.directory.server.core.configuration.MutablePartitionConfiguration;
+import org.apache.directory.server.unit.AbstractServerTest;
+import org.exoplatform.commons.utils.PageList;
+import org.exoplatform.container.StandaloneContainer;
+
+import java.io.File;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import javax.naming.directory.Attribute;
+import javax.naming.directory.Attributes;
+import javax.naming.directory.BasicAttribute;
+import javax.naming.directory.BasicAttributes;
+
+/**
+ * Created by The eXo Platform SAS Author : Hoa Pham
+ * hoapham at exoplatform.com,phamvuxuanhoa at yahoo.com Oct 27, 2005
+ */
+
+ at SuppressWarnings("unchecked")
+public class TestOrganizationServiceWithApacheDS extends AbstractServerTest
+{
+
+   static String GroupParent = "GroupParent";
+
+   static String Group1 = "Group1";
+
+   static String Group2 = "Group2";
+
+   static String Benj = "Benj";
+
+   static String Tuan = "Tuan";
+
+   static String TestMembershipType1 = "TestMembership1";
+
+   static String TestMembershipType2 = "TestMembership2";
+
+   static String TestMembershipType3 = "TestMembership3";
+
+   OrganizationService service_;
+
+   UserHandler userHandler_;
+
+   UserProfileHandler profileHandler_;
+
+   GroupHandler groupHandler_;
+
+   MembershipTypeHandler mtHandler_;
+
+   MembershipHandler membershipHandler_;
+
+   boolean runtest = true;
+
+   public void setUp() throws Exception
+   {
+      if (!runtest)
+      {
+         return;
+      }
+
+      MutablePartitionConfiguration pcfg = new MutablePartitionConfiguration();
+
+      pcfg.setName("eXoTestPartition");
+      pcfg.setSuffix("dc=exoplatform,dc=org");
+
+      Set<String> indexedAttrs = new HashSet<String>();
+      indexedAttrs.add("objectClass");
+      indexedAttrs.add("o");
+      pcfg.setIndexedAttributes(indexedAttrs);
+
+      Attributes attrs = new BasicAttributes(true);
+      Attribute attr = new BasicAttribute("objectClass");
+      attr.add("top");
+      attr.add("organization");
+      attrs.put(attr);
+      attr = new BasicAttribute("o");
+      attr.add("eXoTestPartition");
+      attrs.put(attr);
+      pcfg.setContextEntry(attrs);
+      Set<MutablePartitionConfiguration> pcfgs = new HashSet<MutablePartitionConfiguration>();
+      pcfgs.add(pcfg);
+      configuration.setContextPartitionConfigurations(pcfgs);
+      File workingDirectory = new File("server-work");
+      configuration.setWorkingDirectory(workingDirectory);
+      super.setUp();
+
+      String containerConf =
+         TestOrganizationServiceWithApacheDS.class.getResource("/conf/standalone/test-configuration.xml").toString();
+      StandaloneContainer.addConfigurationURL(containerConf);
+      StandaloneContainer container = StandaloneContainer.getInstance();
+
+      service_ = (OrganizationService)container.getComponentInstanceOfType(OrganizationService.class);
+      userHandler_ = service_.getUserHandler();
+      profileHandler_ = service_.getUserProfileHandler();
+      groupHandler_ = service_.getGroupHandler();
+      mtHandler_ = service_.getMembershipTypeHandler();
+      membershipHandler_ = service_.getMembershipHandler();
+   }
+
+   public void tearDown() throws Exception
+   {
+      if (!runtest)
+      {
+         return;
+      }
+      mtHandler_.removeMembershipType(TestMembershipType1, true);
+      mtHandler_.removeMembershipType(TestMembershipType2, true);
+      mtHandler_.removeMembershipType(TestMembershipType3, true);
+
+      Group gr = groupHandler_.findGroupById("/" + Group1);
+      if (gr != null)
+      {
+         groupHandler_.removeGroup(gr, true);
+      }
+
+      gr = groupHandler_.findGroupById("/" + Group2);
+      if (gr != null)
+      {
+         groupHandler_.removeGroup(gr, true);
+      }
+
+      gr = groupHandler_.findGroupById("/" + GroupParent);
+      if (gr != null)
+      {
+         groupHandler_.removeGroup(gr, true);
+      }
+
+      userHandler_.removeUser(Benj, true);
+      userHandler_.removeUser(Tuan, true);
+   }
+
+   protected String getDescription()
+   {
+      if (!runtest)
+      {
+         return "";
+      }
+
+      return "Test hibernate organization service.";
+   }
+
+   public void testUserPageSize() throws Exception
+   {
+      if (!runtest)
+      {
+         return;
+      }
+
+      /* Create an user with UserName: test */
+      String USER = "test";
+      int s = 15;
+
+      for (int i = 0; i < s; i++)
+      {
+         createUser(USER + "_" + String.valueOf(i));
+      }
+
+      Query query = new Query();
+      PageList users = userHandler_.findUsers(query);
+      System.out.println("size: " + users.getAvailablePage());
+
+      System.out.println("\npage 1:");
+      List list = users.getPage(1);
+      System.out.println("size : " + list.size());
+      for (Object ele : list)
+      {
+         User u = (User)ele;
+         System.out.println(u.getUserName() + " and " + u.getEmail());
+      }
+      System.out.println("\n\n");
+      //
+      try
+      {
+         for (int i = 0; i < s; i++)
+            userHandler_.removeUser(USER + "_" + String.valueOf(i), true);
+      }
+      catch (Exception exp)
+      {
+         exp.printStackTrace();
+      }
+   }
+
+   public void testUser() throws Exception
+   {
+      /* Create an user with UserName: test */
+      String USER = "test";
+      User user = createUser(USER);
+
+      // authentication
+      user.setPassword("test");
+      userHandler_.saveUser(user, true);
+      assertTrue("Authentication failed ", userHandler_.authenticate(USER, "test"));
+
+      User u = userHandler_.findUserByName(USER);
+      assertTrue("Found user instance", u != null);
+      assertEquals("Expect user name is: ", USER, u.getUserName());
+
+      UserProfile up = profileHandler_.createUserProfileInstance(USER);
+      profileHandler_.saveUserProfile(up, true);
+
+      up = profileHandler_.findUserProfileByName(USER);
+      assertTrue("Expect user profile is found: ", profileHandler_.findUserProfileByName(USER) != null);
+
+      // Update user's information
+      u.setFirstName("Exo(Update)");
+      userHandler_.saveUser(u, false);
+      up.getUserInfoMap().put("user.gender", "male");
+      profileHandler_.saveUserProfile(up, true);
+      up = profileHandler_.findUserProfileByName(USER);
+      assertEquals("expect first name is", "Exo(Update)", u.getFirstName());
+      assertEquals("Expect profile is updated: user.gender is ", "male", up.getUserInfoMap().get("user.gender"));
+
+      // Remove a user: Expect result: user and it's profile will be removed
+      // NOTE >>>> FIX without listeners remove profile manually
+      userHandler_.removeUser(USER, true);
+      profileHandler_.removeUserProfile(USER, true);
+      assertEquals(null, userHandler_.findUserByName(USER));
+      assertTrue(profileHandler_.findUserProfileByName(USER) == null);
+   }
+
+   public void testGroup() throws Exception
+   {
+      if (!runtest)
+      {
+         return;
+      }
+
+      Group groupParent = groupHandler_.createGroupInstance();
+      groupParent.setGroupName(GroupParent);
+      groupParent.setDescription("This is description");
+      groupHandler_.addChild(null, groupParent, true);
+      assertTrue(((Group)groupParent).getId() != null);
+
+      groupParent = groupHandler_.findGroupById(groupParent.getId());
+      assertEquals(groupParent.getGroupName(), "GroupParent");
+
+      /* Create a child group with name: Group1 */
+      Group groupChild = groupHandler_.createGroupInstance();
+      groupChild.setGroupName(Group1);
+      groupHandler_.addChild(groupParent, groupChild, true);
+      groupChild = groupHandler_.findGroupById(groupChild.getId());
+      assertEquals(groupChild.getParentId(), groupParent.getId());
+      assertEquals("Expect group child's name is: ", Group1, groupChild.getGroupName());
+
+      /* Update groupChild's information */
+      groupChild.setLabel("GroupRenamed");
+      groupChild.setDescription("new description ");
+      groupHandler_.saveGroup(groupChild, true);
+      assertEquals(groupHandler_.findGroupById(groupChild.getId()).getLabel(), "GroupRenamed");
+
+      /* Create a group child with name is: Group2 */
+      groupChild = groupHandler_.createGroupInstance();
+      groupChild.setGroupName(Group2);
+      groupHandler_.addChild(groupParent, groupChild, true);
+      groupChild = groupHandler_.findGroupById(groupChild.getId());
+      assertEquals(groupChild.getParentId(), groupParent.getId());
+      assertEquals("Expect group child's name is: ", Group2, groupChild.getGroupName());
+
+      Collection groups = groupHandler_.findGroups(groupParent);
+      assertEquals("Expect number of child group in parent group is: ", 2, groups.size());
+      Object arraygroups[] = groups.toArray();
+      assertEquals("Expect child group's name is: ", Group1, ((Group)arraygroups[0]).getGroupName());
+      assertEquals("Expect child group's name is: ", Group2, ((Group)arraygroups[1]).getGroupName());
+
+      groupHandler_.removeGroup(groupHandler_.findGroupById("/" + GroupParent + "/" + Group1), true);
+      assertEquals("Expect child group has been removed: ", null, groupHandler_.findGroupById("/" + Group1));
+      assertEquals("Expect only 1 child group in parent group", 1, groupHandler_.findGroups(groupParent).size());
+
+      groupHandler_.removeGroup(groupParent, true);
+      assertEquals("Expect ParentGroup is removed:", null, groupHandler_.findGroupById(groupParent.getId()));
+      assertEquals("Expect all child group is removed: ", 0, groupHandler_.findGroups(groupParent).size());
+   }
+
+   public void testMembershipType() throws Exception
+   {
+      if (!runtest)
+      {
+         return;
+      }
+
+      int bmn = mtHandler_.findMembershipTypes().size();
+
+      MembershipType mt = mtHandler_.createMembershipTypeInstance();
+      mt.setName(TestMembershipType1);
+      mt.setDescription("This is a test");
+      mt.setOwner("exo");
+      mtHandler_.createMembershipType(mt, true);
+      assertEquals("Expect mebershiptype is:", TestMembershipType1, mtHandler_.findMembershipType(TestMembershipType1)
+         .getName());
+
+      String desc = "This is a test (update)";
+      mt.setDescription(desc);
+      mtHandler_.saveMembershipType(mt, true);
+      assertEquals("Expect membershiptype's description", desc, mtHandler_.findMembershipType(TestMembershipType1)
+         .getDescription());
+
+      mt = mtHandler_.createMembershipTypeInstance();
+      mt.setName(TestMembershipType2);
+      mt.setOwner("exo");
+      mtHandler_.createMembershipType(mt, true);
+
+      Collection ms = mtHandler_.findMembershipTypes();
+      assertEquals("Expect " + (bmn + 2) + " membership in collection: ", bmn + 2, ms.size());
+
+      mtHandler_.removeMembershipType(TestMembershipType1, true);
+      assertEquals("Membership type has been removed:", null, mtHandler_.findMembershipType(TestMembershipType1));
+      assertEquals("Expect " + (bmn + 1) + " membership in collection(1 is default): ", bmn + 1, mtHandler_
+         .findMembershipTypes().size());
+
+      mtHandler_.removeMembershipType(TestMembershipType2, true);
+      assertEquals("Membership type has been removed:", null, mtHandler_.findMembershipType(TestMembershipType2));
+      assertEquals("Expect  " + bmn + "  membership in collection(default type): ", bmn, mtHandler_
+         .findMembershipTypes().size());
+
+   }
+
+   public void testMembership() throws Exception
+   {
+      if (!runtest)
+      {
+         return;
+      }
+
+      User user = createUser(Benj);
+      User user2 = createUser(Tuan);
+
+      Group group1 = groupHandler_.createGroupInstance();
+      group1.setGroupName(Group1);
+      groupHandler_.addChild(null, group1, true);
+
+      Group group2 = groupHandler_.createGroupInstance();
+      group2.setGroupName(Group2);
+      groupHandler_.addChild(null, group2, true);
+
+      MembershipType mt1 = mtHandler_.createMembershipTypeInstance();
+      mt1.setName(TestMembershipType1);
+      mtHandler_.createMembershipType(mt1, true);
+
+      membershipHandler_.linkMembership(user, groupHandler_.findGroupById("/" + Group1), mt1, true);
+      membershipHandler_.linkMembership(user, groupHandler_.findGroupById("/" + Group2), mt1, true);
+      membershipHandler_.linkMembership(user2, groupHandler_.findGroupById("/" + Group2), mt1, true);
+
+      MembershipType mt2 = mtHandler_.createMembershipTypeInstance();
+      mt2.setName(TestMembershipType2);
+      mtHandler_.createMembershipType(mt2, true);
+      membershipHandler_.linkMembership(user, groupHandler_.findGroupById("/" + Group2), mt2, true);
+
+      MembershipType mt3 = mtHandler_.createMembershipTypeInstance();
+      mt3.setName(TestMembershipType3);
+      mtHandler_.createMembershipType(mt3, true);
+      membershipHandler_.linkMembership(user, groupHandler_.findGroupById("/" + Group2), mt3, true);
+
+      System.out.println(" --------- find memberships by group -------------");
+      Collection<Membership> mems =
+         membershipHandler_.findMembershipsByGroup(groupHandler_.findGroupById("/" + Group2));
+      assertEquals("Expect number of membership in group 2 is: ", 4, mems.size());
+      for (Membership m : mems)
+      {
+         System.out.println(m);
+      }
+
+      System.out.println(" --------- find memberships by user and group--------------");
+      mems = membershipHandler_.findMembershipsByUserAndGroup(Benj, "/" + Group2);
+      assertEquals("Expect number of membership in " + Group2 + " relate with benj is: ", 3, mems.size());
+      for (Membership m : mems)
+      {
+         System.out.println(m);
+      }
+
+      System.out.println(" --------- find memberships by user-------------");
+      mems = membershipHandler_.findMembershipsByUser(Benj);
+      assertEquals("expect membership is: ", 4, mems.size());
+      for (Membership m : mems)
+      {
+         System.out.println(m);
+      }
+
+      System.out.println("---------- find membership by User, Group and Type-----------");
+      Membership membership =
+         membershipHandler_.findMembershipByUserGroupAndType(Benj, "/" + Group2, TestMembershipType1);
+      assertTrue("Expect membership is found:", membership != null);
+      assertEquals("Expect membership type is: ", TestMembershipType1, membership.getMembershipType());
+      assertEquals("Expect groupId of this membership is: ", "/" + Group2, membership.getGroupId());
+      assertEquals("Expect user of this membership is: ", Benj, membership.getUserName());
+
+      System.out.println(" --------- find groups by user -------------");
+      Collection<Group> groups = groupHandler_.findGroupsOfUser(Benj);
+      assertEquals("expect group is: ", 2, groups.size());
+      for (Group g : groups)
+      {
+         System.out.println(g);
+      }
+
+      System.out.println("---------- find group of a user by membership-----------");
+      groups = groupHandler_.findGroupByMembership(Benj, TestMembershipType1);
+      assertEquals("expect group is: ", 2, groups.size());
+      for (Group g : groups)
+      {
+         System.out.println(g);
+      }
+
+      System.out.println("----------------- removed a membership ---------------------");
+      String memId =
+         membershipHandler_.findMembershipByUserGroupAndType(Benj, "/" + Group2, TestMembershipType3).getId();
+      for (Group g : groups)
+      {
+         System.out.println(g);
+      }
+      membershipHandler_.removeMembership(memId, true);
+      assertTrue("Membership was removed: ",
+         membershipHandler_.findMembershipByUserGroupAndType(Benj, "/" + Group2, TestMembershipType3) == null);
+      for (Group g : groups)
+      {
+         System.out.println(g);
+      }
+
+      System.out.println("----------------- removed a user----------------------");
+      userHandler_.removeUser(Tuan, true);
+      assertTrue("This user was removed", userHandler_.findUserByName(Tuan) == null);
+      mems = membershipHandler_.findMembershipsByUser(Tuan);
+      assertTrue("All membership related with this user was removed:", mems.isEmpty());
+
+      System.out.println("----------------- removed a group------------");
+      groupHandler_.removeGroup(groupHandler_.findGroupById("/" + Group1), true);
+      assertTrue("This group was removed", groupHandler_.findGroupById("/" + Group1) == null);
+
+      System.out.println("----------------- removed a membershipType------------");
+      mtHandler_.removeMembershipType(TestMembershipType1, true);
+      assertTrue("This membershipType was removed: ", mtHandler_.findMembershipType(TestMembershipType1) == null);
+      // Check all memberships associate with all groups
+      // to guarantee that no membership associate with removed membershipType
+      groups = groupHandler_.findGroups(groupHandler_.findGroupById("/"));
+      for (Group g : groups)
+      {
+         mems = membershipHandler_.findMembershipsByGroup(g);
+         for (Membership m : mems)
+         {
+            assertFalse("MembershipType of this membership is not: " + TestMembershipType1, m.getMembershipType()
+               .equalsIgnoreCase(TestMembershipType1));
+         }
+      }
+
+   }
+
+   public User createUser(String userName) throws Exception
+   {
+      User user = userHandler_.findUserByName(userName);
+      if (user != null)
+      {
+         return user;
+      }
+      user = userHandler_.createUserInstance(userName);
+      user.setPassword("default");
+      user.setFirstName("default");
+      user.setLastName("default");
+      user.setEmail("exo at exoportal.org");
+      userHandler_.createUser(user, true);
+      return user;
+   }
+}

Added: core/trunk/exo.core.component.organization.ldap/src/test/resources/conf/standalone/test-configuration.xml
===================================================================
--- core/trunk/exo.core.component.organization.ldap/src/test/resources/conf/standalone/test-configuration.xml	                        (rev 0)
+++ core/trunk/exo.core.component.organization.ldap/src/test/resources/conf/standalone/test-configuration.xml	2011-09-27 10:20:01 UTC (rev 4983)
@@ -0,0 +1,244 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    Copyright (C) 2009 eXo Platform SAS.
+
+    This is free software; you can redistribute it and/or modify it
+    under the terms of the GNU Lesser General Public License as
+    published by the Free Software Foundation; either version 2.1 of
+    the License, or (at your option) any later version.
+
+    This software is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this software; if not, write to the Free
+    Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+    02110-1301 USA, or see the FSF site: http://www.fsf.org.
+
+-->
+<configuration>
+
+   <component>
+      <key>org.exoplatform.services.cache.CacheService</key>
+      <jmx-name>cache:type=CacheService</jmx-name>
+      <type>org.exoplatform.services.cache.impl.CacheServiceImpl</type>
+      <init-params>
+         <object-param>
+            <name>cache.config.default</name>
+            <description>The default cache configuration</description>
+            <object type="org.exoplatform.services.cache.ExoCacheConfig">
+               <field name="name">
+                  <string>default</string>
+               </field>
+               <field name="maxSize">
+                  <int>300</int>
+               </field>
+               <field name="liveTime">
+                  <long>300</long>
+               </field>
+               <field name="distributed">
+                  <boolean>false</boolean>
+               </field>
+               <field name="implementation">
+                  <string>org.exoplatform.services.cache.concurrent.ConcurrentFIFOExoCache</string>
+               </field>
+            </object>
+         </object-param>
+      </init-params>
+   </component>
+
+   <component>
+      <key>org.exoplatform.services.database.HibernateService</key>
+      <jmx-name>exo-service:type=HibernateService</jmx-name>
+      <type>org.exoplatform.services.database.impl.HibernateServiceImpl</type>
+      <init-params>
+         <properties-param>
+            <name>hibernate.properties</name>
+            <description>Default Hibernate Service</description>
+            <property name="hibernate.show_sql" value="false" />
+            <property name="hibernate.cglib.use_reflection_optimizer" value="true" />
+            <property name="hibernate.connection.url" value="jdbc:hsqldb:mem:db/default" />
+            <property name="hibernate.connection.driver_class" value="org.hsqldb.jdbcDriver" />
+            <property name="hibernate.connection.autocommit" value="true" />
+            <property name="hibernate.connection.username" value="sa" />
+            <property name="hibernate.connection.password" value="" />
+            <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect" />
+            <property name="hibernate.c3p0.min_size" value="5" />
+            <property name="hibernate.c3p0.max_size" value="20" />
+            <property name="hibernate.c3p0.timeout" value="1800" />
+            <property name="hibernate.c3p0.max_statements" value="50" />
+         </properties-param>
+      </init-params>
+   </component>
+   
+    <component>
+      <key>org.exoplatform.services.ldap.LDAPService</key>
+      <type>org.exoplatform.services.organization.DummyLDAPServiceImpl</type>
+         <init-params>
+        <object-param>
+          <name>ldap.config</name>
+          <description>Default ldap config</description>
+          <object type="org.exoplatform.services.ldap.impl.LDAPConnectionConfig">
+            <field name="providerURL"><string>ldap://127.0.0.1:389,10.0.0.1:389</string></field>
+            <field name="rootdn"><string>CN=Manager,DC=exoplatform,DC=org</string></field>
+            <field name="password"><string>secret</string></field>
+            <!-- field  name="authenticationType"><string>simple</string></field-->           
+            <field name="version"><string>3</string></field>
+            <field  name="referralMode"><string>follow</string></field>            
+            <!-- field  name="serverName"><string>active.directory</string></field-->
+          </object>
+        </object-param>
+      </init-params>
+    </component>
+   
+   <component>
+      <key>org.exoplatform.services.organization.OrganizationService</key>
+      <type>org.exoplatform.services.organization.ldap.OrganizationServiceImpl</type>
+      <component-plugins>
+         <component-plugin>
+            <name>init.service.listener</name>
+            <set-method>addListenerPlugin</set-method>
+            <type>org.exoplatform.services.organization.ldap.OrganizationLdapInitializer</type>
+            <description>this listener populate organization ldap service create default dn</description>
+         </component-plugin>
+      </component-plugins>
+      <init-params>
+         <value-param>
+            <name>ldap.userDN.key</name>
+            <description>The key used to compose user DN</description>
+            <value>cn</value>
+         </value-param>
+         <value-param>
+            <name>ldap.groupDN.key</name>
+            <description>The key used to compose group DN</description>
+            <value>ou</value>
+         </value-param>
+         <object-param>
+            <name>ldap.attribute.mapping</name>
+            <description>ldap attribute mapping</description>
+            <object type="org.exoplatform.services.organization.ldap.LDAPAttributeMapping">
+               <field name="userLDAPClasses">
+                  <string>top,person,organizationalPerson,inetOrgPerson</string>
+               </field>
+               <field name="profileLDAPClasses">
+                  <string>top,organizationalPerson</string>
+               </field>
+               <field name="groupLDAPClasses">
+                  <string>top,organizationalUnit</string>
+               </field>
+               <field name="membershipTypeLDAPClasses">
+                  <string>top,organizationalRole</string>
+               </field>
+               <field name="membershipLDAPClasses">
+                  <string>top,groupOfNames</string>
+               </field>
+
+                <field name="baseURL">
+                  <string>DC=exoplatform,DC=org</string>
+               </field>
+               
+               <field name="groupsURL">
+                  <string>OU=groups,OU=portal,DC=exoplatform,DC=org</string>
+               </field>
+               <field name="membershipTypeURL">
+                  <string>OU=memberships,OU=portal,DC=exoplatform,DC=org</string>
+               </field>
+               <field name="userURL">
+                  <string>OU=users,OU=portal,DC=exoplatform,DC=org</string>
+               </field>
+               <field name="profileURL">
+                  <string>OU=profiles,OU=portal,DC=exoplatform,DC=org</string>
+               </field>
+
+               <field name="userUsernameAttr">
+                  <string>uid</string>
+               </field>
+               <field name="userPassword">
+                  <string>userPassword</string>
+               </field>
+               <field name="userFirstNameAttr">
+                  <string>givenName</string>
+               </field>
+               <field name="userLastNameAttr">
+                  <string>sn</string>
+               </field>
+               <field name="userDisplayNameAttr">
+                  <string>displayName</string>
+               </field>
+               <field name="userMailAttr">
+                  <string>mail</string>
+               </field>
+               <field name="userObjectClassFilter">
+                  <string>objectClass=person</string>
+               </field>
+
+               <field name="membershipTypeMemberValue">
+                  <string>member</string>
+               </field>
+               <field name="membershipTypeRoleNameAttr">
+                  <string>cn</string>
+               </field>
+               <field name="membershipTypeNameAttr">
+                  <string>cn</string>
+               </field>
+               <field name="membershipTypeObjectClassFilter">
+                  <string>objectClass=organizationalRole</string>
+               </field>
+               <field name="membershiptypeObjectClass">
+                  <string>organizationalRole</string>
+               </field>
+
+               <field name="groupNameAttr">
+                  <string>ou</string>
+               </field>
+               <field name="groupLabelAttr">
+                  <string>l</string>
+               </field>
+               <field name="groupObjectClass">
+                  <string>organizationalUnit</string>
+               </field>
+               <field name="groupObjectClassFilter">
+                  <string>objectClass=organizationalUnit</string>
+               </field>
+
+               <field name="membershipObjectClass">
+                  <string>groupOfNames</string>
+               </field>
+               <field name="membershipObjectClassFilter">
+                  <string>objectClass=groupOfNames</string>
+               </field>
+
+               <field name="ldapCreatedTimeStampAttr">
+                  <string>createdTimeStamp</string>
+               </field>
+               <field name="ldapModifiedTimeStampAttr">
+                  <string>modifiedTimeStamp</string>
+               </field>
+               <field name="ldapDescriptionAttr">
+                  <string>description</string>
+               </field>
+            </object>
+         </object-param>
+      </init-params>
+   </component>
+   
+   <external-component-plugins>
+      <target-component>org.exoplatform.services.database.HibernateService</target-component>
+      <component-plugin>
+         <name>add.hibernate.mapping</name>
+         <set-method>addPlugin</set-method>
+         <type>org.exoplatform.services.database.impl.AddHibernateMappingPlugin</type>
+         <init-params>
+            <values-param>
+               <name>hibernate.mapping</name>
+               <value>org/exoplatform/services/organization/impl/UserProfileData.hbm.xml</value>
+            </values-param>
+         </init-params>
+      </component-plugin>
+   </external-component-plugins>
+   
+
+</configuration>

Modified: core/trunk/pom.xml
===================================================================
--- core/trunk/pom.xml	2011-09-26 13:25:30 UTC (rev 4982)
+++ core/trunk/pom.xml	2011-09-27 10:20:01 UTC (rev 4983)
@@ -178,6 +178,26 @@
             <scope>test</scope>
          </dependency>
    
+         <dependency>
+            <groupId>org.apache.directory.server</groupId>
+            <artifactId>apacheds-server-unit</artifactId>
+            <version>1.0.2</version>
+            <scope>test</scope>
+         </dependency>
+         
+         <dependency>
+            <groupId>org.javassist</groupId>
+            <artifactId>javassist</artifactId>
+            <version>3.14.0-GA</version>
+            <scope>test</scope>
+         </dependency>
+         
+         <dependency>
+            <artifactId>hsqldb</artifactId>
+            <groupId>org.hsqldb</groupId>
+            <version>2.0.0</version>
+            <scope>test</scope>
+         </dependency>
       
          <dependency>
             <groupId>commons-lang</groupId>



More information about the exo-jcr-commits mailing list