From 47feb629e625ed81bb1726d9ebfc18e218cf34c8 Mon Sep 17 00:00:00 2001 From: Lennart Hensler Date: Sat, 7 Jun 2014 13:12:19 +0200 Subject: [PATCH] Implemented the possibility to unregister classes from the registry --- ...s.java => TestSimpleFunctionRegistry.java} | 28 +++++++++++++++- .../functions/FunctionRegistry.java | 2 ++ .../functions/SimpleFunctionRegistry.java | 32 +++++++++++++++---- 3 files changed, 55 insertions(+), 7 deletions(-) rename java/com.sap.sse.datamining.test/src/com/sap/sse/datamining/impl/functions/{TestSimpleFunctionRegistryRegistrations.java => TestSimpleFunctionRegistry.java} (64%) diff --git a/java/com.sap.sse.datamining.test/src/com/sap/sse/datamining/impl/functions/TestSimpleFunctionRegistryRegistrations.java b/java/com.sap.sse.datamining.test/src/com/sap/sse/datamining/impl/functions/TestSimpleFunctionRegistry.java similarity index 64% rename from java/com.sap.sse.datamining.test/src/com/sap/sse/datamining/impl/functions/TestSimpleFunctionRegistryRegistrations.java rename to java/com.sap.sse.datamining.test/src/com/sap/sse/datamining/impl/functions/TestSimpleFunctionRegistry.java index baaaca002ed..9333e8840ef 100644 --- a/java/com.sap.sse.datamining.test/src/com/sap/sse/datamining/impl/functions/TestSimpleFunctionRegistryRegistrations.java +++ b/java/com.sap.sse.datamining.test/src/com/sap/sse/datamining/impl/functions/TestSimpleFunctionRegistry.java @@ -19,7 +19,7 @@ import com.sap.sse.datamining.test.functions.test_classes.Test_ExternalLibraryCl import com.sap.sse.datamining.test.util.ExpectedFunctionRegistryUtil; -public class TestSimpleFunctionRegistryRegistrations { +public class TestSimpleFunctionRegistry { private static ExpectedFunctionRegistryUtil functionRegistryUtil; @@ -58,5 +58,31 @@ public class TestSimpleFunctionRegistryRegistrations { Collection> expectedExternalFunctions = functionRegistryUtil.getExpectedExternalFunctionsFor(Test_ExternalLibraryClass.class); assertThat(registry.getExternalFunctions(), is(expectedExternalFunctions)); } + + @Test + public void testUnregistration() { + FunctionRegistry registry = new SimpleFunctionRegistry(); + registry.registerAllWithInternalFunctionPolicy(internalClassesToScan); + + Collection> expectedDimensions = new HashSet<>(); + expectedDimensions.addAll(functionRegistryUtil.getExpectedDimensionsFor(Test_HasLegContext.class)); + expectedDimensions.addAll(functionRegistryUtil.getExpectedDimensionsFor(Test_HasRaceContext.class)); + assertThat(registry.getDimensions(), is(expectedDimensions)); + + Set> classesToUnregister = new HashSet<>(); + classesToUnregister.add(Test_HasLegContext.class); + registry.unregisterAllFunctionsOf(classesToUnregister); + + expectedDimensions = functionRegistryUtil.getExpectedDimensionsFor(Test_HasRaceContext.class); + assertThat(registry.getDimensions(), is(expectedDimensions)); + + registry.registerAllWithInternalFunctionPolicy(internalClassesToScan); + classesToUnregister = new HashSet<>(); + classesToUnregister.add(Test_HasRaceContext.class); + registry.unregisterAllFunctionsOf(classesToUnregister); + + expectedDimensions = functionRegistryUtil.getExpectedDimensionsFor(Test_HasLegContext.class); + assertThat(registry.getDimensions(), is(expectedDimensions)); + } } diff --git a/java/com.sap.sse.datamining/src/com/sap/sse/datamining/functions/FunctionRegistry.java b/java/com.sap.sse.datamining/src/com/sap/sse/datamining/functions/FunctionRegistry.java index f571d51567d..82f68e297d4 100644 --- a/java/com.sap.sse.datamining/src/com/sap/sse/datamining/functions/FunctionRegistry.java +++ b/java/com.sap.sse.datamining/src/com/sap/sse/datamining/functions/FunctionRegistry.java @@ -7,6 +7,8 @@ public interface FunctionRegistry { public void registerAllWithInternalFunctionPolicy(Collection> classesToScan); public void registerAllWithExternalFunctionPolicy(Collection> externalClassesToScan); + public void unregisterAllFunctionsOf(Collection> classesToUnregister); + public Collection> getAllFunctions(); public Collection> getAllFunctionsOf(Class declaringType); public Collection> getStatistics(); diff --git a/java/com.sap.sse.datamining/src/com/sap/sse/datamining/impl/functions/SimpleFunctionRegistry.java b/java/com.sap.sse.datamining/src/com/sap/sse/datamining/impl/functions/SimpleFunctionRegistry.java index 399700e4b01..2a0c8826d56 100644 --- a/java/com.sap.sse.datamining/src/com/sap/sse/datamining/impl/functions/SimpleFunctionRegistry.java +++ b/java/com.sap.sse.datamining/src/com/sap/sse/datamining/impl/functions/SimpleFunctionRegistry.java @@ -22,11 +22,18 @@ public class SimpleFunctionRegistry implements FunctionRegistry { private final Map, Set>> statistics; private final Map, Set>> dimensions; private final Map, Set>> externalFunctions; + + private final Collection, Set>>> functionMaps; public SimpleFunctionRegistry() { statistics = new HashMap<>(); dimensions = new HashMap<>(); externalFunctions = new HashMap<>(); + + functionMaps = new ArrayList<>(); + functionMaps.add(statistics); + functionMaps.add(dimensions); + functionMaps.add(externalFunctions); } @Override @@ -130,21 +137,34 @@ public class SimpleFunctionRegistry implements FunctionRegistry { return !method.getReturnType().equals(Void.TYPE) && !method.getDeclaringClass().equals(Object.class); } + @Override + public void unregisterAllFunctionsOf(Collection> classesToUnregister) { + for (Class classToUnregister : classesToUnregister) { + unregisterAllFunctionsOf(classToUnregister); + } + } + + private void unregisterAllFunctionsOf(Class classToUnregister) { + for (Map, Set>> functionMap : functionMaps) { + functionMap.remove(classToUnregister); + } + } + @Override public Collection> getAllFunctions() { Collection> allFunctions = new HashSet<>(); - allFunctions.addAll(getStatistics()); - allFunctions.addAll(getDimensions()); - allFunctions.addAll(getExternalFunctions()); + for (Map, Set>> functionMap : functionMaps) { + allFunctions.addAll(asSet(functionMap)); + } return allFunctions; } @Override public Collection> getAllFunctionsOf(Class declaringType) { Collection> allFunctions = new HashSet<>(); - allFunctions.addAll(getStatisticsOf(declaringType)); - allFunctions.addAll(getDimensionsOf(declaringType)); - allFunctions.addAll(getExternalFunctionsOf(declaringType)); + for (Map, Set>> functionMap : functionMaps) { + allFunctions.addAll(functionMap.get(declaringType)); + } return allFunctions; }