diff --git a/spring-ldap-person/ivy.xml b/spring-ldap-person/ivy.xml
index 02df7261..0f3f66aa 100644
--- a/spring-ldap-person/ivy.xml
+++ b/spring-ldap-person/ivy.xml
@@ -1,8 +1,10 @@
-
-
+
@@ -14,81 +16,106 @@
-
+
-
-
-
-
-
+
+
+
+
+
-
-
+
+
-
-
-
+
+
+
-
-
-
-
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
-
-
-
+
+
+
-
-
+
+
+ conf="global->default" />
-
+ conf="global->default" />
+
-
+
-
-
-
-
-
+
+
+
+
+
diff --git a/spring-ldap-person/src/main/java/org/springframework/ldap/samples/person/dao/DummyGroupDao.java b/spring-ldap-person/src/main/java/org/springframework/ldap/samples/person/dao/DummyGroupDao.java
index b226596f..ee150627 100644
--- a/spring-ldap-person/src/main/java/org/springframework/ldap/samples/person/dao/DummyGroupDao.java
+++ b/spring-ldap-person/src/main/java/org/springframework/ldap/samples/person/dao/DummyGroupDao.java
@@ -79,4 +79,8 @@ public class DummyGroupDao implements GroupDao {
Group actualGroup = findByPrimaryKey(group.getName());
actualGroup.setMembers(group.getMembers());
}
+
+ public void updateMemberDn(String originalDn, String newDn) {
+ throw new UnsupportedOperationException("Not implemented");
+ }
}
diff --git a/spring-ldap-person/src/main/java/org/springframework/ldap/samples/person/dao/DummyPersonDao.java b/spring-ldap-person/src/main/java/org/springframework/ldap/samples/person/dao/DummyPersonDao.java
index f1909e4e..bb0bfbc7 100644
--- a/spring-ldap-person/src/main/java/org/springframework/ldap/samples/person/dao/DummyPersonDao.java
+++ b/spring-ldap-person/src/main/java/org/springframework/ldap/samples/person/dao/DummyPersonDao.java
@@ -76,19 +76,29 @@ public class DummyPersonDao implements PersonDao {
return new LinkedList(PERSONS.entrySet());
}
- public Person findByPrimaryKey(String country, String company,
+ public Person findByPrimaryKey(String dn) {
+ log.info("findByPrimaryKey");
+ if (PERSONS.get(dn) != null) {
+ return (Person) PERSONS.get(dn);
+ } else {
+ throw new NameNotFoundException("Could not find person with dn '"
+ + dn + "'");
+ }
+ }
+
+ public Person findByPrimaryKeyData(String country, String company,
String fullname) {
log.info("findByPrimaryKey");
if (PERSONS.get(fullname) != null) {
return (Person) PERSONS.get(fullname);
} else {
- throw new NameNotFoundException(
- "Could not find person with name '" + fullname + "'");
+ throw new NameNotFoundException("Could not find person with name '"
+ + fullname + "'");
}
}
public void update(Person person) {
- Person actualPerson = findByPrimaryKey(null, null, person.getFullName());
+ Person actualPerson = findByPrimaryKey(person.getFullName());
actualPerson.setCompany(person.getCompany());
actualPerson.setCountry(person.getCountry());
actualPerson.setDescription(person.getDescription());
diff --git a/spring-ldap-person/src/main/java/org/springframework/ldap/samples/person/dao/GroupDao.java b/spring-ldap-person/src/main/java/org/springframework/ldap/samples/person/dao/GroupDao.java
index e8cbd7ce..5b204512 100644
--- a/spring-ldap-person/src/main/java/org/springframework/ldap/samples/person/dao/GroupDao.java
+++ b/spring-ldap-person/src/main/java/org/springframework/ldap/samples/person/dao/GroupDao.java
@@ -37,4 +37,14 @@ public interface GroupDao {
public List findAll();
public List find(SearchCriteria criteria);
+
+ /**
+ * Update all groups referring to the original DN with the new DN value.
+ *
+ * @param originalDn
+ * the original DN.
+ * @param newDn
+ * the new DN.
+ */
+ public void updateMemberDn(String originalDn, String newDn);
}
diff --git a/spring-ldap-person/src/main/java/org/springframework/ldap/samples/person/dao/GroupDaoImpl.java b/spring-ldap-person/src/main/java/org/springframework/ldap/samples/person/dao/GroupDaoImpl.java
index 9ba65469..f6f5e56e 100644
--- a/spring-ldap-person/src/main/java/org/springframework/ldap/samples/person/dao/GroupDaoImpl.java
+++ b/spring-ldap-person/src/main/java/org/springframework/ldap/samples/person/dao/GroupDaoImpl.java
@@ -15,8 +15,13 @@
*/
package org.springframework.ldap.samples.person.dao;
+import java.util.Iterator;
import java.util.List;
+import javax.naming.directory.BasicAttribute;
+import javax.naming.directory.DirContext;
+import javax.naming.directory.ModificationItem;
+
import org.springframework.ldap.core.ContextMapper;
import org.springframework.ldap.core.DirContextAdapter;
import org.springframework.ldap.core.DirContextOperations;
@@ -127,4 +132,34 @@ public class GroupDaoImpl implements GroupDao {
public void setLdapOperations(LdapOperations ldapOperations) {
this.ldapOperations = ldapOperations;
}
+
+ public void updateMemberDn(String originalDn, String newDn) {
+ BasicAttribute removeAttribute = new BasicAttribute("uniqueMember",
+ originalDn);
+ BasicAttribute addAttribute = new BasicAttribute("uniqueMember",
+ newDn);
+
+ ModificationItem[] modificationItems = new ModificationItem[2];
+ modificationItems[0] = new ModificationItem(
+ DirContext.REMOVE_ATTRIBUTE, removeAttribute);
+ modificationItems[0] = new ModificationItem(DirContext.ADD_ATTRIBUTE,
+ addAttribute);
+
+ AndFilter filter = new AndFilter();
+ filter.and(new EqualsFilter("objectclass", "groupOfUniqueNames"));
+ filter.and(new EqualsFilter("uniqueMember", originalDn));
+
+ List list = ldapOperations.search(DistinguishedName.EMPTY_PATH, filter
+ .encode(), new ContextMapper() {
+ public Object mapFromContext(Object ctx) {
+ DirContextAdapter adapter = (DirContextAdapter) ctx;
+ return adapter.getNameInNamespace();
+ }
+ });
+
+ for (Iterator iter = list.iterator(); iter.hasNext();) {
+ String dn = (String) iter.next();
+ ldapOperations.modifyAttributes(dn, modificationItems);
+ }
+ }
}
diff --git a/spring-ldap-person/src/main/java/org/springframework/ldap/samples/person/dao/PersonContextMapper.java b/spring-ldap-person/src/main/java/org/springframework/ldap/samples/person/dao/PersonContextMapper.java
index f4555d6c..6ec4d057 100644
--- a/spring-ldap-person/src/main/java/org/springframework/ldap/samples/person/dao/PersonContextMapper.java
+++ b/spring-ldap-person/src/main/java/org/springframework/ldap/samples/person/dao/PersonContextMapper.java
@@ -15,13 +15,10 @@
*/
package org.springframework.ldap.samples.person.dao;
-import javax.naming.NamingException;
-
import org.springframework.ldap.core.ContextMapper;
import org.springframework.ldap.core.DirContextOperations;
import org.springframework.ldap.core.DistinguishedName;
import org.springframework.ldap.samples.person.domain.Person;
-import org.springframework.ldap.support.LdapUtils;
/**
* Maps from DirContextOperations (DirContextAdapters, really) to Person
@@ -39,13 +36,11 @@ public class PersonContextMapper implements ContextMapper {
DirContextOperations dirContext = (DirContextOperations) ctx;
DistinguishedName dn = new DistinguishedName(dirContext.getDn());
String fullDn;
- try {
- fullDn = dirContext.getNameInNamespace();
- } catch (NamingException e) {
- throw LdapUtils.convertLdapException(e);
- }
+ fullDn = dirContext.getNameInNamespace();
+
Person person = new Person();
person.setDn(fullDn);
+ person.setPrimaryKey(dirContext.getDn().toString());
person.setCountry(dn.getLdapRdn(0).getComponent().getValue());
person.setCompany(dn.getLdapRdn(1).getComponent().getValue());
person.setFullName(dirContext.getStringAttribute("cn"));
diff --git a/spring-ldap-person/src/main/java/org/springframework/ldap/samples/person/dao/PersonDao.java b/spring-ldap-person/src/main/java/org/springframework/ldap/samples/person/dao/PersonDao.java
index 09dc8bb5..cdb1612b 100644
--- a/spring-ldap-person/src/main/java/org/springframework/ldap/samples/person/dao/PersonDao.java
+++ b/spring-ldap-person/src/main/java/org/springframework/ldap/samples/person/dao/PersonDao.java
@@ -20,7 +20,6 @@ import java.util.List;
import org.springframework.ldap.samples.person.domain.Person;
import org.springframework.ldap.samples.person.domain.SearchCriteria;
-
/**
* Data Access Object interface for the Person entity.
*
@@ -33,10 +32,13 @@ public interface PersonDao {
public void update(Person person);
public void delete(Person person);
-
- public Person findByPrimaryKey(String country, String company, String fullname);
-
+
+ public Person findByPrimaryKey(String dn);
+
+ public Person findByPrimaryKeyData(String country, String company,
+ String fullname);
+
public List findAll();
-
+
public List find(SearchCriteria criteria);
}
diff --git a/spring-ldap-person/src/main/java/org/springframework/ldap/samples/person/dao/PersonDaoImpl.java b/spring-ldap-person/src/main/java/org/springframework/ldap/samples/person/dao/PersonDaoImpl.java
index 2e709a64..660d945f 100644
--- a/spring-ldap-person/src/main/java/org/springframework/ldap/samples/person/dao/PersonDaoImpl.java
+++ b/spring-ldap-person/src/main/java/org/springframework/ldap/samples/person/dao/PersonDaoImpl.java
@@ -17,6 +17,8 @@ package org.springframework.ldap.samples.person.dao;
import java.util.List;
+import javax.naming.Name;
+
import org.springframework.ldap.core.ContextMapper;
import org.springframework.ldap.core.DirContextAdapter;
import org.springframework.ldap.core.DirContextOperations;
@@ -79,14 +81,27 @@ public class PersonDaoImpl implements PersonDao {
}
public void update(Person person) {
+ DistinguishedName originalDn = new DistinguishedName(person
+ .getPrimaryKey());
+ DistinguishedName newDn = buildDn(person);
+
+ if (!originalDn.equals(newDn)) {
+ ldapOperations.rename(originalDn, newDn);
+ }
+
DirContextOperations ctx = (DirContextOperations) ldapOperations
- .lookup(buildDn(person));
- ldapOperations.modifyAttributes(buildDn(person), setAttributes(ctx,
- person).getModificationItems());
+ .lookup(newDn);
+ ldapOperations.modifyAttributes(newDn, setAttributes(ctx, person)
+ .getModificationItems());
+
+ if (!originalDn.equals(newDn)) {
+ person.setDn(ctx.getNameInNamespace());
+ person.setPrimaryKey(ctx.getDn().toString());
+ }
}
public void delete(Person person) {
- ldapOperations.unbind(buildDn(person));
+ ldapOperations.unbind(person.getPrimaryKey());
}
public List findAll() {
@@ -95,9 +110,8 @@ public class PersonDaoImpl implements PersonDao {
.encode(), getContextMapper());
}
- public Person findByPrimaryKey(String country, String company,
+ public Person findByPrimaryKeyData(String country, String company,
String fullname) {
-
DistinguishedName dn = new DistinguishedName();
dn.add("c", country);
dn.add("ou", company);
@@ -106,6 +120,10 @@ public class PersonDaoImpl implements PersonDao {
return (Person) ldapOperations.lookup(dn, getContextMapper());
}
+ public Person findByPrimaryKey(String dn) {
+ return (Person) ldapOperations.lookup(dn, getContextMapper());
+ }
+
public List find(SearchCriteria criteria) {
AndFilter andFilter = new AndFilter();
andFilter.and(new EqualsFilter("objectclass", "person"));
@@ -117,4 +135,5 @@ public class PersonDaoImpl implements PersonDao {
public void setLdapOperations(LdapOperations ldapOperations) {
this.ldapOperations = ldapOperations;
}
+
}
diff --git a/spring-ldap-person/src/main/java/org/springframework/ldap/samples/person/dao/TraditionalPersonDaoImpl.java b/spring-ldap-person/src/main/java/org/springframework/ldap/samples/person/dao/TraditionalPersonDaoImpl.java
index 7bf024fc..61361acc 100644
--- a/spring-ldap-person/src/main/java/org/springframework/ldap/samples/person/dao/TraditionalPersonDaoImpl.java
+++ b/spring-ldap-person/src/main/java/org/springframework/ldap/samples/person/dao/TraditionalPersonDaoImpl.java
@@ -127,10 +127,28 @@ public class TraditionalPersonDaoImpl implements PersonDao {
* @see org.springframework.ldap.samples.person.dao.PersonDao#findByPrimaryKey(java.lang.String,
* java.lang.String, java.lang.String)
*/
- public Person findByPrimaryKey(String country, String company,
- String fullname) {
+ public Person findByPrimaryKey(String dn) {
DirContext ctx = createContext();
+ try {
+ Attributes attributes = ctx.getAttributes(dn);
+ return mapToPerson(dn, attributes);
+ } catch (NamingException e) {
+ throw new RuntimeException(e);
+ } finally {
+ if (ctx != null) {
+ try {
+ ctx.close();
+ } catch (Exception e) {
+ // Never mind this.
+ }
+ }
+ }
+ }
+
+ public Person findByPrimaryKeyData(String country, String company,
+ String fullname) {
+ DirContext ctx = createContext();
String dn = buildDn(country, company, fullname);
try {
Attributes attributes = ctx.getAttributes(dn);
@@ -225,4 +243,5 @@ public class TraditionalPersonDaoImpl implements PersonDao {
public void setBase(String base) {
this.base = base;
}
+
}
diff --git a/spring-ldap-person/src/main/java/org/springframework/ldap/samples/person/domain/Person.java b/spring-ldap-person/src/main/java/org/springframework/ldap/samples/person/domain/Person.java
index 3661498d..c1d47c40 100644
--- a/spring-ldap-person/src/main/java/org/springframework/ldap/samples/person/domain/Person.java
+++ b/spring-ldap-person/src/main/java/org/springframework/ldap/samples/person/domain/Person.java
@@ -31,11 +31,17 @@ public class Person implements Serializable {
private static final long serialVersionUID = -8953862790009843528L;
/**
- * Needed when adding persons to groups, since groups require
- * full distinguished names of their members.
+ * Needed when adding persons to groups, since groups require full
+ * distinguished names of their members.
*/
private String dn;
+ /**
+ * The primary key - that is the distinguished name of the person in the
+ * current namespace.
+ */
+ private String primaryKey;
+
private String fullName;
private String lastName;
@@ -114,8 +120,16 @@ public class Person implements Serializable {
public int hashCode() {
return HashCodeBuilder.reflectionHashCode(this);
}
-
+
public String toString() {
return new ToStringCreator(this).toString();
}
+
+ public String getPrimaryKey() {
+ return primaryKey;
+ }
+
+ public void setPrimaryKey(String primaryKey) {
+ this.primaryKey = primaryKey;
+ }
}
diff --git a/spring-ldap-person/src/main/java/org/springframework/ldap/samples/person/service/PersonServiceImpl.java b/spring-ldap-person/src/main/java/org/springframework/ldap/samples/person/service/PersonServiceImpl.java
index 72cfeeb6..879f0aa3 100644
--- a/spring-ldap-person/src/main/java/org/springframework/ldap/samples/person/service/PersonServiceImpl.java
+++ b/spring-ldap-person/src/main/java/org/springframework/ldap/samples/person/service/PersonServiceImpl.java
@@ -17,6 +17,8 @@ package org.springframework.ldap.samples.person.service;
import java.util.List;
+import org.apache.commons.lang.StringUtils;
+import org.springframework.ldap.samples.person.dao.GroupDao;
import org.springframework.ldap.samples.person.dao.PersonDao;
import org.springframework.ldap.samples.person.domain.Person;
import org.springframework.ldap.samples.person.domain.SearchCriteria;
@@ -31,6 +33,8 @@ public class PersonServiceImpl implements PersonService {
private PersonDao personDao;
+ private GroupDao groupDao;
+
/*
* @see org.springframework.ldap.samples.person.service.PersonService#create(java.lang.String,
* java.lang.String, java.lang.String, java.lang.String,
@@ -53,7 +57,18 @@ public class PersonServiceImpl implements PersonService {
* @see org.springframework.ldap.samples.person.service.PersonService#update(org.springframework.ldap.samples.person.domain.Person)
*/
public void update(Person person) {
+ String originalDn = person.getDn();
personDao.update(person);
+ String newDn = person.getDn();
+
+ // If the DN has changed (i.e. if the user has been moved in the tree,
+ // also modify all referring groups.
+ // Unfortunately this doesn't work with the current version of ApacheDS,
+ // as the format of the DN produced by DistinguishedName is different
+ // from the one present in the DB (and recognized by acegi).
+ if (!StringUtils.equals(originalDn, newDn)) {
+ groupDao.updateMemberDn(originalDn, newDn);
+ }
}
public void delete(Person person) {
@@ -65,7 +80,7 @@ public class PersonServiceImpl implements PersonService {
* java.lang.String, java.lang.String)
*/
public Person findByPrimaryKey(String country, String company, String name) {
- return personDao.findByPrimaryKey(country, company, name);
+ return personDao.findByPrimaryKeyData(country, company, name);
}
/*
@@ -85,4 +100,8 @@ public class PersonServiceImpl implements PersonService {
public void setPersonDao(PersonDao personDao) {
this.personDao = personDao;
}
+
+ public void setGroupDao(GroupDao groupDao) {
+ this.groupDao = groupDao;
+ }
}
diff --git a/spring-ldap-person/src/main/webapp/WEB-INF/applicationContext.xml b/spring-ldap-person/src/main/webapp/WEB-INF/applicationContext.xml
index 86961b91..92d006d6 100644
--- a/spring-ldap-person/src/main/webapp/WEB-INF/applicationContext.xml
+++ b/spring-ldap-person/src/main/webapp/WEB-INF/applicationContext.xml
@@ -1,9 +1,9 @@
-
-
+
@@ -12,32 +12,42 @@
+
+ -->
-
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
@@ -54,9 +64,11 @@
-
-
+
+ -->
@@ -67,22 +79,34 @@
-
+
+
+
+
+
+
+ PROPAGATION_REQUIRES_NEW
+
+
+
+
diff --git a/spring-ldap-person/src/main/webapp/WEB-INF/flows/detail-flow.xml b/spring-ldap-person/src/main/webapp/WEB-INF/flows/detail-flow.xml
index 02ccab46..1d8c5c1c 100644
--- a/spring-ldap-person/src/main/webapp/WEB-INF/flows/detail-flow.xml
+++ b/spring-ldap-person/src/main/webapp/WEB-INF/flows/detail-flow.xml
@@ -10,37 +10,29 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/spring-ldap-person/src/test/java/org/springframework/ldap/samples/person/dao/GroupDaoImplTest.java b/spring-ldap-person/src/test/java/org/springframework/ldap/samples/person/dao/GroupDaoImplTest.java
index 393a25f5..75c3141d 100644
--- a/spring-ldap-person/src/test/java/org/springframework/ldap/samples/person/dao/GroupDaoImplTest.java
+++ b/spring-ldap-person/src/test/java/org/springframework/ldap/samples/person/dao/GroupDaoImplTest.java
@@ -168,8 +168,9 @@ public class GroupDaoImplTest extends TestCase {
public void testFindAll() {
List expectedList = Collections.singletonList(null);
ldapOperationsControl.expectAndReturn(ldapOperationsMock.search(
- DistinguishedName.EMPTY_PATH, "(objectclass=groupOfUniqueNames)",
- contextMapperMock), expectedList);
+ DistinguishedName.EMPTY_PATH,
+ "(objectclass=groupOfUniqueNames)", contextMapperMock),
+ expectedList);
replay();
@@ -181,8 +182,7 @@ public class GroupDaoImplTest extends TestCase {
}
public void testFindByPrimaryKey() {
- DistinguishedName dn = new DistinguishedName(
- "cn=Some Group, ou=groups");
+ DistinguishedName dn = new DistinguishedName("cn=Some Group, ou=groups");
ldapOperationsControl.expectAndReturn(ldapOperationsMock.lookup(dn,
contextMapperMock), group);
@@ -200,8 +200,8 @@ public class GroupDaoImplTest extends TestCase {
List expectedList = Collections.singletonList(null);
ldapOperationsControl.expectAndReturn(ldapOperationsMock.search(
DistinguishedName.EMPTY_PATH,
- "(&(objectclass=groupOfUniqueNames)(cn=*some*))", contextMapperMock),
- expectedList);
+ "(&(objectclass=groupOfUniqueNames)(cn=*some*))",
+ contextMapperMock), expectedList);
replay();
diff --git a/spring-ldap-person/src/test/java/org/springframework/ldap/samples/person/dao/PersonDaoImplTest.java b/spring-ldap-person/src/test/java/org/springframework/ldap/samples/person/dao/PersonDaoImplTest.java
index 0b327221..b7b97aee 100644
--- a/spring-ldap-person/src/test/java/org/springframework/ldap/samples/person/dao/PersonDaoImplTest.java
+++ b/spring-ldap-person/src/test/java/org/springframework/ldap/samples/person/dao/PersonDaoImplTest.java
@@ -18,6 +18,7 @@ package org.springframework.ldap.samples.person.dao;
import java.util.Collections;
import java.util.List;
+import javax.naming.NamingException;
import javax.naming.directory.ModificationItem;
import junit.framework.TestCase;
@@ -38,6 +39,16 @@ import org.springframework.ldap.samples.person.domain.SearchCriteria;
*/
public class PersonDaoImplTest extends TestCase {
+ private static final String DEFAULT_DN = "cn=some person, ou=Some Company, c=SE";
+
+ private static final DistinguishedName DEFAULT_DNAME = new DistinguishedName(
+ DEFAULT_DN);
+
+ private static final String MODIFIED_DN = "cn=some person, ou=Some Other Company, c=SE";
+
+ private static final DistinguishedName MODIFIED_DNAME = new DistinguishedName(
+ MODIFIED_DN);
+
private MockControl ldapOperationsControl;
private LdapOperations ldapOperationsMock;
@@ -68,6 +79,10 @@ public class PersonDaoImplTest extends TestCase {
contextMapperMock = (ContextMapper) contextMapperControl.getMock();
person = new Person();
+ person.setFullName("some person");
+ person.setCompany("Some company");
+ person.setCountry("SE");
+ person.setPrimaryKey(DEFAULT_DN);
tested = new PersonDaoImpl() {
DirContextOperations setAttributes(DirContextOperations adapter,
@@ -76,11 +91,6 @@ public class PersonDaoImplTest extends TestCase {
return dirContextOperationsMock;
}
- DistinguishedName buildDn(Person p) {
- assertSame(person, p);
- return DistinguishedName.EMPTY_PATH;
- }
-
ContextMapper getContextMapper() {
return contextMapperMock;
}
@@ -129,8 +139,7 @@ public class PersonDaoImplTest extends TestCase {
}
public void testCreate() {
- ldapOperationsMock.bind(DistinguishedName.EMPTY_PATH,
- dirContextOperationsMock, null);
+ ldapOperationsMock.bind(DEFAULT_DNAME, dirContextOperationsMock, null);
replay();
@@ -140,26 +149,49 @@ public class PersonDaoImplTest extends TestCase {
}
public void testUpdate() {
- ldapOperationsControl
- .expectAndReturn(ldapOperationsMock
- .lookup(DistinguishedName.EMPTY_PATH),
- dirContextOperationsMock);
+ ldapOperationsControl.expectAndReturn(ldapOperationsMock
+ .lookup(DEFAULT_DNAME), dirContextOperationsMock);
ModificationItem[] modificationItems = new ModificationItem[0];
dirContextOperationsControl.expectAndReturn(dirContextOperationsMock
.getModificationItems(), modificationItems);
- ldapOperationsMock.modifyAttributes(DistinguishedName.EMPTY_PATH,
- modificationItems);
+ ldapOperationsMock.modifyAttributes(DEFAULT_DNAME, modificationItems);
replay();
tested.update(person);
verify();
+ }
+ public void testUpdateWithChangedCompany() throws NamingException {
+ person.setCompany("Some Other Company");
+
+ ldapOperationsMock.rename(DEFAULT_DNAME, MODIFIED_DNAME);
+
+ ldapOperationsControl.expectAndReturn(ldapOperationsMock
+ .lookup(MODIFIED_DNAME), dirContextOperationsMock);
+
+ ModificationItem[] modificationItems = new ModificationItem[0];
+ dirContextOperationsControl.expectAndReturn(dirContextOperationsMock
+ .getModificationItems(), modificationItems);
+ ldapOperationsMock.modifyAttributes(MODIFIED_DNAME, modificationItems);
+
+ dirContextOperationsControl.expectAndReturn(dirContextOperationsMock
+ .getNameInNamespace(), "cn=new dn, dc=jayway, dc=se");
+ dirContextOperationsControl.expectAndReturn(dirContextOperationsMock
+ .getDn(), new DistinguishedName("cn=new dn"));
+
+ replay();
+
+ tested.update(person);
+
+ verify();
+ assertEquals("cn=new dn", person.getPrimaryKey());
+ assertEquals("cn=new dn, dc=jayway, dc=se", person.getDn());
}
public void testDelete() {
- ldapOperationsMock.unbind(DistinguishedName.EMPTY_PATH);
+ ldapOperationsMock.unbind(DEFAULT_DN);
replay();
@@ -184,16 +216,14 @@ public class PersonDaoImplTest extends TestCase {
}
public void testFindByPrimaryKey() {
- DistinguishedName dn = new DistinguishedName(
- "cn=Some Person, ou=Some company, c=Sweden");
+ String dn = "cn=Some Person, ou=Some company, c=Sweden";
ldapOperationsControl.expectAndReturn(ldapOperationsMock.lookup(dn,
contextMapperMock), person);
replay();
- Person result = tested.findByPrimaryKey("Sweden", "Some company",
- "Some Person");
+ Person result = tested.findByPrimaryKey(dn);
verify();
diff --git a/spring-ldap-person/src/test/java/org/springframework/ldap/samples/person/service/PersonServiceImplTest.java b/spring-ldap-person/src/test/java/org/springframework/ldap/samples/person/service/PersonServiceImplTest.java
index e6680a6d..7e76bd65 100644
--- a/spring-ldap-person/src/test/java/org/springframework/ldap/samples/person/service/PersonServiceImplTest.java
+++ b/spring-ldap-person/src/test/java/org/springframework/ldap/samples/person/service/PersonServiceImplTest.java
@@ -21,10 +21,10 @@ import java.util.List;
import junit.framework.TestCase;
import org.easymock.MockControl;
+import org.springframework.ldap.samples.person.dao.GroupDao;
import org.springframework.ldap.samples.person.dao.PersonDao;
import org.springframework.ldap.samples.person.domain.Person;
import org.springframework.ldap.samples.person.domain.SearchCriteria;
-import org.springframework.ldap.samples.person.service.PersonServiceImpl;
/**
* Unit tests for the PersonServiceImpl class.
@@ -116,7 +116,7 @@ public class PersonServiceImplTest extends TestCase {
public void testFindByPrimaryKey() {
Person person = new Person();
- personDaoControl.expectAndReturn(personDaoMock.findByPrimaryKey(
+ personDaoControl.expectAndReturn(personDaoMock.findByPrimaryKeyData(
"Sweden", "Some company", "Some Person"), person);
replay();
diff --git a/spring-ldap-person/src/test/java/org/springframework/ldap/samples/person/web/DetailFlowExecutionTest.java b/spring-ldap-person/src/test/java/org/springframework/ldap/samples/person/web/DetailFlowExecutionTest.java
index 09cb3d01..fc1ad40b 100644
--- a/spring-ldap-person/src/test/java/org/springframework/ldap/samples/person/web/DetailFlowExecutionTest.java
+++ b/spring-ldap-person/src/test/java/org/springframework/ldap/samples/person/web/DetailFlowExecutionTest.java
@@ -83,7 +83,7 @@ public class DetailFlowExecutionTest extends AbstractXmlFlowExecutionTests {
}
public void testEdit() {
- expectFindByPrimaryKey(2);
+ expectFindByPrimaryKey();
replay();
startFlow(attributeMap);
@@ -96,7 +96,7 @@ public class DetailFlowExecutionTest extends AbstractXmlFlowExecutionTests {
}
public void testCancel() {
- expectFindByPrimaryKey(3);
+ expectFindByPrimaryKey();
replay();
startFlow(attributeMap);
@@ -110,7 +110,7 @@ public class DetailFlowExecutionTest extends AbstractXmlFlowExecutionTests {
}
public void testSubmit() {
- expectFindByPrimaryKey(3);
+ expectFindByPrimaryKey();
expectUpdate();
replay();