[java-opensaml] 01/02: Add de-indexing support to MetadataIndexManager.

Brent Putman putmanb at georgetown.edu
Mon Oct 1 18:09:28 EDT 2018


This is an automated email from the git hooks/post-receive script.

putmanb pushed a commit to branch master
in repository java-opensaml.

View the commit online:
http://git.shibboleth.net/view/?p=java-opensaml.git;a=commit;h=c983887c2b2fcb56413ace481e81e4688d1bb89e

commit c983887c2b2fcb56413ace481e81e4688d1bb89e
Author: Brent Putman <putmanb at georgetown.edu>
AuthorDate: Tue Sep 25 19:38:06 2018 -0400

    Add de-indexing support to MetadataIndexManager.
---
 .../resolver/index/impl/MetadataIndexManager.java  | 24 +++++++
 .../index/impl/MetadataIndexManagerTest.java       | 81 ++++++++++++++++++++++
 2 files changed, 105 insertions(+)

diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/index/impl/MetadataIndexManager.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/index/impl/MetadataIndexManager.java
index dd09b31..2779142 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/index/impl/MetadataIndexManager.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/metadata/resolver/index/impl/MetadataIndexManager.java
@@ -181,6 +181,30 @@ public class MetadataIndexManager<T> {
         }
     }
     
+    /**
+     * Remove from the index the specified {@link EntityDescriptor} based on the indexes currently held.
+     * 
+     * @param descriptor the entity descriptor to index
+     */
+    public void deindexEntityDescriptor(@Nonnull final EntityDescriptor descriptor) {
+        final T item = entityDescriptorFunction.apply(descriptor);
+        if (item != null) {
+            for (final MetadataIndex index : indexes.keySet()) {
+                final Set<MetadataIndexKey> keys = index.generateKeys(descriptor);
+                if (keys != null && !keys.isEmpty()) {
+                    final MetadataIndexStore<T> store = getStore(index);
+                    for (final MetadataIndexKey key : keys) {
+                        log.trace("De-indexing metadata: index '{}', key '{}', data item '{}'", 
+                                index, key, item);
+                        store.remove(key, item);
+                    }
+                }
+            }
+        } else {
+            log.trace("Unable to extract indexed data item from EntityDescriptor");
+        }
+    }
+    
     
     /** Extraction function which simply returns the input {@link EntityDescriptor}. */
     public static class IdentityExtractionFunction implements Function<EntityDescriptor, EntityDescriptor> {
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/metadata/resolver/index/impl/MetadataIndexManagerTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/metadata/resolver/index/impl/MetadataIndexManagerTest.java
index f6ae8e9..4a15ea3 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/metadata/resolver/index/impl/MetadataIndexManagerTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/metadata/resolver/index/impl/MetadataIndexManagerTest.java
@@ -132,6 +132,52 @@ public class MetadataIndexManagerTest extends XMLObjectBaseTestCase {
         Assert.assertFalse(result.get().isEmpty());
         Assert.assertEquals(result.get().size(), 1);
         Assert.assertTrue(result.get().contains(c));
+        
+        // Now test de-indexing
+        manager.deindexEntityDescriptor(a);
+        
+        criteriaSet.clear();
+        criteriaSet.add(critAEntity);
+        result = manager.lookupIndexedItems(criteriaSet);
+        Assert.assertTrue(result.isPresent());
+        Assert.assertTrue(result.get().isEmpty());
+        
+        criteriaSet.clear();
+        criteriaSet.add(critBEntity);
+        result = manager.lookupIndexedItems(criteriaSet);
+        Assert.assertTrue(result.isPresent());
+        Assert.assertFalse(result.get().isEmpty());
+        Assert.assertEquals(result.get().size(), 1);
+        Assert.assertTrue(result.get().contains(b));
+        
+        criteriaSet.clear();
+        criteriaSet.add(critCEntity);
+        result = manager.lookupIndexedItems(criteriaSet);
+        Assert.assertTrue(result.isPresent());
+        Assert.assertFalse(result.get().isEmpty());
+        Assert.assertEquals(result.get().size(), 1);
+        Assert.assertTrue(result.get().contains(c));
+        
+        manager.deindexEntityDescriptor(b);
+        manager.deindexEntityDescriptor(c);
+        
+        criteriaSet.clear();
+        criteriaSet.add(critAEntity);
+        result = manager.lookupIndexedItems(criteriaSet);
+        Assert.assertTrue(result.isPresent());
+        Assert.assertTrue(result.get().isEmpty());
+        
+        criteriaSet.clear();
+        criteriaSet.add(critBEntity);
+        result = manager.lookupIndexedItems(criteriaSet);
+        Assert.assertTrue(result.isPresent());
+        Assert.assertTrue(result.get().isEmpty());
+        
+        criteriaSet.clear();
+        criteriaSet.add(critCEntity);
+        result = manager.lookupIndexedItems(criteriaSet);
+        Assert.assertTrue(result.isPresent());
+        Assert.assertTrue(result.get().isEmpty());
     }
     
     @Test
@@ -181,6 +227,41 @@ public class MetadataIndexManagerTest extends XMLObjectBaseTestCase {
         Assert.assertTrue(result.get().contains(b));
         Assert.assertTrue(result.get().contains(c));
         
+        // Now test de-indexing
+        manager.deindexEntityDescriptor(a);
+        
+        criteriaSet.clear();
+        criteriaSet.add(roleCritSP);
+        result = manager.lookupIndexedItems(criteriaSet);
+        Assert.assertTrue(result.isPresent());
+        Assert.assertFalse(result.get().isEmpty());
+        Assert.assertEquals(result.get().size(), 1);
+        Assert.assertTrue(result.get().contains(b));
+        
+        criteriaSet.clear();
+        criteriaSet.add(roleCritIDP);
+        result = manager.lookupIndexedItems(criteriaSet);
+        Assert.assertTrue(result.isPresent());
+        Assert.assertFalse(result.get().isEmpty());
+        Assert.assertEquals(result.get().size(), 2);
+        Assert.assertTrue(result.get().contains(b));
+        Assert.assertTrue(result.get().contains(c));
+        
+        manager.deindexEntityDescriptor(b);
+        
+        criteriaSet.clear();
+        criteriaSet.add(roleCritSP);
+        result = manager.lookupIndexedItems(criteriaSet);
+        Assert.assertTrue(result.isPresent());
+        Assert.assertTrue(result.get().isEmpty());
+        
+        criteriaSet.clear();
+        criteriaSet.add(roleCritIDP);
+        result = manager.lookupIndexedItems(criteriaSet);
+        Assert.assertTrue(result.isPresent());
+        Assert.assertFalse(result.get().isEmpty());
+        Assert.assertEquals(result.get().size(), 1);
+        Assert.assertTrue(result.get().contains(c));
     }
 
     @Test

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the commits mailing list