Created stubs to get the function for a function dto

This commit is contained in:
Lennart Hensler committed 2014-01-30 15:53:06 +01:00
1 parent ee2f25b23a
commit 1202a0469f
4 files changed
+54 -8

No files matched your search

@@ -6,15 +6,18 @@ import static org.junit.Assert.assertThat;
import java.lang.reflect.Method;
import java.util.Collection;
import java.util.HashSet;
import java.util.Locale;
import org.junit.Before;
import org.junit.Test;
import com.sap.sailing.datamining.DataMiningStringMessages;
import com.sap.sailing.datamining.factories.FunctionFactory;
import com.sap.sailing.datamining.function.Function;
import com.sap.sailing.datamining.function.FunctionProvider;
import com.sap.sailing.datamining.function.FunctionRegistry;
import com.sap.sailing.datamining.function.ParallelFunctionRetriever;
import com.sap.sailing.datamining.shared.dto.FunctionDTO;
import com.sap.sailing.datamining.test.function.test_classes.DataTypeWithContext;
import com.sap.sailing.datamining.test.function.test_classes.DataTypeWithContextImpl;
import com.sap.sailing.datamining.test.function.test_classes.DataTypeWithContextProcessor;
@@ -22,9 +25,12 @@ import com.sap.sailing.datamining.test.function.test_classes.ExtendingInterface;
import com.sap.sailing.datamining.test.function.test_classes.ExternalLibraryClass;
import com.sap.sailing.datamining.test.function.test_classes.SimpleClassWithMarkedMethods;
import com.sap.sailing.datamining.test.util.FunctionTestsUtil;
import com.sap.sailing.datamining.test.util.StringMessagesForTests;
public class TestFunctionProvider {
private static final DataMiningStringMessages stringMessages = new StringMessagesForTests();
private FunctionRegistry functionRegistry;
@Before
@@ -75,5 +81,18 @@ public class TestFunctionProvider {
providedFunctions = new HashSet<>(functionProvider.getFunctionsFor(DataTypeWithContextImpl.class));
assertThat(providedFunctions, is(expectedFunctions));
}
@Test
public void testGetFunctionForDTO() {
Method getRegattaNameMethod = FunctionTestsUtil.getMethodFromClass(DataTypeWithContext.class, "getRegattaName");
Function<Object> getRegattaName = FunctionFactory.createMethodWrappingFunction(getRegattaNameMethod);
FunctionDTO getRegattaNameDTO = getRegattaName.asDTO(Locale.ENGLISH, stringMessages);
FunctionProvider functionProvider = new RegistryFunctionsProvider(functionRegistry);
@SuppressWarnings("unchecked") // Hamcrest requires type matching of actual and expected, so the Functions have to be specific (without <?>)
Function<Object> providedFunction = (Function<Object>) functionProvider.getFunctionFor(getRegattaNameDTO);
assertThat(providedFunction, is(getRegattaName));
}
}
@@ -2,10 +2,14 @@ package com.sap.sailing.datamining.function;
import java.util.Collection;
import com.sap.sailing.datamining.shared.dto.FunctionDTO;
public interface FunctionProvider {
public Collection<Function<?>> getDimenionsFor(Class<?> dataType);
public Collection<Function<?>> getFunctionsFor(Class<?> sourceType);
public Function<?> getFunctionFor(FunctionDTO functionDTO);
}
@@ -120,7 +120,20 @@ public class MethodWrappingFunction<ReturnType> extends AbstractFunction<ReturnT
@Override
public String toString() {
return getDeclaringClass().getSimpleName() + "." + getMethodName();
return getDeclaringClass().getSimpleName() + "." + getMethodName() + "(" + parametersAsString() + ") : " + method.getReturnType().getSimpleName();
}
private String parametersAsString() {
StringBuilder parameterBuilder = new StringBuilder();
boolean first = true;
for (Class<?> parameterType : getParameters()) {
if (!first) {
parameterBuilder.append(", ");
}
parameterBuilder.append(parameterType.getSimpleName());
first = false;
}
return parameterBuilder.toString();
}
@Override
@@ -7,7 +7,6 @@ import java.util.logging.Level;
import java.util.logging.Logger;
import com.sap.sailing.datamining.ConcurrentFilterCriteria;
import com.sap.sailing.datamining.DataMiningFactory;
import com.sap.sailing.datamining.FiltrationWorker;
import com.sap.sailing.datamining.ParallelFilter;
import com.sap.sailing.datamining.WorkerBuilder;
@@ -15,7 +14,9 @@ import com.sap.sailing.datamining.builders.FilterByCriteriaBuilder;
import com.sap.sailing.datamining.function.Function;
import com.sap.sailing.datamining.function.FunctionProvider;
import com.sap.sailing.datamining.function.FunctionRegistry;
import com.sap.sailing.datamining.impl.Activator;
import com.sap.sailing.datamining.impl.PartitioningParallelFilter;
import com.sap.sailing.datamining.shared.dto.FunctionDTO;
public class RegistryFunctionsProvider implements FunctionProvider {
@@ -39,7 +40,8 @@ public class RegistryFunctionsProvider implements FunctionProvider {
private Collection<Function<?>> filterForSourceType(Collection<Function<?>> functions, Class<?> sourceType) {
Collection<Function<?>> dimensionsForType = new HashSet<>();
ParallelFilter<Function<?>> dimensionForTypeFilter = createFilterForSourceTypeFilter(sourceType);
ConcurrentFilterCriteria<Function<?>> sourceTypeFilterCriteria = createSourceTypeFilterCriteria(sourceType);
ParallelFilter<Function<?>> dimensionForTypeFilter = createFilterForSourceTypeFilter(sourceTypeFilterCriteria);
try {
dimensionsForType = dimensionForTypeFilter.start(functions).get();
@@ -50,11 +52,19 @@ public class RegistryFunctionsProvider implements FunctionProvider {
return dimensionsForType;
}
private ParallelFilter<Function<?>> createFilterForSourceTypeFilter(Class<?> sourceType) {
ConcurrentFilterCriteria<Function<?>> declaringTypeOrParameterTypeCriteria = new DeclaringTypeOrParameterTypeCriteria(sourceType);
WorkerBuilder<FiltrationWorker<Function<?>>> workerBuilder = new FilterByCriteriaBuilder<Function<?>>(declaringTypeOrParameterTypeCriteria);
ParallelFilter<Function<?>> dimensionForTypeFilter = new PartitioningParallelFilter<>(workerBuilder, DataMiningFactory.getExecutor());
return dimensionForTypeFilter;
private ConcurrentFilterCriteria<Function<?>> createSourceTypeFilterCriteria(Class<?> sourceType) {
return new DeclaringTypeOrParameterTypeCriteria(sourceType);
}
private ParallelFilter<Function<?>> createFilterForSourceTypeFilter(ConcurrentFilterCriteria<Function<?>> filterCriteria) {
WorkerBuilder<FiltrationWorker<Function<?>>> workerBuilder = new FilterByCriteriaBuilder<Function<?>>(filterCriteria);
return new PartitioningParallelFilter<>(workerBuilder, Activator.getExecutor());
}
@Override
public Function<?> getFunctionFor(FunctionDTO functionDTO) {
// TODO Auto-generated method stub
return null;
}
}