mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-11-02 17:19:37 +00:00
The RegistryFunctionProvider can now be used with multiple providers
This will be useful, when users can create their own functions. These User-Functions will be stored in an user specific registry.
This commit is contained in:
1 parent
7ac58bda34
commit
5682b77b27
3 files changed
+24
-14
No files matched your search
+7
-7
@@ -18,7 +18,7 @@ import com.sap.sse.datamining.functions.Function;
|
||||
import com.sap.sse.datamining.functions.FunctionProvider;
|
||||
import com.sap.sse.datamining.functions.FunctionRegistry;
|
||||
import com.sap.sse.datamining.i18n.DataMiningStringMessages;
|
||||
import com.sap.sse.datamining.impl.functions.RegistryFunctionsProvider;
|
||||
import com.sap.sse.datamining.impl.functions.RegistryFunctionProvider;
|
||||
import com.sap.sse.datamining.impl.functions.SimpleFunctionRegistry;
|
||||
import com.sap.sse.datamining.shared.dto.FunctionDTO;
|
||||
import com.sap.sse.datamining.test.function.test_classes.ContainerElement;
|
||||
@@ -57,7 +57,7 @@ public class TestFunctionProvider {
|
||||
|
||||
@Test
|
||||
public void testGetDimensionsForType() {
|
||||
FunctionProvider functionProvider = new RegistryFunctionsProvider(functionRegistry);
|
||||
FunctionProvider functionProvider = new RegistryFunctionProvider(functionRegistry);
|
||||
|
||||
Collection<Function<?>> expectedDimensions = FunctionTestsUtil.getDimensionsFor(DataTypeWithContext.class);
|
||||
Collection<Function<?>> providedDimensions = new HashSet<>(functionProvider.getDimensionsFor(DataTypeWithContext.class));
|
||||
@@ -69,7 +69,7 @@ public class TestFunctionProvider {
|
||||
|
||||
@Test
|
||||
public void testGetFunctionsForType() {
|
||||
FunctionProvider functionProvider = new RegistryFunctionsProvider(functionRegistry);
|
||||
FunctionProvider functionProvider = new RegistryFunctionProvider(functionRegistry);
|
||||
|
||||
Collection<Function<?>> expectedFunctions = FunctionTestsUtil.getMarkedMethodsOfDataTypeWithContextAndItsSupertypes();
|
||||
Collection<Function<?>> providedFunctions = new HashSet<>(functionProvider.getFunctionsFor(DataTypeWithContext.class));
|
||||
@@ -86,7 +86,7 @@ public class TestFunctionProvider {
|
||||
Function<Object> getRegattaName = FunctionFactory.createMethodWrappingFunction(getRegattaNameMethod);
|
||||
FunctionDTO getRegattaNameDTO = FunctionDTOFactory.createFunctionDTO(getRegattaName, Locale.ENGLISH, stringMessages);
|
||||
|
||||
FunctionProvider functionProvider = new RegistryFunctionsProvider(functionRegistry);
|
||||
FunctionProvider functionProvider = new RegistryFunctionProvider(functionRegistry);
|
||||
@SuppressWarnings("unchecked") // Hamcrest requires type matching of actual and expected type, so the Functions have to be specific (without <?>)
|
||||
Function<Object> providedFunction = (Function<Object>) functionProvider.getFunctionForDTO(getRegattaNameDTO);
|
||||
assertThat(providedFunction, is(getRegattaName));
|
||||
@@ -98,19 +98,19 @@ public class TestFunctionProvider {
|
||||
Function<Object> increment = FunctionFactory.createMethodWrappingFunction(incrementMethod);
|
||||
FunctionDTO incrementDTO = FunctionDTOFactory.createFunctionDTO(increment, Locale.ENGLISH, stringMessages);
|
||||
|
||||
FunctionProvider functionProvider = new RegistryFunctionsProvider(functionRegistry);
|
||||
FunctionProvider functionProvider = new RegistryFunctionProvider(functionRegistry);
|
||||
assertThat(functionProvider.getFunctionForDTO(incrementDTO), is(nullValue()));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetFunctionForNullDTO() {
|
||||
FunctionProvider functionProvider = new RegistryFunctionsProvider(functionRegistry);
|
||||
FunctionProvider functionProvider = new RegistryFunctionProvider(functionRegistry);
|
||||
assertThat(functionProvider.getFunctionForDTO(null), is(nullValue()));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetTransitiveDimension() throws ClassCastException, NoSuchMethodException, SecurityException {
|
||||
FunctionProvider functionProvider = new RegistryFunctionsProvider(functionRegistry);
|
||||
FunctionProvider functionProvider = new RegistryFunctionProvider(functionRegistry);
|
||||
|
||||
Collection<Function<?>> expectedDimensions = new HashSet<>();
|
||||
expectedDimensions.add(FunctionFactory.createMethodWrappingFunction(ContainerElement.class.getMethod("getName",
|
||||
|
||||
+2
-2
@@ -20,7 +20,7 @@ import com.sap.sse.datamining.functions.ClassesWithFunctionsService;
|
||||
import com.sap.sse.datamining.functions.FunctionProvider;
|
||||
import com.sap.sse.datamining.functions.FunctionRegistry;
|
||||
import com.sap.sse.datamining.i18n.DataMiningStringMessages;
|
||||
import com.sap.sse.datamining.impl.functions.RegistryFunctionsProvider;
|
||||
import com.sap.sse.datamining.impl.functions.RegistryFunctionProvider;
|
||||
import com.sap.sse.datamining.impl.functions.SimpleFunctionRegistry;
|
||||
|
||||
public class DataMiningActivator implements BundleActivator {
|
||||
@@ -44,7 +44,7 @@ public class DataMiningActivator implements BundleActivator {
|
||||
new LinkedBlockingQueue<Runnable>());
|
||||
|
||||
FunctionRegistry functionRegistry = createAndBuildFunctionRegistry();
|
||||
FunctionProvider functionProvider = new RegistryFunctionsProvider(functionRegistry);
|
||||
FunctionProvider functionProvider = new RegistryFunctionProvider(functionRegistry);
|
||||
|
||||
dataMiningServer = new DataMiningServerImpl(functionRegistry, functionProvider);
|
||||
registerDataMiningServer();
|
||||
|
||||
+15
-5
@@ -12,14 +12,18 @@ import com.sap.sse.datamining.functions.FunctionProvider;
|
||||
import com.sap.sse.datamining.functions.FunctionRegistry;
|
||||
import com.sap.sse.datamining.shared.dto.FunctionDTO;
|
||||
|
||||
public class RegistryFunctionsProvider implements FunctionProvider {
|
||||
public class RegistryFunctionProvider implements FunctionProvider {
|
||||
|
||||
private static final Logger LOGGER = Logger.getLogger(RegistryFunctionsProvider.class.getName());
|
||||
private static final Logger LOGGER = Logger.getLogger(RegistryFunctionProvider.class.getName());
|
||||
|
||||
private FunctionRegistry functionRegistry;
|
||||
private final Collection<FunctionRegistry> functionRegistries;
|
||||
|
||||
public RegistryFunctionsProvider(FunctionRegistry functionRegistry) {
|
||||
this.functionRegistry = functionRegistry;
|
||||
public RegistryFunctionProvider(FunctionRegistry... functionRegistry) {
|
||||
this(Arrays.asList(functionRegistry));
|
||||
}
|
||||
|
||||
public RegistryFunctionProvider(Collection<FunctionRegistry> functionRegistries) {
|
||||
this.functionRegistries = new HashSet<>(functionRegistries);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -58,9 +62,11 @@ public class RegistryFunctionsProvider implements FunctionProvider {
|
||||
|
||||
private Collection<Function<?>> getDimensionsFor(Collection<Class<?>> typesToRetrieve) {
|
||||
Collection<Function<?>> dimensions = new HashSet<>();
|
||||
for (FunctionRegistry functionRegistry : functionRegistries) {
|
||||
for (Class<?> typeToRetrieve : typesToRetrieve) {
|
||||
dimensions.addAll(functionRegistry.getDimensionsOf(typeToRetrieve));
|
||||
}
|
||||
}
|
||||
return dimensions;
|
||||
}
|
||||
|
||||
@@ -73,9 +79,11 @@ public class RegistryFunctionsProvider implements FunctionProvider {
|
||||
|
||||
private Collection<Function<?>> getFunctionsFor(Collection<Class<?>> typesToRetrieve) {
|
||||
Collection<Function<?>> dimensions = new HashSet<>();
|
||||
for (FunctionRegistry functionRegistry : functionRegistries) {
|
||||
for (Class<?> typeToRetrieve : typesToRetrieve) {
|
||||
dimensions.addAll(functionRegistry.getFunctionsOf(typeToRetrieve));
|
||||
}
|
||||
}
|
||||
return dimensions;
|
||||
}
|
||||
|
||||
@@ -134,11 +142,13 @@ public class RegistryFunctionsProvider implements FunctionProvider {
|
||||
private Collection<Function<?>> getFunctionsForDTO(FunctionDTO functionDTO) {
|
||||
Collection<Function<?>> functionsMatchingDTO = new HashSet<>();
|
||||
FilterCriteria<Function<?>> functionDTOFilterCriteria = new FunctionMatchesDTOFilterCriteria(functionDTO);
|
||||
for (FunctionRegistry functionRegistry : functionRegistries) {
|
||||
for (Function<?> function : functionRegistry.getAllFunctions()) {
|
||||
if (functionDTOFilterCriteria.matches(function)) {
|
||||
functionsMatchingDTO.add(function);
|
||||
}
|
||||
}
|
||||
}
|
||||
return functionsMatchingDTO;
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user