From b3ac8b2cafa97fe1131b5f1e793b4df887409d89 Mon Sep 17 00:00:00 2001 From: Lennart Hensler Date: Wed, 26 Mar 2014 18:50:24 +0100 Subject: [PATCH] Changed the dimension handling of the SimpleFunctionRegistry --- ...stSimpleFunctionRegistryRegistrations.java | 8 +-- .../functions/FunctionRegistry.java | 5 +- .../functions/RegistryFunctionsProvider.java | 4 +- .../functions/SimpleFunctionRegistry.java | 60 ++++++++++++------- 4 files changed, 46 insertions(+), 31 deletions(-) diff --git a/java/com.sap.sse.datamining.test/src/com/sap/sse/datamining/impl/function/TestSimpleFunctionRegistryRegistrations.java b/java/com.sap.sse.datamining.test/src/com/sap/sse/datamining/impl/function/TestSimpleFunctionRegistryRegistrations.java index 0d7da633a77..50b2fcd3340 100644 --- a/java/com.sap.sse.datamining.test/src/com/sap/sse/datamining/impl/function/TestSimpleFunctionRegistryRegistrations.java +++ b/java/com.sap.sse.datamining.test/src/com/sap/sse/datamining/impl/function/TestSimpleFunctionRegistryRegistrations.java @@ -33,8 +33,8 @@ public class TestSimpleFunctionRegistryRegistrations { Set> expectedRegisteredFunctionsAsSet = new HashSet<>(); expectedRegisteredFunctionsAsSet.add(FunctionFactory.createMethodWrappingFunction(dimension)); Iterable> expectedRegisteredFunctions = expectedRegisteredFunctionsAsSet; - assertThat(registry.getAllRegisteredFunctions(), is(expectedRegisteredFunctions)); - assertThat(registry.getRegisteredFunctionsOf(SimpleClassWithMarkedMethods.class), is(expectedRegisteredFunctions)); + assertThat(registry.getAllFunctions(), is(expectedRegisteredFunctions)); + assertThat(registry.getFunctionsOf(SimpleClassWithMarkedMethods.class), is(expectedRegisteredFunctions)); } @Test @@ -46,7 +46,7 @@ public class TestSimpleFunctionRegistryRegistrations { expectedRegisteredFunctionsAsSet.addAll(FunctionTestsUtil.getMarkedMethodsOfSimpleClassWithMarkedMethod()); expectedRegisteredFunctionsAsSet.addAll(FunctionTestsUtil.getMethodsOfExternalLibraryClass()); Iterable> expectedRegisteredFunctions = expectedRegisteredFunctionsAsSet; - assertThat(registry.getAllRegisteredFunctions(), is(expectedRegisteredFunctions)); + assertThat(registry.getAllFunctions(), is(expectedRegisteredFunctions)); } private void registerMethodsOfTestClassesViaFunctionRetrieversTo(FunctionRegistry registry) { @@ -73,7 +73,7 @@ public class TestSimpleFunctionRegistryRegistrations { Set> expectedRegisteredFunctionsAsSet = new HashSet<>(); expectedRegisteredFunctionsAsSet.add(FunctionFactory.createMethodWrappingFunction(dimension)); Iterable> expectedRegisteredFunctions = expectedRegisteredFunctionsAsSet; - assertThat(registry.getAllRegisteredFunctions(), is(expectedRegisteredFunctions)); + assertThat(registry.getAllFunctions(), is(expectedRegisteredFunctions)); } } 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 147051180b4..5cce1e875d4 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 @@ -10,8 +10,9 @@ public interface FunctionRegistry { public void registerFunctionsRetrievedBy(ParallelFunctionRetriever functionRetriever); public void registerAll(Iterable> functions); - public Collection> getAllRegisteredFunctions(); - public Iterable> getRegisteredFunctionsOf(Class declaringClass); + public Collection> getAllFunctions(); + public Iterable> getFunctionsOf(Class declaringClass); public Collection> getAllDimensions(); + public Iterable> getDimensionsOf(Class declaringClass); } diff --git a/java/com.sap.sse.datamining/src/com/sap/sse/datamining/impl/functions/RegistryFunctionsProvider.java b/java/com.sap.sse.datamining/src/com/sap/sse/datamining/impl/functions/RegistryFunctionsProvider.java index f8436f24640..4b4bbafd2c3 100644 --- a/java/com.sap.sse.datamining/src/com/sap/sse/datamining/impl/functions/RegistryFunctionsProvider.java +++ b/java/com.sap.sse.datamining/src/com/sap/sse/datamining/impl/functions/RegistryFunctionsProvider.java @@ -60,7 +60,7 @@ public class RegistryFunctionsProvider implements FunctionProvider { @Override public Collection> getFunctionsFor(Class sourceType) { - return filterForDeclaringType(functionRegistry.getAllRegisteredFunctions(), sourceType); + return filterForDeclaringType(functionRegistry.getAllFunctions(), sourceType); } private Collection> filterForDeclaringType(Collection> functions, Class sourceType) { @@ -96,7 +96,7 @@ public class RegistryFunctionsProvider implements FunctionProvider { FilterCriteria> functionDTOFilterCriteria = new FunctionDTOFilterCriteria(functionDTO); ParallelFilter> functionMatchesDTOFilter = createFilterForCriteria(functionDTOFilterCriteria); - Collection> functionsMatchingDTO = executeFilter(functionMatchesDTOFilter, functionRegistry.getAllRegisteredFunctions()); + Collection> functionsMatchingDTO = executeFilter(functionMatchesDTOFilter, functionRegistry.getAllFunctions()); if (moreThanOneFunctionMatchedDTO(functionsMatchingDTO)) { logThatMoreThanOneFunctionMatchedDTO(functionDTO, functionsMatchingDTO); } 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 6240ad441e9..e1b6e34ad91 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 @@ -19,12 +19,12 @@ public class SimpleFunctionRegistry implements FunctionRegistry { private static final Logger LOGGER = Logger.getLogger(SimpleFunctionRegistry.class.getName()); - private final Map, Collection>> registeredFunctionsMappedByDeclaringClass; - private final Collection> dimensions; + private final Map, Collection>> functionsMappedByDeclaringClass; + private final Map, Collection>> dimensionsMappedByDeclaringClass; public SimpleFunctionRegistry() { - registeredFunctionsMappedByDeclaringClass = new HashMap<>(); - dimensions = new HashSet<>(); + functionsMappedByDeclaringClass = new HashMap<>(); + dimensionsMappedByDeclaringClass = new HashMap<>(); } @Override @@ -52,39 +52,53 @@ public class SimpleFunctionRegistry implements FunctionRegistry { @Override public void register(Function function) { putFunctionIntoMap(function); - addToDimensionsIfFunctionIsADimension(function); - } - - private void addToDimensionsIfFunctionIsADimension(Function function) { - if (function.isDimension()) { - dimensions.add(function); - } + putToDimensionsIfFunctionIsADimension(function); } private void putFunctionIntoMap(Function function) { - if (!registeredFunctionsMappedByDeclaringClass.containsKey(function.getDeclaringType())) { - registeredFunctionsMappedByDeclaringClass.put(function.getDeclaringType(), new HashSet>()); + Class key = function.getDeclaringType(); + if (!functionsMappedByDeclaringClass.containsKey(key)) { + functionsMappedByDeclaringClass.put(key, new HashSet>()); + } + functionsMappedByDeclaringClass.get(key).add(function); + } + + private void putToDimensionsIfFunctionIsADimension(Function function) { + if (function.isDimension()) { + Class key = function.getDeclaringType(); + if (!dimensionsMappedByDeclaringClass.containsKey(key)) { + dimensionsMappedByDeclaringClass.put(key, new HashSet>()); + } + dimensionsMappedByDeclaringClass.get(key).add(function); } - registeredFunctionsMappedByDeclaringClass.get(function.getDeclaringType()).add(function); } @Override - public Collection> getAllRegisteredFunctions() { - Set> registeredMethods = new HashSet<>(); - for (Collection> registeredMethodsOfClass : registeredFunctionsMappedByDeclaringClass.values()) { - registeredMethods.addAll(registeredMethodsOfClass); - } - return registeredMethods; + public Collection> getAllFunctions() { + return collectAllFunctionsIn(functionsMappedByDeclaringClass); } @Override - public Iterable> getRegisteredFunctionsOf(Class declaringClass) { - return registeredFunctionsMappedByDeclaringClass.get(declaringClass); + public Iterable> getFunctionsOf(Class declaringClass) { + return functionsMappedByDeclaringClass.get(declaringClass); } @Override public Collection> getAllDimensions() { - return dimensions; + return collectAllFunctionsIn(dimensionsMappedByDeclaringClass); + } + + @Override + public Iterable> getDimensionsOf(Class declaringClass) { + return dimensionsMappedByDeclaringClass.get(declaringClass); + } + + private Collection> collectAllFunctionsIn(Map, Collection>> functionsMap) { + Set> registeredMethods = new HashSet<>(); + for (Collection> registeredMethodsOfClass : functionsMap.values()) { + registeredMethods.addAll(registeredMethodsOfClass); + } + return registeredMethods; } }