exo-jcr SVN: r5149 - in core/trunk: exo.core.component.organization.ldap and 1 other directories.
by do-not-reply@jboss.org
Author: tolusha
Date: 2011-11-02 11:03:01 -0400 (Wed, 02 Nov 2011)
New Revision: 5149
Removed:
core/trunk/exo.core.component.organization.ldap/src/test/java/org/exoplatform/services/organization/TestOrganizationService.java
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.ldap/pom.xml
Log:
EXOJCR-1609: revert changes about object cloning
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 12:45:26 UTC (rev 5148)
+++ core/trunk/exo.core.component.organization.api/src/main/java/org/exoplatform/services/organization/impl/GroupImpl.java 2011-11-02 15:03:01 UTC (rev 5149)
@@ -30,7 +30,7 @@
/**
* @hibernate.class table="EXO_GROUP"
*/
-public class GroupImpl implements Group, Cloneable
+public class GroupImpl implements Group
{
private String id;
@@ -144,19 +144,4 @@
{
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 12:45:26 UTC (rev 5148)
+++ core/trunk/exo.core.component.organization.api/src/main/java/org/exoplatform/services/organization/impl/MembershipImpl.java 2011-11-02 15:03:01 UTC (rev 5149)
@@ -23,7 +23,7 @@
/**
* @hibernate.class table="EXO_MEMBERSHIP"
*/
-public class MembershipImpl implements Membership, Cloneable
+public class MembershipImpl implements Membership
{
private String id = null;
@@ -97,18 +97,4 @@
{
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 12:45:26 UTC (rev 5148)
+++ core/trunk/exo.core.component.organization.api/src/main/java/org/exoplatform/services/organization/impl/MembershipTypeImpl.java 2011-11-02 15:03:01 UTC (rev 5149)
@@ -28,7 +28,7 @@
*
* @hibernate.class table="EXO_MEMBERSHIP_TYPE"
*/
-public class MembershipTypeImpl implements MembershipType, Cloneable
+public class MembershipTypeImpl implements MembershipType
{
private String name;
@@ -117,15 +117,4 @@
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 12:45:26 UTC (rev 5148)
+++ core/trunk/exo.core.component.organization.api/src/main/java/org/exoplatform/services/organization/impl/UserImpl.java 2011-11-02 15:03:01 UTC (rev 5149)
@@ -25,7 +25,7 @@
/**
* @hibernate.class table="EXO_USER"
*/
-public class UserImpl implements User, Cloneable
+public class UserImpl implements User
{
private String id = null;
@@ -185,23 +185,4 @@
{
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 12:45:26 UTC (rev 5148)
+++ core/trunk/exo.core.component.organization.api/src/main/java/org/exoplatform/services/organization/impl/UserProfileImpl.java 2011-11-02 15:03:01 UTC (rev 5149)
@@ -27,7 +27,7 @@
* Created by The eXo Platform SAS Author : Mestrallet Benjamin
* benjmestrallet(a)users.sourceforge.net Date: Aug 21, 2003 Time: 3:22:54 PM
*/
-public class UserProfileImpl implements UserProfile, Cloneable
+public class UserProfileImpl implements UserProfile
{
private String userName;
@@ -85,12 +85,4 @@
{
return attributes;
}
-
- /**
- * {@inheritDoc}
- */
- public Object clone()
- {
- return new UserProfileImpl(userName, attributes);
- }
}
Modified: core/trunk/exo.core.component.organization.ldap/pom.xml
===================================================================
--- core/trunk/exo.core.component.organization.ldap/pom.xml 2011-11-02 12:45:26 UTC (rev 5148)
+++ core/trunk/exo.core.component.organization.ldap/pom.xml 2011-11-02 15:03:01 UTC (rev 5149)
@@ -177,13 +177,16 @@
</includes>
<excludes>
<!--
+ Excluded as there some hibernate cache issues on pre-, postoperations
+ (e.g. preDelete, postDelete, etc.)
+ -->
+
+ <exclude>org/exoplatform/services/tck/organization/TestMembershipTypeEventListener.java</exclude>
+
+ <!--
Excluded, as this class has no tests to be run
-->
<exclude>**/AbstractOrganizationServiceTest.java</exclude>
- <!--
- Not a unit test.
- -->
- <exclude>**/TestOrganizationService.java</exclude>
</excludes>
</configuration>
</plugin>
Deleted: core/trunk/exo.core.component.organization.ldap/src/test/java/org/exoplatform/services/organization/TestOrganizationService.java
===================================================================
--- core/trunk/exo.core.component.organization.ldap/src/test/java/org/exoplatform/services/organization/TestOrganizationService.java 2011-11-02 12:45:26 UTC (rev 5148)
+++ core/trunk/exo.core.component.organization.ldap/src/test/java/org/exoplatform/services/organization/TestOrganizationService.java 2011-11-02 15:03:01 UTC (rev 5149)
@@ -1,422 +0,0 @@
-/*
- * 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 junit.framework.TestCase;
-
-import org.exoplatform.commons.utils.PageList;
-import org.exoplatform.container.PortalContainer;
-
-import java.util.Collection;
-import java.util.List;
-
-/**
- * Created by The eXo Platform SAS Author : Hoa Pham
- * hoapham@exoplatform.com,phamvuxuanhoa(a)yahoo.com Oct 27, 2005
- */
-
-@SuppressWarnings("unchecked")
-public class TestOrganizationService extends TestCase
-{
-
- 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 TestOrganizationService(String s)
- {
- super(s);
- }
-
- public void setUp() throws Exception
- {
- if (!runtest)
- return;
- PortalContainer manager = PortalContainer.getInstance();
- service_ = (OrganizationService)manager.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);
- System.err.println("##############################################################");
- }
-
- 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());
-
- // List list = users.getPage(1);
- // for (Object ele : list) {
- // User u = (User) ele;
- // System.out.println(u.getUserName() + " and " + u.getEmail());
- // }
- 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
- {
- int bmn = mtHandler_.findMembershipTypes().size();
- if (!runtest)
- return;
-
- 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);
- 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(a)exoportal.org");
- userHandler_.createUser(user, true);
- return user;
- }
-}
12 years, 6 months
exo-jcr SVN: r5148 - in core/trunk: exo.core.component.organization.jdbc/src/main/java/org/exoplatform/services/organization/hibernate and 5 other directories.
by do-not-reply@jboss.org
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(a)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@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@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@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@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);
+ }
+
}
/**
12 years, 6 months
exo-jcr SVN: r5147 - in jcr/trunk: applications/exo.jcr.applications.jetty and 1 other directories.
by do-not-reply@jboss.org
Author: zavizionov
Date: 2011-11-02 06:59:39 -0400 (Wed, 02 Nov 2011)
New Revision: 5147
Modified:
jcr/trunk/applications/exo.jcr.applications.jetty/pom.xml
jcr/trunk/applications/exo.jcr.applications.tomcat/pom.xml
jcr/trunk/pom.xml
Log:
EXOJCR-1495 TESTING: Image does not uploading
Modified: jcr/trunk/applications/exo.jcr.applications.jetty/pom.xml
===================================================================
--- jcr/trunk/applications/exo.jcr.applications.jetty/pom.xml 2011-11-02 10:49:50 UTC (rev 5146)
+++ jcr/trunk/applications/exo.jcr.applications.jetty/pom.xml 2011-11-02 10:59:39 UTC (rev 5147)
@@ -47,6 +47,11 @@
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</dependency>
+ <dependency>
+ <groupId>commons-io</groupId>
+ <artifactId>commons-io</artifactId>
+ <scope>runtime</scope>
+ </dependency>
</dependencies>
Modified: jcr/trunk/applications/exo.jcr.applications.tomcat/pom.xml
===================================================================
--- jcr/trunk/applications/exo.jcr.applications.tomcat/pom.xml 2011-11-02 10:49:50 UTC (rev 5146)
+++ jcr/trunk/applications/exo.jcr.applications.tomcat/pom.xml 2011-11-02 10:59:39 UTC (rev 5147)
@@ -38,13 +38,11 @@
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</dependency>
-
<dependency>
<groupId>org.hsqldb</groupId>
<artifactId>hsqldb</artifactId>
<scope>runtime</scope>
</dependency>
-
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
Modified: jcr/trunk/pom.xml
===================================================================
--- jcr/trunk/pom.xml 2011-11-02 10:49:50 UTC (rev 5146)
+++ jcr/trunk/pom.xml 2011-11-02 10:59:39 UTC (rev 5147)
@@ -397,7 +397,7 @@
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
- <version>1.3</version>
+ <version>1.3.2</version>
</dependency>
</dependencies>
</dependencyManagement>
12 years, 6 months
exo-jcr SVN: r5146 - in jcr/branches/1.12.x: exo.jcr.component.webdav/src/main/resources/xslt and 2 other directories.
by do-not-reply@jboss.org
Author: trang_vu
Date: 2011-11-02 06:49:50 -0400 (Wed, 02 Nov 2011)
New Revision: 5146
Added:
jcr/branches/1.12.x/patch/1.12.11-GA/JCR-1680/readme.txt
Modified:
jcr/branches/1.12.x/exo.jcr.component.webdav/src/main/java/org/exoplatform/services/jcr/webdav/resource/CollectionResource.java
jcr/branches/1.12.x/exo.jcr.component.webdav/src/main/resources/xslt/get-method.xsl
jcr/branches/1.12.x/exo.jcr.component.webdav/src/test/java/org/exoplatform/services/jcr/webdav/command/TestGet.java
Log:
JCR-1680: webdav bug when clicking go back link in a folder whose name contains a space
Fix description
* Changed the way we determine the parent href for current collection.
Now we pass special attribute for it to the streaming output for the xslt insted of using the address of the current collection with the last element being cut off.
Modified: jcr/branches/1.12.x/exo.jcr.component.webdav/src/main/java/org/exoplatform/services/jcr/webdav/resource/CollectionResource.java
===================================================================
--- jcr/branches/1.12.x/exo.jcr.component.webdav/src/main/java/org/exoplatform/services/jcr/webdav/resource/CollectionResource.java 2011-11-02 10:19:20 UTC (rev 5145)
+++ jcr/branches/1.12.x/exo.jcr.component.webdav/src/main/java/org/exoplatform/services/jcr/webdav/resource/CollectionResource.java 2011-11-02 10:49:50 UTC (rev 5146)
@@ -86,6 +86,11 @@
final String XML_HREF = "xlink:href";
/**
+ * XML parent href constant.
+ */
+ final static String XML_PARENT_HREF = "xlink:parent-href";
+
+ /**
* XML namespace prefix.
*/
final String PREFIX_XMLNS = "xmlns:sv";
@@ -418,6 +423,20 @@
writer.writeAttribute(XLINK_XMLNS, XLINK_LINK);
writer.writeAttribute(XML_NAME, node.getName());
writer.writeAttribute(XML_HREF, rootHref + TextUtil.escape(node.getPath(), '%', true));
+
+
+ if (!node.getPath().equals("/"))
+ {
+ // this is added to fix EXOJCR-1379
+ // XSLT string operations with actual node href, (which are used during XSLT transformation
+ // to receive parent href) produce wrong parent-href if node path containes non-latin symbols,
+ // so instead we simply add one more attribute which already contains parent-href
+ // as result: no XLST processor string manipulation is needed
+ String nodeParentHref = rootHref + TextUtil.escape(node.getParent().getPath(), '%', true);
+ writer.writeAttribute(XML_PARENT_HREF, nodeParentHref);
+ }
+
+
// add properties
for (PropertyIterator pi = node.getProperties(); pi.hasNext();)
{
Modified: jcr/branches/1.12.x/exo.jcr.component.webdav/src/main/resources/xslt/get-method.xsl
===================================================================
--- jcr/branches/1.12.x/exo.jcr.component.webdav/src/main/resources/xslt/get-method.xsl 2011-11-02 10:19:20 UTC (rev 5145)
+++ jcr/branches/1.12.x/exo.jcr.component.webdav/src/main/resources/xslt/get-method.xsl 2011-11-02 10:49:50 UTC (rev 5146)
@@ -26,7 +26,7 @@
<!-- Parent node link -->
<a>
<xsl:attribute name="href">
- <xsl:value-of select="substring(./@xlink:href, 1, string-length(./@xlink:href) - string-length(./@sv:name))" />
+ <xsl:value-of select="./@xlink:parent-href" />
</xsl:attribute>
<xsl:if test="$folder-icon-path!=''">
<img src="{$folder-icon-path}" alt="" />
Modified: jcr/branches/1.12.x/exo.jcr.component.webdav/src/test/java/org/exoplatform/services/jcr/webdav/command/TestGet.java
===================================================================
--- jcr/branches/1.12.x/exo.jcr.component.webdav/src/test/java/org/exoplatform/services/jcr/webdav/command/TestGet.java 2011-11-02 10:19:20 UTC (rev 5145)
+++ jcr/branches/1.12.x/exo.jcr.component.webdav/src/test/java/org/exoplatform/services/jcr/webdav/command/TestGet.java 2011-11-02 10:49:50 UTC (rev 5146)
@@ -39,6 +39,7 @@
import java.io.InputStreamReader;
import java.io.Reader;
import java.io.StringWriter;
+import java.net.URLDecoder;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Locale;
@@ -194,6 +195,64 @@
}
+ /**
+ * We test for parent href to be contained in response.
+ * We GET a collection and receive an html. Html should contain
+ * a href to parent collection of requested collection.
+ * @throws Exception
+ */
+ public void testParentHrefForGetColRequest() throws Exception
+ {
+ String folderOne = TestUtils.getFolderName();
+ String folderTwo = folderOne + TestUtils.getFolderName();
+
+ // add collections
+ TestUtils.addFolder(session, folderOne, defaultFolderNodeType, "");
+ TestUtils.addFolder(session, folderTwo, defaultFolderNodeType, "");
+
+ // get a sub-collection
+ ContainerResponse response = service(WebDAVMethods.GET, getPathWS() + folderTwo, "", null, null);
+ assertEquals(HTTPStatus.OK, response.getStatus());
+
+ // serialize response entity to string
+ XSLTStreamingOutput XSLTout = (XSLTStreamingOutput)response.getEntity();
+ ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
+ XSLTout.write(byteOut);
+
+ assertTrue("Response should contain parent collection href", byteOut.toString().contains(folderOne));
+ }
+
+ /**
+ * We test for parent href to be contained in response. We GET a collection,
+ * which has non latin letters in its name, and receive an html like response.
+ * Response should contain href to parent collection of requested collection.
+ * Details can be found here: https://issues.jboss.org/browse/EXOJCR-1379
+ * @throws Exception
+ */
+ public void testParentHrefForGetColWithNonLatinNameRequest() throws Exception
+ {
+ // "%40" corresponds to '@' symbol
+ String folderOne = TestUtils.getFolderName() + "%40";
+ String folderTwo = folderOne + TestUtils.getFolderName() + "%40";
+
+ ContainerResponse response;
+
+ //add collections
+ TestUtils.addFolder(session, URLDecoder.decode(folderOne, "UTF-8"), defaultFolderNodeType, "");
+ TestUtils.addFolder(session, URLDecoder.decode(folderTwo, "UTF-8"), defaultFolderNodeType, "");
+
+ //get a sub-collection
+ response = service(WebDAVMethods.GET, getPathWS() + folderTwo, "", null, null);
+ assertEquals(HTTPStatus.OK, response.getStatus());
+
+ // serialize response entity to string
+ XSLTStreamingOutput XSLTout = (XSLTStreamingOutput)response.getEntity();
+ ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
+ XSLTout.write(byteOut);
+
+ assertTrue("Response should contain parent collection href", byteOut.toString().contains(folderOne));
+ }
+
@Override
protected String getRepositoryName()
{
Added: jcr/branches/1.12.x/patch/1.12.11-GA/JCR-1680/readme.txt
===================================================================
--- jcr/branches/1.12.x/patch/1.12.11-GA/JCR-1680/readme.txt (rev 0)
+++ jcr/branches/1.12.x/patch/1.12.11-GA/JCR-1680/readme.txt 2011-11-02 10:49:50 UTC (rev 5146)
@@ -0,0 +1,78 @@
+Summary
+
+ * Status: webdav bug when clicking go back link in a folder whose name contains a space
+ * CCP Issue: CCP-1123, Product Jira Issue: JCR-1680.
+ * Complexity: Low
+
+The Proposal
+Problem description
+
+What is the problem to fix?
+How to reproduce on PLF 3.0.5:
+
+1)Login
+2)Type this URL in your browser http://localhost:8080/portal/rest/jcr/repository/collaboration/sites content/live/acme/web contents
+3)Click on the ".." link
+You'll be redirected to an erroneous link http://localhost:8080/portal/rest/jcr/repository/collaboration/sites content/live/acme/we
+rather than being redirected to the parent folder.You'll get also an error message "Can't find path: /sites content/live/acme/we"
+This happens with all folders whose name contains space character such as "web contents".
+
+Fix description
+
+How is the problem fixed?
+
+ * Changed the way we determine the parent href for current collection.
+ Now we pass special attribute for it to the streaming output for the xslt insted of using the address of the current collection with the last element being cut off.
+
+Patch file: JCR-1680.patch
+
+Tests to perform
+
+Reproduction test
+
+ * Reproduced on PLF 3.0.5 while browsing collections which has 'space' character in the name
+
+Tests performed at DevLevel
+
+ * Reproduced on JCR WebDAV component. Added unit tests which covers this issue.
+
+Tests performed at QA/Support Level
+
+ *
+
+Documentation changes
+
+Documentation changes:
+
+ * None
+
+Configuration changes
+
+Configuration changes:
+
+ * None
+
+Will previous configuration continue to work?
+
+ * Yes
+
+Risks and impacts
+
+Can this bug fix have any side effects on current client projects?
+
+ * No
+
+Is there a performance risk/cost?
+
+ * No
+
+Validation (PM/Support/QA)
+
+PM Comment
+* Patch validated
+
+Support Comment
+* Patch validated
+
+QA Feedbacks
+*
12 years, 6 months
exo-jcr SVN: r5145 - in jcr/trunk: applications and 1 other directories.
by do-not-reply@jboss.org
Author: zavizionov
Date: 2011-11-02 06:19:20 -0400 (Wed, 02 Nov 2011)
New Revision: 5145
Modified:
jcr/trunk/applications/exo.jcr.applications.tomcat/pom.xml
jcr/trunk/applications/pom.xml
jcr/trunk/pom.xml
Log:
EXOJCR-1495 TESTING: Image does not uploading
Modified: jcr/trunk/applications/exo.jcr.applications.tomcat/pom.xml
===================================================================
--- jcr/trunk/applications/exo.jcr.applications.tomcat/pom.xml 2011-11-02 09:19:38 UTC (rev 5144)
+++ jcr/trunk/applications/exo.jcr.applications.tomcat/pom.xml 2011-11-02 10:19:20 UTC (rev 5145)
@@ -44,6 +44,12 @@
<artifactId>hsqldb</artifactId>
<scope>runtime</scope>
</dependency>
+
+ <dependency>
+ <groupId>commons-io</groupId>
+ <artifactId>commons-io</artifactId>
+ <scope>runtime</scope>
+ </dependency>
</dependencies>
<properties>
Modified: jcr/trunk/applications/pom.xml
===================================================================
--- jcr/trunk/applications/pom.xml 2011-11-02 09:19:38 UTC (rev 5144)
+++ jcr/trunk/applications/pom.xml 2011-11-02 10:19:20 UTC (rev 5145)
@@ -28,7 +28,7 @@
<modelVersion>4.0.0</modelVersion>
<artifactId>jcr-applications-parent</artifactId>
<version>1.14.4-GA-SNAPSHOT</version>
-
+
<name>eXo JCR :: Applications :: Reactor</name>
<packaging>pom</packaging>
<description>eXo JCR Applications Reactor</description>
@@ -38,10 +38,10 @@
<module>exo.jcr.applications.backupconsole</module>
<module>exo.jcr.applications.backupconsole.dist</module>
<module>exo.jcr.applications.browser</module>
- <module>exo.jcr.applications.config</module>
+ <module>exo.jcr.applications.config</module>
<module>exo.jcr.applications.fckeditor</module>
<module>exo.jcr.applications.rest</module>
- <module>exo.jcr.ear</module>
+ <module>exo.jcr.ear</module>
<module>exo.jcr.applications.jboss</module>
<module>exo.jcr.applications.jonas</module>
<module>exo.jcr.applications.tomcat</module>
Modified: jcr/trunk/pom.xml
===================================================================
--- jcr/trunk/pom.xml 2011-11-02 09:19:38 UTC (rev 5144)
+++ jcr/trunk/pom.xml 2011-11-02 10:19:20 UTC (rev 5145)
@@ -394,6 +394,11 @@
<artifactId>infinispan-cachestore-jdbc</artifactId>
<version>5.0.1.FINAL</version>
</dependency>
+ <dependency>
+ <groupId>commons-io</groupId>
+ <artifactId>commons-io</artifactId>
+ <version>1.3</version>
+ </dependency>
</dependencies>
</dependencyManagement>
<dependencies>
12 years, 6 months
exo-jcr SVN: r5144 - in jcr/branches/1.12.x: exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/xpath and 3 other directories.
by do-not-reply@jboss.org
Author: trang_vu
Date: 2011-11-02 05:19:38 -0400 (Wed, 02 Nov 2011)
New Revision: 5144
Added:
jcr/branches/1.12.x/patch/1.12.11-GA/JCR-1663/readme.txt
Modified:
jcr/branches/1.12.x/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/sql/QueryFormat.java
jcr/branches/1.12.x/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/xpath/QueryFormat.java
jcr/branches/1.12.x/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/util/JCRDateFormat.java
jcr/branches/1.12.x/exo.jcr.component.webdav/src/main/java/org/exoplatform/services/jcr/webdav/resource/HierarchicalProperty.java
Log:
JCR-1663: Contention on JCRDateFormat on heavy load
Fix description
* Avoided usage of method java.util.TimeZone.getTimeZone(String ID), now we use less synchronized method implemented in kernel project instead.
Modified: jcr/branches/1.12.x/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/sql/QueryFormat.java
===================================================================
--- jcr/branches/1.12.x/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/sql/QueryFormat.java 2011-11-02 07:54:28 UTC (rev 5143)
+++ jcr/branches/1.12.x/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/sql/QueryFormat.java 2011-11-02 09:19:38 UTC (rev 5144)
@@ -16,17 +16,8 @@
*/
package org.exoplatform.services.jcr.impl.core.query.sql;
-import java.util.ArrayList;
-import java.util.Calendar;
-import java.util.Iterator;
-import java.util.List;
-import java.util.TimeZone;
-
-import javax.jcr.NamespaceException;
-import javax.jcr.RepositoryException;
-import javax.jcr.query.InvalidQueryException;
-
import org.exoplatform.commons.utils.ISO8601;
+import org.exoplatform.commons.utils.Tools;
import org.exoplatform.services.jcr.datamodel.InternalQName;
import org.exoplatform.services.jcr.datamodel.QPath;
import org.exoplatform.services.jcr.impl.Constants;
@@ -48,7 +39,16 @@
import org.exoplatform.services.jcr.impl.core.query.RelationQueryNode;
import org.exoplatform.services.jcr.impl.core.query.TextsearchQueryNode;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Iterator;
+import java.util.List;
+import javax.jcr.NamespaceException;
+import javax.jcr.RepositoryException;
+import javax.jcr.query.InvalidQueryException;
+
+
/**
* Implements the query node tree serialization into a String.
*/
@@ -553,7 +553,7 @@
} else if (node.getValueType() == TYPE_STRING) {
b.append("'").append(node.getStringValue().replaceAll("'", "''")).append("'");
} else if (node.getValueType() == TYPE_DATE || node.getValueType() == TYPE_TIMESTAMP) {
- Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
+ Calendar cal = Calendar.getInstance(Tools.getTimeZone("UTC"));
cal.setTime(node.getDateValue());
b.append("TIMESTAMP '").append(ISO8601.format(cal)).append("'");
} else {
Modified: jcr/branches/1.12.x/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/xpath/QueryFormat.java
===================================================================
--- jcr/branches/1.12.x/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/xpath/QueryFormat.java 2011-11-02 07:54:28 UTC (rev 5143)
+++ jcr/branches/1.12.x/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/xpath/QueryFormat.java 2011-11-02 09:19:38 UTC (rev 5144)
@@ -16,16 +16,8 @@
*/
package org.exoplatform.services.jcr.impl.core.query.xpath;
-import java.util.ArrayList;
-import java.util.Calendar;
-import java.util.List;
-import java.util.TimeZone;
-
-import javax.jcr.NamespaceException;
-import javax.jcr.RepositoryException;
-import javax.jcr.query.InvalidQueryException;
-
import org.exoplatform.commons.utils.ISO8601;
+import org.exoplatform.commons.utils.Tools;
import org.exoplatform.services.jcr.datamodel.InternalQName;
import org.exoplatform.services.jcr.datamodel.QPath;
import org.exoplatform.services.jcr.datamodel.QPathEntry;
@@ -47,9 +39,16 @@
import org.exoplatform.services.jcr.impl.core.query.QueryRootNode;
import org.exoplatform.services.jcr.impl.core.query.RelationQueryNode;
import org.exoplatform.services.jcr.impl.core.query.TextsearchQueryNode;
-
import org.exoplatform.services.jcr.impl.util.ISO9075;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.List;
+
+import javax.jcr.NamespaceException;
+import javax.jcr.RepositoryException;
+import javax.jcr.query.InvalidQueryException;
+
/**
* Implements the query node tree serialization into a String.
*/
@@ -510,7 +509,7 @@
} else if (node.getValueType() == TYPE_STRING) {
b.append("'").append(node.getStringValue().replaceAll("'", "''")).append("'");
} else if (node.getValueType() == TYPE_DATE || node.getValueType() == TYPE_TIMESTAMP) {
- Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
+ Calendar cal = Calendar.getInstance(Tools.getTimeZone("UTC"));
cal.setTime(node.getDateValue());
b.append(resolver.createJCRName(XPathQueryBuilder.XS_DATETIME).getAsString());
b.append("('").append(ISO8601.format(cal)).append("')");
Modified: jcr/branches/1.12.x/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/util/JCRDateFormat.java
===================================================================
--- jcr/branches/1.12.x/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/util/JCRDateFormat.java 2011-11-02 07:54:28 UTC (rev 5143)
+++ jcr/branches/1.12.x/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/util/JCRDateFormat.java 2011-11-02 09:19:38 UTC (rev 5144)
@@ -19,12 +19,12 @@
package org.exoplatform.services.jcr.impl.util;
import org.exoplatform.commons.utils.ISO8601;
+import org.exoplatform.commons.utils.Tools;
import org.exoplatform.services.log.ExoLogger;
import org.exoplatform.services.log.Log;
import java.text.ParseException;
import java.util.Calendar;
-import java.util.TimeZone;
import javax.jcr.ValueFormatException;
@@ -159,7 +159,7 @@
isoCalendar.setFirstDayOfWeek(Integer.parseInt(calendarFields[1]));
isoCalendar.setMinimalDaysInFirstWeek(Integer.parseInt(calendarFields[2]));
- isoCalendar.setTimeZone(TimeZone.getTimeZone(calendarFields[3]));
+ isoCalendar.setTimeZone(Tools.getTimeZone(calendarFields[3]));
}
catch (Exception e)
{
Modified: jcr/branches/1.12.x/exo.jcr.component.webdav/src/main/java/org/exoplatform/services/jcr/webdav/resource/HierarchicalProperty.java
===================================================================
--- jcr/branches/1.12.x/exo.jcr.component.webdav/src/main/java/org/exoplatform/services/jcr/webdav/resource/HierarchicalProperty.java 2011-11-02 07:54:28 UTC (rev 5143)
+++ jcr/branches/1.12.x/exo.jcr.component.webdav/src/main/java/org/exoplatform/services/jcr/webdav/resource/HierarchicalProperty.java 2011-11-02 09:19:38 UTC (rev 5144)
@@ -18,13 +18,14 @@
*/
package org.exoplatform.services.jcr.webdav.resource;
+import org.exoplatform.commons.utils.Tools;
+
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
-import java.util.TimeZone;
import javax.xml.namespace.QName;
@@ -104,7 +105,7 @@
{
this(name, null);
SimpleDateFormat dateFormat = new SimpleDateFormat(formatPattern, Locale.ENGLISH);
- dateFormat.setTimeZone(TimeZone.getTimeZone("GMT"));
+ dateFormat.setTimeZone(Tools.getTimeZone("GMT"));
this.value = dateFormat.format(dateValue.getTime());
}
Added: jcr/branches/1.12.x/patch/1.12.11-GA/JCR-1663/readme.txt
===================================================================
--- jcr/branches/1.12.x/patch/1.12.11-GA/JCR-1663/readme.txt (rev 0)
+++ jcr/branches/1.12.x/patch/1.12.11-GA/JCR-1663/readme.txt 2011-11-02 09:19:38 UTC (rev 5144)
@@ -0,0 +1,72 @@
+Summary
+
+ * Status: Contention on JCRDateFormat on heavy load
+ * CCP Issue: CCP-1118, Product Jira Issue: JCR-1663.
+ * Complexity: low
+
+The Proposal
+Problem description
+
+What is the problem to fix?
+When we activate the Concurrent GC during our benchmark, we have very poor performances and we can observe that a huge amount of the http thread are waiting on the same piece of code in org.exoplatform.services.jcr.impl.util.JCRDateFormat.deserialize(String serString) due to the use of the synchronized method java.util.TimeZone.getTimeZone(String ID)
+
+Expected: an alternative to avoid/limit the usage of this synchronized method.
+
+Fix description
+
+How is the problem fixed?
+
+ * Avoided usage of method java.util.TimeZone.getTimeZone(String ID), now we use less synchronized method implemented in kernel project instead.
+
+Patch file: JCR-1663.patch
+
+Tests to perform
+
+Reproduction test
+
+ * Activate the Concurrent GC during run of benchmark
+
+Tests performed at DevLevel
+
+ * Functional testing for all projects (kernel, core, ws, jcr)
+
+Tests performed at QA/Support Level
+*
+
+Documentation changes
+
+Documentation changes:
+
+ * None
+
+Configuration changes
+
+Configuration changes:
+
+ * None
+
+Will previous configuration continue to work?
+
+ * Yes
+
+Risks and impacts
+
+Can this bug fix have any side effects on current client projects?
+
+ * No
+
+Is there a performance risk/cost?
+
+ * No
+
+Validation (PM/Support/QA)
+
+PM Comment
+* PM validated
+
+Support Comment
+*
+
+QA Feedbacks
+*
+
12 years, 6 months
exo-jcr SVN: r5143 - in ws/branches/2.1.x: exo.ws.rest.core/src/main/java/org/exoplatform/services/rest/impl/header and 1 other directories.
by do-not-reply@jboss.org
Author: trang_vu
Date: 2011-11-02 03:54:28 -0400 (Wed, 02 Nov 2011)
New Revision: 5143
Added:
ws/branches/2.1.x/patch/2.1.11-GA/WS-270/readme.txt
Modified:
ws/branches/2.1.x/exo.ws.commons/src/main/java/org/exoplatform/common/util/HierarchicalProperty.java
ws/branches/2.1.x/exo.ws.rest.core/src/main/java/org/exoplatform/services/rest/impl/header/HeaderHelper.java
Log:
WS-270: Replace TimeZone.getTimeZone with the util method from the kernel
Fix description
* Avoided usage of method java.util.TimeZone.getTimeZone(String ID), now we use less synchronized method implemented in kernel project instead.
Modified: ws/branches/2.1.x/exo.ws.commons/src/main/java/org/exoplatform/common/util/HierarchicalProperty.java
===================================================================
--- ws/branches/2.1.x/exo.ws.commons/src/main/java/org/exoplatform/common/util/HierarchicalProperty.java 2011-11-02 07:19:05 UTC (rev 5142)
+++ ws/branches/2.1.x/exo.ws.commons/src/main/java/org/exoplatform/common/util/HierarchicalProperty.java 2011-11-02 07:54:28 UTC (rev 5143)
@@ -18,13 +18,14 @@
*/
package org.exoplatform.common.util;
+import org.exoplatform.commons.utils.Tools;
+
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
-import java.util.TimeZone;
import javax.xml.namespace.QName;
@@ -103,7 +104,7 @@
{
this(name, null);
SimpleDateFormat dateFormat = new SimpleDateFormat(formatPattern, Locale.ENGLISH);
- dateFormat.setTimeZone(TimeZone.getTimeZone("GMT"));
+ dateFormat.setTimeZone(Tools.getTimeZone("GMT"));
this.value = dateFormat.format(dateValue.getTime());
}
Modified: ws/branches/2.1.x/exo.ws.rest.core/src/main/java/org/exoplatform/services/rest/impl/header/HeaderHelper.java
===================================================================
--- ws/branches/2.1.x/exo.ws.rest.core/src/main/java/org/exoplatform/services/rest/impl/header/HeaderHelper.java 2011-11-02 07:19:05 UTC (rev 5142)
+++ ws/branches/2.1.x/exo.ws.rest.core/src/main/java/org/exoplatform/services/rest/impl/header/HeaderHelper.java 2011-11-02 07:54:28 UTC (rev 5143)
@@ -18,6 +18,7 @@
*/
package org.exoplatform.services.rest.impl.header;
+import org.exoplatform.commons.utils.Tools;
import org.exoplatform.services.rest.header.QualityValue;
import java.text.ParseException;
@@ -443,7 +444,7 @@
l.add(new SimpleDateFormat(RFC_1123_DATE_FORMAT, Locale.US));
l.add(new SimpleDateFormat(RFC_1036_DATE_FORMAT, Locale.US));
l.add(new SimpleDateFormat(ANSI_C_DATE_FORMAT, Locale.US));
- TimeZone tz = TimeZone.getTimeZone("GMT");
+ TimeZone tz = Tools.getTimeZone("GMT");
l.get(0).setTimeZone(tz);
l.get(1).setTimeZone(tz);
l.get(2).setTimeZone(tz);
Added: ws/branches/2.1.x/patch/2.1.11-GA/WS-270/readme.txt
===================================================================
--- ws/branches/2.1.x/patch/2.1.11-GA/WS-270/readme.txt (rev 0)
+++ ws/branches/2.1.x/patch/2.1.11-GA/WS-270/readme.txt 2011-11-02 07:54:28 UTC (rev 5143)
@@ -0,0 +1,67 @@
+Summary
+
+ * Status: Replace TimeZone.getTimeZone with the util method from the kernel to have less contention
+ * CCP Issue: CCP-1118, Product Jira Issue: WS-270.
+ * Complexity: Low
+
+The Proposal
+Problem description
+
+What is the problem to fix?
+Under heavy load we realized that the method java.util.TimeZone.getTimeZone(String ID) becomes a bottleneck so it is necessary to use the alternative provided by the kernel to have less contention.
+
+Fix description
+
+How is the problem fixed?
+* Avoided usage of method java.util.TimeZone.getTimeZone(String ID), now we use less synchronized method implemented in kernel project instead.
+
+Patch file: WS-270.patch
+
+Tests to perform
+
+Reproduction test
+
+ * Activate the Concurrent GC during run of benchmark
+
+Tests performed at DevLevel
+
+ * Functional testing for all projects (kernel, core, ws, jcr)
+
+Tests performed at QA/Support Level
+*
+Documentation changes
+
+Documentation changes:
+
+ * No
+
+Configuration changes
+
+Configuration changes:
+
+ * No
+
+Will previous configuration continue to work?
+
+ * Yes
+
+Risks and impacts
+
+Can this bug fix have any side effects on current client projects?
+
+ * No
+
+Is there a performance risk/cost?
+
+ * No
+
+Validation (PM/Support/QA)
+
+PM Comment
+* Patch validated.
+
+Support Comment
+*
+
+QA Feedbacks
+*
12 years, 6 months
exo-jcr SVN: r5142 - core/trunk/exo.core.component.ldap/src/main/java/org/exoplatform/services/ldap/impl.
by do-not-reply@jboss.org
Author: tolusha
Date: 2011-11-02 03:19:05 -0400 (Wed, 02 Nov 2011)
New Revision: 5142
Modified:
core/trunk/exo.core.component.ldap/src/main/java/org/exoplatform/services/ldap/impl/LDAPServiceImpl.java
Log:
EXOJCR-1597: don't allow authentication with blank password
Modified: core/trunk/exo.core.component.ldap/src/main/java/org/exoplatform/services/ldap/impl/LDAPServiceImpl.java
===================================================================
--- core/trunk/exo.core.component.ldap/src/main/java/org/exoplatform/services/ldap/impl/LDAPServiceImpl.java 2011-11-02 07:12:52 UTC (rev 5141)
+++ core/trunk/exo.core.component.ldap/src/main/java/org/exoplatform/services/ldap/impl/LDAPServiceImpl.java 2011-11-02 07:19:05 UTC (rev 5142)
@@ -179,7 +179,9 @@
try
{
ctx = new InitialLdapContext(props, null);
- return true;
+
+ // anonymous user could be bind to AD but aren't able to pick up information
+ return (ctx.lookup(userDN) != null);
}
catch (NamingException e)
{
12 years, 6 months
exo-jcr SVN: r5141 - in kernel/branches/2.2.x: patch/2.2.11-GA/KER-178 and 1 other directory.
by do-not-reply@jboss.org
Author: trang_vu
Date: 2011-11-02 03:12:52 -0400 (Wed, 02 Nov 2011)
New Revision: 5141
Added:
kernel/branches/2.2.x/patch/2.2.11-GA/KER-178/readme.txt
Modified:
kernel/branches/2.2.x/exo.kernel.commons/src/main/java/org/exoplatform/commons/utils/ISO8601ASF.java
kernel/branches/2.2.x/exo.kernel.commons/src/main/java/org/exoplatform/commons/utils/Tools.java
Log:
KER-178: Provide a Util method to give an alternative to TimeZone.getTimeZone with less contention
Fix description
* Avoid the usage of method java.util.TimeZone.getTimeZone(String ID). We use now a less synchronized method implemented in kernel project instead.
Modified: kernel/branches/2.2.x/exo.kernel.commons/src/main/java/org/exoplatform/commons/utils/ISO8601ASF.java
===================================================================
--- kernel/branches/2.2.x/exo.kernel.commons/src/main/java/org/exoplatform/commons/utils/ISO8601ASF.java 2011-11-01 15:50:49 UTC (rev 5140)
+++ kernel/branches/2.2.x/exo.kernel.commons/src/main/java/org/exoplatform/commons/utils/ISO8601ASF.java 2011-11-02 07:12:52 UTC (rev 5141)
@@ -187,7 +187,7 @@
return null;
}
- TimeZone tz = TimeZone.getTimeZone(tzID);
+ TimeZone tz = Tools.getTimeZone(tzID);
// verify id of returned time zone (getTimeZone defaults to "GMT")
if (!tz.getID().equals(tzID))
{
Modified: kernel/branches/2.2.x/exo.kernel.commons/src/main/java/org/exoplatform/commons/utils/Tools.java
===================================================================
--- kernel/branches/2.2.x/exo.kernel.commons/src/main/java/org/exoplatform/commons/utils/Tools.java 2011-11-01 15:50:49 UTC (rev 5140)
+++ kernel/branches/2.2.x/exo.kernel.commons/src/main/java/org/exoplatform/commons/utils/Tools.java 2011-11-02 07:12:52 UTC (rev 5141)
@@ -23,6 +23,7 @@
import java.util.Map;
import java.util.Properties;
import java.util.Set;
+import java.util.TimeZone;
/**
* @author <a href="mailto:julien.viet@exoplatform.com">Julien Viet</a>
@@ -30,8 +31,12 @@
*/
public class Tools
{
-
/**
+ * All the time zones already registered
+ */
+ private static volatile Map<String, TimeZone> TIME_ZONES = new HashMap<String, TimeZone>();
+
+ /**
* Instantiates a {@link HashSet} object and fills it with the provided element array.
*
* @param elements the list of elements to add
@@ -155,4 +160,35 @@
String suffix = s.substring(s.length() - end.length());
return suffix.equalsIgnoreCase(end);
}
+
+ /**
+ * This method is similar to {@link TimeZone#getTimeZone(String)} with less contention
+ */
+ public static TimeZone getTimeZone(String ID)
+ {
+ if (ID == null)
+ {
+ throw new NullPointerException("ID of the timezone cannot be null");
+ }
+ if (ID.length() == 0)
+ {
+ throw new IllegalArgumentException("ID of the timezone cannot be empty");
+ }
+ TimeZone tz = TIME_ZONES.get(ID);
+ if (tz == null)
+ {
+ synchronized (TimeZone.class)
+ {
+ tz = TIME_ZONES.get(ID);
+ if (tz == null)
+ {
+ tz = TimeZone.getTimeZone(ID);
+ Map<String, TimeZone> tzs = new HashMap<String, TimeZone>(TIME_ZONES);
+ tzs.put(ID, tz);
+ TIME_ZONES = tzs;
+ }
+ }
+ }
+ return tz;
+ }
}
Added: kernel/branches/2.2.x/patch/2.2.11-GA/KER-178/readme.txt
===================================================================
--- kernel/branches/2.2.x/patch/2.2.11-GA/KER-178/readme.txt (rev 0)
+++ kernel/branches/2.2.x/patch/2.2.11-GA/KER-178/readme.txt 2011-11-02 07:12:52 UTC (rev 5141)
@@ -0,0 +1,63 @@
+Summary
+
+ * Status: Provide a Util method to give an alternative to TimeZone.getTimeZone with less contention
+ * CCP Issue: CCP-1118. Product Jira Issue: KER-178.
+ * Complexity: Low
+
+The Proposal
+Problem description
+
+What is the problem to fix?
+Under heavy load we realized that the method java.util.TimeZone.getTimeZone(String ID) becomes a bottleneck so it is necessary to give an alternative with less contention as possible.
+
+Fix description
+
+How is the problem fixed?
+
+* Avoid the usage of method java.util.TimeZone.getTimeZone(String ID). We use now a less synchronized method implemented in kernel project instead.
+
+Patch file: KER-178.patch
+
+Tests to perform
+
+Reproduction test
+ * Activate the Concurrent GC during run of benchmark
+
+Tests performed at DevLevel
+ * Functional testing for all projects (kernel, core, ws, jcr)
+
+Tests performed at QA/Support Level
+*
+
+Documentation changes
+
+Documentation changes:
+ * No
+
+Configuration changes
+
+Configuration changes:
+ * No
+
+Will previous configuration continue to work?
+ * Yes
+
+Risks and impacts
+
+Can this bug fix have any side effects on current client projects?
+
+ * No
+
+Is there a performance risk/cost?
+ * No
+
+Validation (PM/Support/QA)
+
+PM Comment
+* PM validated
+
+Support Comment
+*
+
+QA Feedbacks
+*
12 years, 6 months
exo-jcr SVN: r5140 - jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/core.
by do-not-reply@jboss.org
Author: tolusha
Date: 2011-11-01 11:50:49 -0400 (Tue, 01 Nov 2011)
New Revision: 5140
Modified:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/core/WorkspaceContainerFacade.java
Log:
EXOJCR-1605: add comment
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/core/WorkspaceContainerFacade.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/core/WorkspaceContainerFacade.java 2011-11-01 15:26:53 UTC (rev 5139)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/core/WorkspaceContainerFacade.java 2011-11-01 15:50:49 UTC (rev 5140)
@@ -244,6 +244,7 @@
};
};
Collections.sort(components, c);
+
for (Suspendable component : components)
{
try
@@ -264,6 +265,7 @@
*/
private void resume() throws RepositoryException
{
+ // components should be resumed in reverse order
List<Suspendable> components = getComponentInstancesOfType(Suspendable.class);
Comparator<Suspendable> c = new Comparator<Suspendable>()
{
@@ -273,6 +275,7 @@
};
};
Collections.sort(components, c);
+
for (Suspendable component : components)
{
try
12 years, 6 months