Skip to content
This repository has been archived by the owner on Jun 10, 2019. It is now read-only.

[PLINK-274] - Remove all associated data when removing a Partition. #190

Merged
merged 1 commit into from
Sep 16, 2013
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -17,24 +17,6 @@
*/
package org.picketlink.idm.internal;

import static org.picketlink.common.util.StringUtil.isNullOrEmpty;
import static org.picketlink.idm.IDMLogger.LOGGER;
import static org.picketlink.idm.IDMMessages.MESSAGES;
import static org.picketlink.idm.util.IDMUtil.isTypeSupported;
import static org.picketlink.idm.util.IDMUtil.toSet;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;

import org.picketlink.idm.DefaultIdGenerator;
import org.picketlink.idm.IdGenerator;
import org.picketlink.idm.IdentityManagementException;
Expand Down Expand Up @@ -66,13 +48,31 @@
import org.picketlink.idm.model.annotation.IdentityPartition;
import org.picketlink.idm.model.basic.Realm;
import org.picketlink.idm.permission.spi.PermissionStore;
import org.picketlink.idm.query.IdentityQuery;
import org.picketlink.idm.spi.AttributeStore;
import org.picketlink.idm.spi.CredentialStore;
import org.picketlink.idm.spi.IdentityContext;
import org.picketlink.idm.spi.IdentityStore;
import org.picketlink.idm.spi.PartitionStore;
import org.picketlink.idm.spi.StoreSelector;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;

import static org.picketlink.common.util.StringUtil.*;
import static org.picketlink.idm.IDMLogger.*;
import static org.picketlink.idm.IDMMessages.*;
import static org.picketlink.idm.util.IDMUtil.*;

/**
* Provides partition management functionality, and partition-specific {@link IdentityManager} instances. <p/> Before
* using this factory you need a valid {@link IdentityConfiguration}, usually created using the {@link
Expand Down Expand Up @@ -519,6 +519,13 @@ public void remove(Partition partition) {
if (attributeStore != null) {
Partition storedType = lookupById(partition.getClass(), partition.getId());

IdentityManager identityManager = createIdentityManager(storedType);
IdentityQuery<IdentityType> query = identityManager.createIdentityQuery(IdentityType.class);

for (IdentityType identityType: query.getResultList()) {
identityManager.remove(identityType);
}

for (Attribute<? extends Serializable> attribute : storedType.getAttributes()) {
attributeStore.removeAttribute(context, storedType, attribute.getName());
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,15 @@
package org.picketlink.test.idm.partition;

import org.junit.Test;
import org.picketlink.idm.IdentityManager;
import org.picketlink.idm.PartitionManager;
import org.picketlink.idm.RelationshipManager;
import org.picketlink.idm.model.Partition;
import org.picketlink.idm.model.basic.BasicModel;
import org.picketlink.idm.model.basic.Realm;
import org.picketlink.idm.model.basic.Role;
import org.picketlink.idm.model.basic.Tier;
import org.picketlink.idm.model.basic.User;
import org.picketlink.test.idm.AbstractPartitionManagerTestCase;
import org.picketlink.test.idm.Configuration;
import org.picketlink.test.idm.testers.FileStoreConfigurationTester;
Expand Down Expand Up @@ -50,4 +55,68 @@ public void testGetAllPartitions() {
// 6 because we have the default partition
assertEquals(6, partitions.size());
}

@Test
public void testRemovePartitionWithIdentityTypes() {
PartitionManager partitionManager = getPartitionManager();
Realm somePartition = new Realm("somePartition");

partitionManager.add(somePartition);

IdentityManager identityManager = partitionManager.createIdentityManager(somePartition);

User userA = new User("userA");

identityManager.add(userA);

User userB = new User("userB");

identityManager.add(userB);

User userC = new User("userC");

identityManager.add(userC);

assertNotNull(BasicModel.getUser(identityManager, userA.getLoginName()));
assertNotNull(BasicModel.getUser(identityManager, userB.getLoginName()));
assertNotNull(BasicModel.getUser(identityManager, userC.getLoginName()));

Role roleA = new Role("roleA");

identityManager.add(roleA);

Role roleB = new Role("roleB");

identityManager.add(roleB);

Role roleC = new Role("roleC");

identityManager.add(roleC);

assertNotNull(BasicModel.getRole(identityManager, roleA.getName()));
assertNotNull(BasicModel.getRole(identityManager, roleB.getName()));
assertNotNull(BasicModel.getRole(identityManager, roleC.getName()));

RelationshipManager relationshipManager = partitionManager.createRelationshipManager();

BasicModel.grantRole(relationshipManager, userA, roleA);
BasicModel.grantRole(relationshipManager, userB, roleB);
BasicModel.grantRole(relationshipManager, userC, roleC);

assertTrue(BasicModel.hasRole(relationshipManager, userA, roleA));
assertTrue(BasicModel.hasRole(relationshipManager, userB, roleB));
assertTrue(BasicModel.hasRole(relationshipManager, userC, roleC));

partitionManager.remove(somePartition);

new Realm("somePartition");

partitionManager.add(somePartition);

identityManager = partitionManager.createIdentityManager(somePartition);

assertNull(BasicModel.getUser(identityManager, userA.getLoginName()));
assertNull(BasicModel.getUser(identityManager, userB.getLoginName()));
assertNull(BasicModel.getUser(identityManager, userC.getLoginName()));
}
}