Implemented the possibility to unregister classes from the registry

This commit is contained in:
Lennart Hensler committed 2014-06-07 13:12:19 +02:00
1 parent 106b8392c1
commit 47feb629e6
3 files changed
+55 -7

No files matched your search

@@ -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<Function<?>> expectedExternalFunctions = functionRegistryUtil.getExpectedExternalFunctionsFor(Test_ExternalLibraryClass.class);
assertThat(registry.getExternalFunctions(), is(expectedExternalFunctions));
}
@Test
public void testUnregistration() {
FunctionRegistry registry = new SimpleFunctionRegistry();
registry.registerAllWithInternalFunctionPolicy(internalClassesToScan);
Collection<Function<?>> expectedDimensions = new HashSet<>();
expectedDimensions.addAll(functionRegistryUtil.getExpectedDimensionsFor(Test_HasLegContext.class));
expectedDimensions.addAll(functionRegistryUtil.getExpectedDimensionsFor(Test_HasRaceContext.class));
assertThat(registry.getDimensions(), is(expectedDimensions));
Set<Class<?>> 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));
}
}
@@ -7,6 +7,8 @@ public interface FunctionRegistry {
public void registerAllWithInternalFunctionPolicy(Collection<Class<?>> classesToScan);
public void registerAllWithExternalFunctionPolicy(Collection<Class<?>> externalClassesToScan);
public void unregisterAllFunctionsOf(Collection<Class<?>> classesToUnregister);
public Collection<Function<?>> getAllFunctions();
public Collection<Function<?>> getAllFunctionsOf(Class<?> declaringType);
public Collection<Function<?>> getStatistics();
@@ -22,11 +22,18 @@ public class SimpleFunctionRegistry implements FunctionRegistry {
private final Map<Class<?>, Set<Function<?>>> statistics;
private final Map<Class<?>, Set<Function<?>>> dimensions;
private final Map<Class<?>, Set<Function<?>>> externalFunctions;
private final Collection<Map<Class<?>, Set<Function<?>>>> 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<Class<?>> classesToUnregister) {
for (Class<?> classToUnregister : classesToUnregister) {
unregisterAllFunctionsOf(classToUnregister);
}
}
private void unregisterAllFunctionsOf(Class<?> classToUnregister) {
for (Map<Class<?>, Set<Function<?>>> functionMap : functionMaps) {
functionMap.remove(classToUnregister);
}
}
@Override
public Collection<Function<?>> getAllFunctions() {
Collection<Function<?>> allFunctions = new HashSet<>();
allFunctions.addAll(getStatistics());
allFunctions.addAll(getDimensions());
allFunctions.addAll(getExternalFunctions());
for (Map<Class<?>, Set<Function<?>>> functionMap : functionMaps) {
allFunctions.addAll(asSet(functionMap));
}
return allFunctions;
}
@Override
public Collection<Function<?>> getAllFunctionsOf(Class<?> declaringType) {
Collection<Function<?>> allFunctions = new HashSet<>();
allFunctions.addAll(getStatisticsOf(declaringType));
allFunctions.addAll(getDimensionsOf(declaringType));
allFunctions.addAll(getExternalFunctionsOf(declaringType));
for (Map<Class<?>, Set<Function<?>>> functionMap : functionMaps) {
allFunctions.addAll(functionMap.get(declaringType));
}
return allFunctions;
}