Changed the dimension handling of the SimpleFunctionRegistry

This commit is contained in:
Lennart Hensler committed 2014-03-26 18:50:24 +01:00
1 parent 009a19708c
commit b3ac8b2caf
4 files changed
+46 -31

No files matched your search

@@ -33,8 +33,8 @@ public class TestSimpleFunctionRegistryRegistrations {
Set<Function<?>> expectedRegisteredFunctionsAsSet = new HashSet<>();
expectedRegisteredFunctionsAsSet.add(FunctionFactory.createMethodWrappingFunction(dimension));
Iterable<Function<?>> 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<Function<?>> 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<Function<?>> expectedRegisteredFunctionsAsSet = new HashSet<>();
expectedRegisteredFunctionsAsSet.add(FunctionFactory.createMethodWrappingFunction(dimension));
Iterable<Function<?>> expectedRegisteredFunctions = expectedRegisteredFunctionsAsSet;
assertThat(registry.getAllRegisteredFunctions(), is(expectedRegisteredFunctions));
assertThat(registry.getAllFunctions(), is(expectedRegisteredFunctions));
}
}
@@ -10,8 +10,9 @@ public interface FunctionRegistry {
public void registerFunctionsRetrievedBy(ParallelFunctionRetriever functionRetriever);
public void registerAll(Iterable<Function<?>> functions);
public Collection<Function<?>> getAllRegisteredFunctions();
public Iterable<Function<?>> getRegisteredFunctionsOf(Class<?> declaringClass);
public Collection<Function<?>> getAllFunctions();
public Iterable<Function<?>> getFunctionsOf(Class<?> declaringClass);
public Collection<Function<?>> getAllDimensions();
public Iterable<Function<?>> getDimensionsOf(Class<?> declaringClass);
}
@@ -60,7 +60,7 @@ public class RegistryFunctionsProvider implements FunctionProvider {
@Override
public Collection<Function<?>> getFunctionsFor(Class<?> sourceType) {
return filterForDeclaringType(functionRegistry.getAllRegisteredFunctions(), sourceType);
return filterForDeclaringType(functionRegistry.getAllFunctions(), sourceType);
}
private Collection<Function<?>> filterForDeclaringType(Collection<Function<?>> functions, Class<?> sourceType) {
@@ -96,7 +96,7 @@ public class RegistryFunctionsProvider implements FunctionProvider {
FilterCriteria<Function<?>> functionDTOFilterCriteria = new FunctionDTOFilterCriteria(functionDTO);
ParallelFilter<Function<?>> functionMatchesDTOFilter = createFilterForCriteria(functionDTOFilterCriteria);
Collection<Function<?>> functionsMatchingDTO = executeFilter(functionMatchesDTOFilter, functionRegistry.getAllRegisteredFunctions());
Collection<Function<?>> functionsMatchingDTO = executeFilter(functionMatchesDTOFilter, functionRegistry.getAllFunctions());
if (moreThanOneFunctionMatchedDTO(functionsMatchingDTO)) {
logThatMoreThanOneFunctionMatchedDTO(functionDTO, functionsMatchingDTO);
}
@@ -19,12 +19,12 @@ public class SimpleFunctionRegistry implements FunctionRegistry {
private static final Logger LOGGER = Logger.getLogger(SimpleFunctionRegistry.class.getName());
private final Map<Class<?>, Collection<Function<?>>> registeredFunctionsMappedByDeclaringClass;
private final Collection<Function<?>> dimensions;
private final Map<Class<?>, Collection<Function<?>>> functionsMappedByDeclaringClass;
private final Map<Class<?>, Collection<Function<?>>> 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<Function<?>>());
Class<?> key = function.getDeclaringType();
if (!functionsMappedByDeclaringClass.containsKey(key)) {
functionsMappedByDeclaringClass.put(key, new HashSet<Function<?>>());
}
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<Function<?>>());
}
dimensionsMappedByDeclaringClass.get(key).add(function);
}
registeredFunctionsMappedByDeclaringClass.get(function.getDeclaringType()).add(function);
}
@Override
public Collection<Function<?>> getAllRegisteredFunctions() {
Set<Function<?>> registeredMethods = new HashSet<>();
for (Collection<Function<?>> registeredMethodsOfClass : registeredFunctionsMappedByDeclaringClass.values()) {
registeredMethods.addAll(registeredMethodsOfClass);
}
return registeredMethods;
public Collection<Function<?>> getAllFunctions() {
return collectAllFunctionsIn(functionsMappedByDeclaringClass);
}
@Override
public Iterable<Function<?>> getRegisteredFunctionsOf(Class<?> declaringClass) {
return registeredFunctionsMappedByDeclaringClass.get(declaringClass);
public Iterable<Function<?>> getFunctionsOf(Class<?> declaringClass) {
return functionsMappedByDeclaringClass.get(declaringClass);
}
@Override
public Collection<Function<?>> getAllDimensions() {
return dimensions;
return collectAllFunctionsIn(dimensionsMappedByDeclaringClass);
}
@Override
public Iterable<Function<?>> getDimensionsOf(Class<?> declaringClass) {
return dimensionsMappedByDeclaringClass.get(declaringClass);
}
private Collection<Function<?>> collectAllFunctionsIn(Map<Class<?>, Collection<Function<?>>> functionsMap) {
Set<Function<?>> registeredMethods = new HashSet<>();
for (Collection<Function<?>> registeredMethodsOfClass : functionsMap.values()) {
registeredMethods.addAll(registeredMethodsOfClass);
}
return registeredMethods;
}
}