[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