[exo-jcr-commits] exo-jcr SVN: r5148 - in core/trunk: exo.core.component.organization.jdbc/src/main/java/org/exoplatform/services/organization/hibernate and 5 other directories.

do-not-reply at jboss.org do-not-reply at jboss.org
Wed Nov 2 08:45:28 EDT 2011


Author: tolusha
Date: 2011-11-02 08:45:26 -0400 (Wed, 02 Nov 2011)
New Revision: 5148

Modified:
   core/trunk/exo.core.component.organization.api/src/main/java/org/exoplatform/services/organization/impl/GroupImpl.java
   core/trunk/exo.core.component.organization.api/src/main/java/org/exoplatform/services/organization/impl/MembershipImpl.java
   core/trunk/exo.core.component.organization.api/src/main/java/org/exoplatform/services/organization/impl/MembershipTypeImpl.java
   core/trunk/exo.core.component.organization.api/src/main/java/org/exoplatform/services/organization/impl/UserImpl.java
   core/trunk/exo.core.component.organization.api/src/main/java/org/exoplatform/services/organization/impl/UserProfileImpl.java
   core/trunk/exo.core.component.organization.jdbc/src/main/java/org/exoplatform/services/organization/hibernate/MembershipDAOImpl.java
   core/trunk/exo.core.component.organization.ldap/pom.xml
   core/trunk/exo.core.component.organization.ldap/src/main/java/org/exoplatform/services/organization/ldap/GroupDAOImpl.java
   core/trunk/exo.core.component.organization.ldap/src/main/java/org/exoplatform/services/organization/ldap/LdapListAccess.java
   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/MembershipTypeDAOImpl.java
   core/trunk/exo.core.component.organization.ldap/src/main/java/org/exoplatform/services/organization/ldap/OrganizationServiceImpl.java
   core/trunk/exo.core.component.organization.ldap/src/main/java/org/exoplatform/services/organization/ldap/UserDAOImpl.java
   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/resources/conf/standalone/test-configuration.xml
   core/trunk/exo.core.component.organization.tests/src/main/java/org/exoplatform/services/tck/organization/TestMembershipHandler.java
   core/trunk/exo.core.component.organization.tests/src/main/java/org/exoplatform/services/tck/organization/TestUserHandler.java
Log:
EXOJCR-1609: adop LDAPOrgService

Modified: core/trunk/exo.core.component.organization.api/src/main/java/org/exoplatform/services/organization/impl/GroupImpl.java
===================================================================
--- core/trunk/exo.core.component.organization.api/src/main/java/org/exoplatform/services/organization/impl/GroupImpl.java	2011-11-02 10:59:39 UTC (rev 5147)
+++ core/trunk/exo.core.component.organization.api/src/main/java/org/exoplatform/services/organization/impl/GroupImpl.java	2011-11-02 12:45:26 UTC (rev 5148)
@@ -30,7 +30,7 @@
 /**
  * @hibernate.class table="EXO_GROUP"
  */
-public class GroupImpl implements Group
+public class GroupImpl implements Group, Cloneable
 {
 
    private String id;
@@ -144,4 +144,19 @@
    {
       return "Group[" + id + "|" + groupName + "]";
    }
+
+   /**
+    * {@inheritDoc}
+    */
+   public Object clone()
+   {
+      GroupImpl gi = new GroupImpl(groupName);
+
+      gi.setDescription(desc);
+      gi.setId(id);
+      gi.setLabel(label);
+      gi.setParentId(parentId);
+
+      return gi;
+   }
 }

Modified: core/trunk/exo.core.component.organization.api/src/main/java/org/exoplatform/services/organization/impl/MembershipImpl.java
===================================================================
--- core/trunk/exo.core.component.organization.api/src/main/java/org/exoplatform/services/organization/impl/MembershipImpl.java	2011-11-02 10:59:39 UTC (rev 5147)
+++ core/trunk/exo.core.component.organization.api/src/main/java/org/exoplatform/services/organization/impl/MembershipImpl.java	2011-11-02 12:45:26 UTC (rev 5148)
@@ -23,7 +23,7 @@
 /**
  * @hibernate.class table="EXO_MEMBERSHIP"
  */
-public class MembershipImpl implements Membership
+public class MembershipImpl implements Membership, Cloneable
 {
 
    private String id = null;
@@ -97,4 +97,18 @@
    {
       return "Membership[" + id + "]";
    }
+
+   /**
+    * {@inheritDoc}
+    */
+   public Object clone()
+   {
+      MembershipImpl mi = new MembershipImpl();
+      mi.setGroupId(groupId);
+      mi.setId(id);
+      mi.setMembershipType(membershipType);
+      mi.setUserName(userName);
+
+      return mi;
+   }
 }

Modified: core/trunk/exo.core.component.organization.api/src/main/java/org/exoplatform/services/organization/impl/MembershipTypeImpl.java
===================================================================
--- core/trunk/exo.core.component.organization.api/src/main/java/org/exoplatform/services/organization/impl/MembershipTypeImpl.java	2011-11-02 10:59:39 UTC (rev 5147)
+++ core/trunk/exo.core.component.organization.api/src/main/java/org/exoplatform/services/organization/impl/MembershipTypeImpl.java	2011-11-02 12:45:26 UTC (rev 5148)
@@ -28,7 +28,7 @@
  * 
  * @hibernate.class table="EXO_MEMBERSHIP_TYPE"
  */
-public class MembershipTypeImpl implements MembershipType
+public class MembershipTypeImpl implements MembershipType, Cloneable
 {
 
    private String name;
@@ -116,4 +116,16 @@
    {
       modifiedDate = d;
    }
+
+   /**
+    * {@inheritDoc}
+    */
+   public Object clone()
+   {
+      MembershipTypeImpl type = new MembershipTypeImpl(name, owner, description);
+      type.setCreatedDate(createdDate);
+      type.setModifiedDate(modifiedDate);
+
+      return type;
+   }
 }

Modified: core/trunk/exo.core.component.organization.api/src/main/java/org/exoplatform/services/organization/impl/UserImpl.java
===================================================================
--- core/trunk/exo.core.component.organization.api/src/main/java/org/exoplatform/services/organization/impl/UserImpl.java	2011-11-02 10:59:39 UTC (rev 5147)
+++ core/trunk/exo.core.component.organization.api/src/main/java/org/exoplatform/services/organization/impl/UserImpl.java	2011-11-02 12:45:26 UTC (rev 5148)
@@ -25,7 +25,7 @@
 /**
  * @hibernate.class table="EXO_USER"
  */
-public class UserImpl implements User
+public class UserImpl implements User, Cloneable
 {
 
    private String id = null;
@@ -186,4 +186,22 @@
       this.organizationId = organizationId;
    }
 
+   /**
+    * {@inheritDoc}
+    */
+   public Object clone()
+   {
+      UserImpl ui = new UserImpl(userName);
+
+      ui.setId(id);
+      ui.setCreatedDate(createdDate);
+      ui.setEmail(email);
+      ui.setFirstName(firstName);
+      ui.setLastLoginTime(lastLoginTime);
+      ui.setLastName(lastName);
+      ui.setOrganizationId(organizationId);
+      ui.setPassword(password);
+
+      return ui;
+   }
 }

Modified: core/trunk/exo.core.component.organization.api/src/main/java/org/exoplatform/services/organization/impl/UserProfileImpl.java
===================================================================
--- core/trunk/exo.core.component.organization.api/src/main/java/org/exoplatform/services/organization/impl/UserProfileImpl.java	2011-11-02 10:59:39 UTC (rev 5147)
+++ core/trunk/exo.core.component.organization.api/src/main/java/org/exoplatform/services/organization/impl/UserProfileImpl.java	2011-11-02 12:45:26 UTC (rev 5148)
@@ -27,7 +27,7 @@
  * Created by The eXo Platform SAS Author : Mestrallet Benjamin
  * benjmestrallet at users.sourceforge.net Date: Aug 21, 2003 Time: 3:22:54 PM
  */
-public class UserProfileImpl implements UserProfile
+public class UserProfileImpl implements UserProfile, Cloneable
 {
    private String userName;
 
@@ -85,4 +85,12 @@
    {
       return attributes;
    }
+
+   /**
+    * {@inheritDoc}
+    */
+   public Object clone()
+   {
+      return new UserProfileImpl(userName, attributes);
+   }
 }

Modified: core/trunk/exo.core.component.organization.jdbc/src/main/java/org/exoplatform/services/organization/hibernate/MembershipDAOImpl.java
===================================================================
--- core/trunk/exo.core.component.organization.jdbc/src/main/java/org/exoplatform/services/organization/hibernate/MembershipDAOImpl.java	2011-11-02 10:59:39 UTC (rev 5147)
+++ core/trunk/exo.core.component.organization.jdbc/src/main/java/org/exoplatform/services/organization/hibernate/MembershipDAOImpl.java	2011-11-02 12:45:26 UTC (rev 5148)
@@ -365,7 +365,7 @@
       List memberships = session.createQuery(queryFindMembership).setString(0, id).list();
       if (memberships.size() == 0)
       {
-         return null;
+         throw new Exception("No membership with id: " + id + "found.");
       }
       else if (memberships.size() == 1)
       {
@@ -373,7 +373,7 @@
       }
       else
       {
-         throw new Exception("Expect 0 or 1 membership but found" + memberships.size());
+         throw new Exception("Found more than 1 membership: " + memberships.size());
       }
       // Membership membership =
       // (Membership) session.createQuery(queryFindMembership).setString(0,

Modified: core/trunk/exo.core.component.organization.ldap/pom.xml
===================================================================
--- core/trunk/exo.core.component.organization.ldap/pom.xml	2011-11-02 10:59:39 UTC (rev 5147)
+++ core/trunk/exo.core.component.organization.ldap/pom.xml	2011-11-02 12:45:26 UTC (rev 5148)
@@ -162,18 +162,23 @@
                      <name>orgservice.test.configuration.file</name>
                      <value>/conf/standalone/test-configuration.xml</value>
                   </property>
+                  <!--
+                     This property allow to define if we should skip testing
+                     login and logaout time processing 
+                  -->  
+                  <property>
+                     <name>orgservice.test.configuration.skipDateTests</name>
+                     <value>true</value>
+                  </property>
                </systemProperties>
+               
                <includes>
                   <include>org/exoplatform/services/tck/organization/Test*.java</include>
                </includes>                 
                <excludes>
-                  <!-- 
-                     Temporary excluded, to investigate cause of failures and errors. 
+                   <!--
+                     Excluded, as this class has no tests to be run
                   -->
-                  <exclude>org/exoplatform/services/tck/organization/Test*.java</exclude>
-                  <!--
-                     Excluded as this class has no tests to be run
-                  -->
                   <exclude>**/AbstractOrganizationServiceTest.java</exclude>
                   <!--
                      Not a unit test.

Modified: core/trunk/exo.core.component.organization.ldap/src/main/java/org/exoplatform/services/organization/ldap/GroupDAOImpl.java
===================================================================
--- core/trunk/exo.core.component.organization.ldap/src/main/java/org/exoplatform/services/organization/ldap/GroupDAOImpl.java	2011-11-02 10:59:39 UTC (rev 5147)
+++ core/trunk/exo.core.component.organization.ldap/src/main/java/org/exoplatform/services/organization/ldap/GroupDAOImpl.java	2011-11-02 12:45:26 UTC (rev 5148)
@@ -22,11 +22,11 @@
 import org.exoplatform.services.log.ExoLogger;
 import org.exoplatform.services.log.Log;
 import org.exoplatform.services.organization.CacheHandler;
+import org.exoplatform.services.organization.CacheHandler.CacheType;
 import org.exoplatform.services.organization.Group;
 import org.exoplatform.services.organization.GroupEventListener;
 import org.exoplatform.services.organization.GroupEventListenerHandler;
 import org.exoplatform.services.organization.GroupHandler;
-import org.exoplatform.services.organization.CacheHandler.CacheType;
 import org.exoplatform.services.organization.impl.GroupImpl;
 
 import java.util.ArrayList;
@@ -121,6 +121,10 @@
     */
    public void addChild(Group parent, Group child, boolean broadcast) throws Exception
    {
+      if (parent != null && findGroupById(parent.getId()) == null)
+      {
+         throw new Exception("Trying to add group " + child + ", but it's parent " + parent + ", does not exists.");
+      }
       setId(parent, child);
       String searchBase = createSubDN(parent);
       String groupDN = ldapAttrMapping.groupDNKey + "=" + child.getGroupName() + "," + searchBase;
@@ -141,18 +145,27 @@
                if (results.hasMore())
                {
                   if (LOG.isDebugEnabled())
+                  {
                      LOG.debug("Group " + child + ", parent  " + parent + " already exists. ");
-                  return;
+                  }
+                  throw new Exception("Group " + child + ", parent  " + parent + " already exists. ");
                }
 
                GroupImpl group = (GroupImpl)child;
                if (broadcast)
+               {
                   preSave(group, true);
+               }
+
                ctx.createSubcontext(groupDN, ldapAttrMapping.groupToAttributes(child));
+               cacheHandler.put(child.getId(), group, CacheType.GROUP);
+
                if (broadcast)
+               {
                   postSave(group, true);
+               }
                
-               cacheHandler.put(child.getId(), group, CacheType.GROUP);
+
                return;
             }
             catch (NamingException e)
@@ -244,8 +257,11 @@
                if (!results.hasMoreElements())
                {
                   if (LOG.isDebugEnabled())
-                     LOG.debug("Nothing for removing, group " + group);
-                  return group;
+                  {
+                     LOG.debug("Nothing to remove, group " + group + " is not found.");
+                  }
+
+                  throw new NameNotFoundException("Nothing to remove, group " + group + " is not found.");
                }
 
                SearchResult sr = results.next();
@@ -305,8 +321,13 @@
             groups.clear();
             try
             {
+               String userDN = getDNFromUsername(ctx, userName);
+               if (userDN == null)
+               {
+                  return groups;
+               }
                String filter =
-                  "(&(" + ldapAttrMapping.membershipTypeMemberValue + "=" + getDNFromUsername(ctx, userName) + ")("
+                  "(&(" + ldapAttrMapping.membershipTypeMemberValue + "=" + userDN + ")("
                      + ldapAttrMapping.membershipTypeRoleNameAttr + "=" + membershipType + "))";
                SearchControls constraints = new SearchControls();
                constraints.setSearchScope(SearchControls.SUBTREE_SCOPE);

Modified: core/trunk/exo.core.component.organization.ldap/src/main/java/org/exoplatform/services/organization/ldap/LdapListAccess.java
===================================================================
--- core/trunk/exo.core.component.organization.ldap/src/main/java/org/exoplatform/services/organization/ldap/LdapListAccess.java	2011-11-02 10:59:39 UTC (rev 5147)
+++ core/trunk/exo.core.component.organization.ldap/src/main/java/org/exoplatform/services/organization/ldap/LdapListAccess.java	2011-11-02 12:45:26 UTC (rev 5148)
@@ -69,7 +69,9 @@
                   ctx = ldapService.getLdapContext(true);
                }
                else
-                  throw e;
+               {
+                  return 0;
+               }
             }
          }
       }

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-11-02 10:59:39 UTC (rev 5147)
+++ core/trunk/exo.core.component.organization.ldap/src/main/java/org/exoplatform/services/organization/ldap/MembershipDAOImpl.java	2011-11-02 12:45:26 UTC (rev 5148)
@@ -328,6 +328,12 @@
             try
             {
                String userDN = getDNFromUsername(ctx, username);
+               // if userDN equals null than there is no such user
+               // so we return empty collection
+               if (userDN == null)
+               {
+                  return memberships;
+               }
                String filter = ldapAttrMapping.membershipTypeMemberValue + "=" + escapeDN(userDN);
                SearchControls constraints = new SearchControls();
                constraints.setSearchScope(SearchControls.SUBTREE_SCOPE);
@@ -545,7 +551,43 @@
       SearchControls constraints = new SearchControls();
       constraints.setSearchScope(SearchControls.ONELEVEL_SCOPE);
       String groupDN = getGroupDNFromGroupId(groupId);
-      return ctx.search(groupDN, filter, constraints);
+      try
+      {
+         return ctx.search(groupDN, filter, constraints);
+      }
+      catch (NamingException ne)
+      {
+         // we assume that NamingException means that
+         // groupDN represent not existing sequence of elements
+         // so the result should be an empty NamingEnumeration
+         return new NamingEnumeration<SearchResult>()
+         {
+
+            public boolean hasMoreElements()
+            {
+               return false;
+            }
+
+            public SearchResult nextElement()
+            {
+               return null;
+            }
+
+            public SearchResult next() throws NamingException
+            {
+               return null;
+            }
+
+            public boolean hasMore() throws NamingException
+            {
+               return false;
+            }
+
+            public void close() throws NamingException
+            {
+            }
+         };
+      }
    }
 
    /**
@@ -676,6 +718,10 @@
             }
          }
       }
+      catch (NamingException e)
+      {
+         return new ArrayList<Membership>();
+      }
       finally
       {
          ldapService.release(ctx);

Modified: core/trunk/exo.core.component.organization.ldap/src/main/java/org/exoplatform/services/organization/ldap/MembershipTypeDAOImpl.java
===================================================================
--- core/trunk/exo.core.component.organization.ldap/src/main/java/org/exoplatform/services/organization/ldap/MembershipTypeDAOImpl.java	2011-11-02 10:59:39 UTC (rev 5147)
+++ core/trunk/exo.core.component.organization.ldap/src/main/java/org/exoplatform/services/organization/ldap/MembershipTypeDAOImpl.java	2011-11-02 12:45:26 UTC (rev 5148)
@@ -22,11 +22,11 @@
 import org.exoplatform.services.log.ExoLogger;
 import org.exoplatform.services.log.Log;
 import org.exoplatform.services.organization.CacheHandler;
+import org.exoplatform.services.organization.CacheHandler.CacheType;
 import org.exoplatform.services.organization.MembershipType;
 import org.exoplatform.services.organization.MembershipTypeEventListener;
 import org.exoplatform.services.organization.MembershipTypeEventListenerHandler;
 import org.exoplatform.services.organization.MembershipTypeHandler;
-import org.exoplatform.services.organization.CacheHandler.CacheType;
 import org.exoplatform.services.organization.impl.MembershipTypeImpl;
 
 import java.util.ArrayList;
@@ -176,13 +176,12 @@
                }
 
                ctx.modifyAttributes(membershipTypeDN, mods);
+               cacheHandler.put(mt.getName(), mt, CacheType.MEMBERSHIPTYPE);
 
                if (broadcast)
                {
                   postSave(mt, false);
                }
-
-               cacheHandler.put(mt.getName(), mt, CacheType.MEMBERSHIPTYPE);
                return mt;
             }
             catch (NamingException e)
@@ -221,13 +220,13 @@
                }
 
                ctx.destroySubcontext(membershipTypeDN);
+               cacheHandler.remove(name, CacheType.MEMBERSHIPTYPE);
 
                if (broadcast)
                {
                   postDelete(m);
                }
 
-               cacheHandler.remove(name, CacheType.MEMBERSHIPTYPE);
                return m;
             }
             catch (NamingException e)
@@ -239,8 +238,10 @@
       catch (NameNotFoundException e)
       {
          if (LOG.isDebugEnabled())
+         {
             LOG.debug(e.getLocalizedMessage(), e);
-         return null;
+         }
+         throw new Exception(e);
       }
       finally
       {

Modified: core/trunk/exo.core.component.organization.ldap/src/main/java/org/exoplatform/services/organization/ldap/OrganizationServiceImpl.java
===================================================================
--- core/trunk/exo.core.component.organization.ldap/src/main/java/org/exoplatform/services/organization/ldap/OrganizationServiceImpl.java	2011-11-02 10:59:39 UTC (rev 5147)
+++ core/trunk/exo.core.component.organization.ldap/src/main/java/org/exoplatform/services/organization/ldap/OrganizationServiceImpl.java	2011-11-02 12:45:26 UTC (rev 5148)
@@ -62,7 +62,7 @@
       {
          //      ValueParam param = params.getValueParam("ldap.userDN.key");
          //      ldapAttrMapping.userDNKey = param.getValue();
-         userDAO_ = new UserDAOImpl(ldapAttrMapping, ldapService, cacheHandler);
+         userDAO_ = new UserDAOImpl(ldapAttrMapping, ldapService, cacheHandler, this);
          groupDAO_ = new GroupDAOImpl(ldapAttrMapping, ldapService, cacheHandler);
          membershipDAO_ = new MembershipDAOImpl(ldapAttrMapping, ldapService, this, cacheHandler);
       }

Modified: core/trunk/exo.core.component.organization.ldap/src/main/java/org/exoplatform/services/organization/ldap/UserDAOImpl.java
===================================================================
--- core/trunk/exo.core.component.organization.ldap/src/main/java/org/exoplatform/services/organization/ldap/UserDAOImpl.java	2011-11-02 10:59:39 UTC (rev 5147)
+++ core/trunk/exo.core.component.organization.ldap/src/main/java/org/exoplatform/services/organization/ldap/UserDAOImpl.java	2011-11-02 12:45:26 UTC (rev 5148)
@@ -22,12 +22,13 @@
 import org.exoplatform.commons.utils.ListAccess;
 import org.exoplatform.services.ldap.LDAPService;
 import org.exoplatform.services.organization.CacheHandler;
+import org.exoplatform.services.organization.CacheHandler.CacheType;
+import org.exoplatform.services.organization.OrganizationService;
 import org.exoplatform.services.organization.Query;
 import org.exoplatform.services.organization.User;
 import org.exoplatform.services.organization.UserEventListener;
 import org.exoplatform.services.organization.UserEventListenerHandler;
 import org.exoplatform.services.organization.UserHandler;
-import org.exoplatform.services.organization.CacheHandler.CacheType;
 import org.exoplatform.services.organization.impl.UserImpl;
 
 import java.util.ArrayList;
@@ -56,6 +57,11 @@
    private List<UserEventListener> listeners = new ArrayList<UserEventListener>(5);
 
    /**
+    * Organization service instance
+    */
+   private OrganizationService os;
+   
+   /**
     * @param ldapAttrMapping mapping LDAP attributes to eXo organization service
     *          items (users, groups, etc)
     * @param ldapService {@link LDAPService}
@@ -68,6 +74,22 @@
    {
       super(ldapAttrMapping, ldapService, cacheHandler);
    }
+   
+   
+   /**
+    * @param ldapAttrMapping mapping LDAP attributes to eXo organization service
+    *          items (users, groups, etc)
+    * @param ldapService {@link LDAPService}
+    * @param cacheHandler 
+    *          The Cache Handler
+    * @throws Exception if any errors occurs
+    */
+   public UserDAOImpl(LDAPAttributeMapping ldapAttrMapping, LDAPService ldapService, CacheHandler cacheHandler, OrganizationService os)
+      throws Exception
+   {
+      this(ldapAttrMapping, ldapService, cacheHandler);
+      this.os = os;
+   }
 
    /**
     * {@inheritDoc}
@@ -230,25 +252,36 @@
             {
                User user = getUserFromUsername(ctx, userName);
                if (user == null)
+               {
                   return null;
-
+               }
                String userDN = getDNFromUsername(ctx, userName);
 
                if (broadcast)
+               {
                   preDelete(user);
+               }
+
                ctx.destroySubcontext(userDN);
+               if (os != null)
+               {
+                  os.getUserProfileHandler().removeUserProfile(userName, broadcast);
+               }
+               cacheHandler.remove(userName, CacheType.USER);
+               cacheHandler.remove(CacheHandler.USER_PREFIX + userName, CacheType.MEMBERSHIP);
+
                if (broadcast)
+               {
                   postDelete(user);
-
-               cacheHandler.remove(userName, CacheType.USER);
-               cacheHandler.remove(CacheHandler.USER_PREFIX + userName, CacheType.MEMBERSHIP);
+               }
                return user;
-            }
+            }  
             catch (NamingException e)
             {
                ctx = reloadCtx(ctx, err, e);
             }
          }
+
       }
       finally
       {
@@ -338,7 +371,7 @@
       ArrayList<String> list = new ArrayList<String>();
       if (q.getUserName() != null && q.getUserName().length() > 0)
       {
-         list.add("(" + ldapAttrMapping.userUsernameAttr + "=" + q.getUserName() + ")");
+         list.add("(" + ldapAttrMapping.userUsernameAttr + "=" + addAsterisks(q.getUserName()) + ")");
       }
       if (q.getFirstName() != null && q.getFirstName().length() > 0)
       {
@@ -357,32 +390,44 @@
       {
          StringBuilder buffer = new StringBuilder();
          buffer.append("(&");
-         if (list.size() > 1)
+         for (int x = 0; x < list.size(); x++)
          {
-            for (int x = 0; x < list.size(); x++)
-            {
-               if (x == (list.size() - 1))
-                  buffer.append(list.get(x));
-               else
-                  buffer.append(list.get(x) + " || ");
-            }
+            buffer.append(list.get(x));
          }
-         else
-            buffer.append(list.get(0));
-
-         buffer.append("(" + ldapAttrMapping.userObjectClassFilter + ") )");
+         buffer.append("(" + ldapAttrMapping.userObjectClassFilter + "))");
          filter = buffer.toString();
       }
       else
-         filter = ldapAttrMapping.userObjectClassFilter;
+      {
+         filter = "(" + ldapAttrMapping.userObjectClassFilter + ")";
+      }
       String searchBase = ldapAttrMapping.userURL;
 
       //    return new LDAPUserPageList(ldapAttrMapping, ldapService, searchBase, filter, 20);
-
       return new SimpleLdapUserListAccess(ldapAttrMapping, ldapService, searchBase, filter);
    }
 
    /**
+    * Simple utility method to add asterisks symbol ('*')
+    * to the very beginning and the end of the string.
+    * @param string to be surrounded with asterisks
+    * @return
+    */
+   private String addAsterisks(String s)
+   {
+      StringBuffer sb = new StringBuffer(s);
+      if (!s.startsWith("*"))
+      {
+         sb.insert(0, "*");
+      }
+      if (!s.endsWith("*"))
+      {
+         sb.append("*");
+      }
+
+      return sb.toString();
+   }
+   /**
     * {@inheritDoc}
     */
    public boolean authenticate(String username, String password) throws Exception

Modified: 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	2011-11-02 10:59:39 UTC (rev 5147)
+++ core/trunk/exo.core.component.organization.ldap/src/test/java/org/exoplatform/services/organization/DummyLDAPServiceImpl.java	2011-11-02 12:45:26 UTC (rev 5148)
@@ -161,7 +161,7 @@
       InitialContext ctx = null;
       try
       {
-         ctx = new DummyLdapContext(new InitialContext(new Hashtable<String, String>(env)));
+         ctx = new DummyLdapContext(new InitialContext(props));
          return true;
       }
       catch (NamingException e)

Modified: 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	2011-11-02 10:59:39 UTC (rev 5147)
+++ core/trunk/exo.core.component.organization.ldap/src/test/resources/conf/standalone/test-configuration.xml	2011-11-02 12:45:26 UTC (rev 5148)
@@ -239,6 +239,259 @@
          </init-params>
       </component-plugin>
    </external-component-plugins>
-   
 
+   <external-component-plugins>
+      <target-component>org.exoplatform.services.organization.OrganizationService</target-component>
+        <component-plugin>
+           <name>tester.membership.type.listener</name>
+           <set-method>addListenerPlugin</set-method>
+           <type>org.exoplatform.services.organization.MembershipTypeEventListener</type>
+           <description>Membership type listerner for testing purpose</description>
+       </component-plugin>
+   </external-component-plugins>   
+
+  <!-- org service initializer, copied from ECM portal.war -->
+  <external-component-plugins>
+    <target-component>org.exoplatform.services.organization.OrganizationService</target-component>
+    <component-plugin>
+      <name>init.service.listener</name>
+      <set-method>addListenerPlugin</set-method>
+      <type>org.exoplatform.services.organization.OrganizationDatabaseInitializer</type>
+      <description>this listener populate organization data for the first launch</description>
+      <init-params>      
+        <value-param>
+          <name>checkDatabaseAlgorithm</name>
+          <description>check database</description>
+          <value>entry</value>
+        </value-param>      
+        <value-param>
+          <name>printInformation</name>
+          <description>Print information init database</description>
+          <value>false</value>
+        </value-param> 
+        <object-param>
+          <name>configuration</name>
+          <description>description</description>
+          <object type="org.exoplatform.services.organization.OrganizationConfig">
+            <field  name="membershipType">
+              <collection type="java.util.ArrayList">
+              	<value>
+                  <object type="org.exoplatform.services.organization.OrganizationConfig$MembershipType">
+                    <field  name="type"><string>manager</string></field>
+                    <field  name="description"><string>manager membership type</string></field>
+                  </object>
+                </value>
+                <value>
+                  <object type="org.exoplatform.services.organization.OrganizationConfig$MembershipType">
+                    <field  name="type"><string>member</string></field>
+                    <field  name="description"><string>member membership type</string></field>
+                  </object>
+                </value>                
+                <value>
+                  <object type="org.exoplatform.services.organization.OrganizationConfig$MembershipType">
+                    <field  name="type"><string>validator</string></field>
+                    <field  name="description"><string>validator membership type</string></field>
+                  </object>
+                </value>
+              </collection>
+            </field>
+
+            <field  name="group">
+              <collection type="java.util.ArrayList">             
+                <value>
+                  <object type="org.exoplatform.services.organization.OrganizationConfig$Group">
+                    <field  name="name"><string>platform</string></field>
+                    <field  name="parentId"><string></string></field>
+                    <field  name="description"><string>the /platform group</string></field>
+                    <field  name="label"><string>Platform</string></field>                    
+                  </object>
+                </value>
+                <value>
+                  <object type="org.exoplatform.services.organization.OrganizationConfig$Group">
+                    <field  name="name"><string>administrators</string></field>
+                    <field  name="parentId"><string>/platform</string></field>
+                    <field  name="description"><string>the /platform/administrators group</string></field>
+                    <field  name="label"><string>Administrators</string></field>
+                  </object>
+                </value>
+                <value>
+                  <object type="org.exoplatform.services.organization.OrganizationConfig$Group">
+                    <field  name="name"><string>users</string></field>
+                    <field  name="parentId"><string>/platform</string></field>
+                    <field  name="description"><string>the /platform/users group</string></field>
+                    <field  name="label"><string>Users</string></field>
+                  </object>
+                </value>
+                <value>
+                  <object type="org.exoplatform.services.organization.OrganizationConfig$Group">
+                    <field  name="name"><string>guests</string></field>
+                    <field  name="parentId"><string>/platform</string></field>
+                    <field  name="description"><string>the /platform/guests group</string></field>
+                    <field  name="label"><string>Guests</string></field>
+                  </object>
+                </value>
+                <value>
+                  <object type="org.exoplatform.services.organization.OrganizationConfig$Group">
+                    <field  name="name"><string>organization</string></field>
+                    <field  name="parentId"><string></string></field>
+                    <field  name="description"><string>the organization group</string></field>
+                    <field  name="label"><string>Organization</string></field>
+                  </object>
+                </value>
+                <value>
+                  <object type="org.exoplatform.services.organization.OrganizationConfig$Group">
+                    <field  name="name"><string>management</string></field>
+                    <field  name="parentId"><string>/organization</string></field>
+                    <field  name="description"><string>the /organization/management group</string></field>
+                    <field  name="label"><string>Management</string></field>
+                  </object>
+                </value>
+                <value>
+                  <object type="org.exoplatform.services.organization.OrganizationConfig$Group">
+                    <field  name="name"><string>executive-board</string></field>
+                    <field  name="parentId"><string>/organization/management</string></field>
+                    <field  name="description"><string>the /organization/management/executive-board group</string></field>
+                    <field  name="label"><string>Executive Board</string></field>
+                  </object>
+                </value>
+                <value>
+                  <object type="org.exoplatform.services.organization.OrganizationConfig$Group">
+                    <field  name="name"><string>human-resources</string></field>
+                    <field  name="parentId"><string>/organization/management</string></field>
+                    <field  name="description"><string>the /organization/management/human-resource group</string></field>
+                    <field  name="label"><string>Human Resources</string></field>
+                  </object>
+                </value>
+                <value>
+                  <object type="org.exoplatform.services.organization.OrganizationConfig$Group">
+                    <field  name="name"><string>communication</string></field>
+                    <field  name="parentId"><string>/organization</string></field>
+                    <field  name="description"><string>the /organization/communication group</string></field>
+                    <field  name="label"><string>Communication</string></field>
+                  </object>
+                </value>
+                <value>
+                  <object type="org.exoplatform.services.organization.OrganizationConfig$Group">
+                    <field  name="name"><string>marketing</string></field>
+                    <field  name="parentId"><string>/organization/communication</string></field>
+                    <field  name="description"><string>the /organization/communication/marketing group</string></field>
+                    <field  name="label"><string>Marketing</string></field>
+                  </object>
+                </value>
+                <value>
+                  <object type="org.exoplatform.services.organization.OrganizationConfig$Group">
+                    <field  name="name"><string>press-and-media</string></field>
+                    <field  name="parentId"><string>/organization/communication</string></field>
+                    <field  name="description"><string>the /organization/communication/press-and-media group</string></field>
+                    <field  name="label"><string>Press and Media</string></field>
+                  </object>
+                </value>
+                <value>
+                  <object type="org.exoplatform.services.organization.OrganizationConfig$Group">
+                    <field  name="name"><string>operations</string></field>
+                    <field  name="parentId"><string>/organization</string></field>
+                    <field  name="description"><string>the /organization/operations and media group</string></field>
+                    <field  name="label"><string>Operations</string></field>
+                  </object>
+                </value>
+                <value>
+                  <object type="org.exoplatform.services.organization.OrganizationConfig$Group">
+                    <field  name="name"><string>sales</string></field>
+                    <field  name="parentId"><string>/organization/operations</string></field>
+                    <field  name="description"><string>the /organization/operations/sales group</string></field>
+                    <field  name="label"><string>Sales</string></field>
+                  </object>
+                </value>
+                <value>
+                  <object type="org.exoplatform.services.organization.OrganizationConfig$Group">
+                    <field  name="name"><string>finances</string></field>
+                    <field  name="parentId"><string>/organization/operations</string></field>
+                    <field  name="description"><string>the /organization/operations/finances group</string></field>
+                    <field  name="label"><string>Finances</string></field>
+                  </object>
+                </value>
+                <value>
+                  <object type="org.exoplatform.services.organization.OrganizationConfig$Group">
+                    <field  name="name"><string>customers</string></field>
+                    <field  name="parentId"><string></string></field>
+                    <field  name="description"><string>the /customers group</string></field>
+                    <field  name="label"><string>Customers</string></field>
+                  </object>
+                </value>                
+                <value>
+                  <object type="org.exoplatform.services.organization.OrganizationConfig$Group">
+                    <field  name="name"><string>partners</string></field>
+                    <field  name="parentId"><string></string></field>
+                    <field  name="description"><string>the /partners group</string></field>
+                    <field  name="label"><string>Partners</string></field>
+                  </object>
+                </value>                
+              </collection>
+            </field>
+
+            <field  name="user">
+              <collection type="java.util.ArrayList">
+                <value>
+                  <object type="org.exoplatform.services.organization.OrganizationConfig$User">
+                    <field  name="userName"><string>root</string></field>
+                    <field  name="password"><string>exo</string></field>
+                    <field  name="firstName"><string>Root</string></field>
+                    <field  name="lastName"><string>Root</string></field>
+                    <field  name="email"><string>root at localhost</string></field>
+                    <field  name="groups">
+                      <string>
+                      	manager:/platform/administrators,member:/platform/users,
+                      	member:/organization/management/executive-board
+                      </string>
+                    </field>
+                  </object>
+                </value>
+                
+                <value>
+                  <object type="org.exoplatform.services.organization.OrganizationConfig$User">
+                    <field  name="userName"><string>john</string></field>
+                    <field  name="password"><string>exo</string></field>
+                    <field  name="firstName"><string>John</string></field>
+                    <field  name="lastName"><string>Anthony</string></field>
+                    <field  name="email"><string>john at localhost</string></field>
+                    <field  name="groups">
+                      <string>
+                      	member:/platform/administrators,member:/platform/users,
+                      	manager:/organization/management/executive-board
+                      </string>
+                    </field>
+                  </object>
+                </value>                                                        
+                <value>
+                  <object type="org.exoplatform.services.organization.OrganizationConfig$User">
+                    <field  name="userName"><string>marry</string></field>
+                    <field  name="password"><string>exo</string></field>
+                    <field  name="firstName"><string>Marry</string></field>
+                    <field  name="lastName"><string>Kelly</string></field>
+                    <field  name="email"><string>marry at localhost</string></field>
+                    <field  name="groups">
+                      <string>member:/platform/users</string>
+                    </field>
+                  </object>
+                </value>
+                <value>
+                  <object type="org.exoplatform.services.organization.OrganizationConfig$User">
+                    <field  name="userName"><string>demo</string></field>
+                    <field  name="password"><string>exo</string></field>
+                    <field  name="firstName"><string>Demo</string></field>
+                    <field  name="lastName"><string>exo</string></field>
+                    <field  name="email"><string>demo at localhost</string></field>
+                    <field  name="groups">
+                      <string>member:/platform/guests,member:/platform/users</string>
+                    </field>
+                  </object>
+                </value>                       
+              </collection>
+            </field>
+          </object>
+        </object-param>
+      </init-params>
+    </component-plugin>
+  </external-component-plugins>
+
 </configuration>

Modified: core/trunk/exo.core.component.organization.tests/src/main/java/org/exoplatform/services/tck/organization/TestMembershipHandler.java
===================================================================
--- core/trunk/exo.core.component.organization.tests/src/main/java/org/exoplatform/services/tck/organization/TestMembershipHandler.java	2011-11-02 10:59:39 UTC (rev 5147)
+++ core/trunk/exo.core.component.organization.tests/src/main/java/org/exoplatform/services/tck/organization/TestMembershipHandler.java	2011-11-02 12:45:26 UTC (rev 5148)
@@ -24,6 +24,7 @@
 import org.exoplatform.services.organization.MembershipType;
 import org.exoplatform.services.organization.User;
 
+
 import java.util.List;
 
 /**
@@ -44,14 +45,15 @@
       Membership m = mHandler.findMembershipByUserGroupAndType(userName, "/" + groupName1, membershipType);
       assertNotNull(mHandler.findMembership(m.getId()));
 
-      // try to find not existed membership. We are supposed to get null instead of Exception
+      // try to find not existed membership. We are supposed to get Exception
       try
       {
          assertNull(mHandler.findMembership("not-existed-id"));
+         fail("Exception should be thrown");
       }
       catch (Exception e)
       {
-         fail("Exception should not be thrown");
+         
       }
    }
 
@@ -104,8 +106,12 @@
       Group g = gHandler.findGroupById("/platform/users");
       assertEquals(mHandler.findMembershipsByGroup(g).size(), 4);
 
+      // try to find for non-existing group
       g = gHandler.createGroupInstance();
       g.setGroupName(groupName1);
+      gHandler.addChild(null, g, false);
+      assertEquals(g.getId(), gHandler.findGroupById("/" + groupName1).getId());
+      g = gHandler.removeGroup(g, false);
       assertEquals(mHandler.findMembershipsByGroup(g).size(), 0);
 
    }
@@ -148,8 +154,12 @@
       {
       }
 
+      // try to find for non-existing group
       g = gHandler.createGroupInstance();
       g.setGroupName(groupName1);
+      gHandler.addChild(null, g, false);
+      assertEquals(g.getId(), gHandler.findGroupById("/" + groupName1).getId());
+      g = gHandler.removeGroup(g, false);
       assertEquals(mHandler.findMembershipsByGroup(g).size(), 0);
 
    }

Modified: core/trunk/exo.core.component.organization.tests/src/main/java/org/exoplatform/services/tck/organization/TestUserHandler.java
===================================================================
--- core/trunk/exo.core.component.organization.tests/src/main/java/org/exoplatform/services/tck/organization/TestUserHandler.java	2011-11-02 10:59:39 UTC (rev 5147)
+++ core/trunk/exo.core.component.organization.tests/src/main/java/org/exoplatform/services/tck/organization/TestUserHandler.java	2011-11-02 12:45:26 UTC (rev 5148)
@@ -132,27 +132,32 @@
       query.setUserName("tolik");
       assertEquals(uHandler.findUsersByQuery(query).getSize(), 1);
 
-      calc = Calendar.getInstance();
-      calc.set(Calendar.YEAR, calc.get(Calendar.YEAR) + 1);
+      String skipDateTests = System.getProperty("orgservice.test.configuration.skipDateTests");
+      if (!"true".equals(skipDateTests))
+      {
+         calc = Calendar.getInstance();
+         calc.set(Calendar.YEAR, calc.get(Calendar.YEAR) + 1);
 
-      query = new Query();
-      query.setFromLoginDate(calc.getTime());
-      assertEquals(uHandler.findUsersByQuery(query).getSize(), 0);
+         query = new Query();
+         query.setFromLoginDate(calc.getTime());
+         assertEquals(uHandler.findUsersByQuery(query).getSize(), 0);
 
-      calc = Calendar.getInstance();
-      calc.set(Calendar.YEAR, calc.get(Calendar.YEAR) - 1);
+         calc = Calendar.getInstance();
+         calc.set(Calendar.YEAR, calc.get(Calendar.YEAR) - 1);
 
-      query = new Query();
-      query.setToLoginDate(calc.getTime());
-      assertEquals(uHandler.findUsersByQuery(query).getSize(), 0);
+         query = new Query();
+         query.setToLoginDate(calc.getTime());
+         assertEquals(uHandler.findUsersByQuery(query).getSize(), 0);
 
-      calc = Calendar.getInstance();
-      calc.set(Calendar.YEAR, calc.get(Calendar.YEAR) + 1);
+         calc = Calendar.getInstance();
+         calc.set(Calendar.YEAR, calc.get(Calendar.YEAR) + 1);
 
-      query = new Query();
-      query.setToLoginDate(calc.getTime());
-      query.setUserName("tolik");
-      assertEquals(uHandler.findUsersByQuery(query).getSize(), 1);
+         query = new Query();
+         query.setToLoginDate(calc.getTime());
+         query.setUserName("tolik");
+         assertEquals(uHandler.findUsersByQuery(query).getSize(), 1);
+
+      }
    }
 
    /**
@@ -216,24 +221,29 @@
       calc = Calendar.getInstance();
       calc.set(Calendar.YEAR, calc.get(Calendar.YEAR) + 1);
 
-      query = new Query();
-      query.setFromLoginDate(calc.getTime());
-      assertEquals(uHandler.findUsersByQuery(query).getSize(), 0);
+      String skipDateTests = System.getProperty("orgservice.test.configuration.skipDateTests");
+      if (!"true".equals(skipDateTests))
+      {
+         query = new Query();
+         query.setFromLoginDate(calc.getTime());
+         assertEquals(uHandler.findUsersByQuery(query).getSize(), 0);
 
-      calc = Calendar.getInstance();
-      calc.set(Calendar.YEAR, calc.get(Calendar.YEAR) - 1);
+         calc = Calendar.getInstance();
+         calc.set(Calendar.YEAR, calc.get(Calendar.YEAR) - 1);
 
-      query = new Query();
-      query.setToLoginDate(calc.getTime());
-      assertEquals(uHandler.findUsersByQuery(query).getSize(), 0);
+         query = new Query();
+         query.setToLoginDate(calc.getTime());
+         assertEquals(uHandler.findUsersByQuery(query).getSize(), 0);
 
-      calc = Calendar.getInstance();
-      calc.set(Calendar.YEAR, calc.get(Calendar.YEAR) + 1);
+         calc = Calendar.getInstance();
+         calc.set(Calendar.YEAR, calc.get(Calendar.YEAR) + 1);
 
-      query = new Query();
-      query.setToLoginDate(calc.getTime());
-      query.setUserName("tolik");
-      assertEquals(uHandler.findUsersByQuery(query).getSize(), 1);
+         query = new Query();
+         query.setToLoginDate(calc.getTime());
+         query.setUserName("tolik");
+         assertEquals(uHandler.findUsersByQuery(query).getSize(), 1);
+      }
+
    }
 
    /**



More information about the exo-jcr-commits mailing list