mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-07 21:01:03 +00:00
It's now possible to register external classes
This commit is contained in:
1 parent
25b35fd615
commit
5924455fa0
9 files changed
+52
-20
No files matched your search
+2
-2
@@ -17,7 +17,7 @@ import com.sap.sse.datamining.functions.Function;
|
||||
import com.sap.sse.datamining.i18n.DataMiningStringMessages;
|
||||
import com.sap.sse.datamining.shared.dto.FunctionDTO;
|
||||
import com.sap.sse.datamining.shared.impl.dto.FunctionDTOImpl;
|
||||
import com.sap.sse.datamining.test.functions.test_classes.ExternalLibraryClass;
|
||||
import com.sap.sse.datamining.test.functions.test_classes.Test_ExternalLibraryClass;
|
||||
import com.sap.sse.datamining.test.functions.test_classes.SimpleClassWithMarkedMethods;
|
||||
import com.sap.sse.datamining.test.util.FunctionTestsUtil;
|
||||
import com.sap.sse.datamining.test.util.TestsUtil;
|
||||
@@ -35,7 +35,7 @@ public class TestFunctionDTOConstruction {
|
||||
public void initializeMethods() {
|
||||
dimensionMethod = FunctionTestsUtil.getMethodFromClass(SimpleClassWithMarkedMethods.class, "dimension");
|
||||
sideEffectFreeValueMethod = FunctionTestsUtil.getMethodFromClass(SimpleClassWithMarkedMethods.class, "sideEffectFreeValue");
|
||||
externalLibraryMethod = FunctionTestsUtil.getMethodFromClass(ExternalLibraryClass.class, "foo");
|
||||
externalLibraryMethod = FunctionTestsUtil.getMethodFromClass(Test_ExternalLibraryClass.class, "foo");
|
||||
incrementMethod = FunctionTestsUtil.getMethodFromClass(SimpleClassWithMarkedMethods.class, "increment", int.class);
|
||||
}
|
||||
|
||||
|
||||
+4
-10
@@ -18,14 +18,12 @@ 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.RegistryFunctionProvider;
|
||||
import com.sap.sse.datamining.impl.functions.SimpleFunctionRegistry;
|
||||
import com.sap.sse.datamining.shared.dto.FunctionDTO;
|
||||
import com.sap.sse.datamining.test.functions.registry.test_contexts.Test_HasLegContext;
|
||||
import com.sap.sse.datamining.test.functions.test_classes.ContainerElement;
|
||||
import com.sap.sse.datamining.test.functions.test_classes.DataTypeWithContext;
|
||||
import com.sap.sse.datamining.test.functions.test_classes.DataTypeWithContextImpl;
|
||||
import com.sap.sse.datamining.test.functions.test_classes.ExtendingInterface;
|
||||
import com.sap.sse.datamining.test.functions.test_classes.ExternalLibraryClass;
|
||||
import com.sap.sse.datamining.test.functions.test_classes.Test_ExternalLibraryClass;
|
||||
import com.sap.sse.datamining.test.functions.test_classes.MarkedContainer;
|
||||
import com.sap.sse.datamining.test.functions.test_classes.SimpleClassWithMarkedMethods;
|
||||
import com.sap.sse.datamining.test.util.FunctionTestsUtil;
|
||||
@@ -42,15 +40,11 @@ public class TestFunctionProvider {
|
||||
functionRegistry = new SimpleFunctionRegistry();
|
||||
|
||||
Collection<Class<?>> internalClassesToScan = new HashSet<>();
|
||||
internalClassesToScan.add(SimpleClassWithMarkedMethods.class);
|
||||
internalClassesToScan.add(DataTypeWithContext.class);
|
||||
internalClassesToScan.add(ExtendingInterface.class);
|
||||
internalClassesToScan.add(MarkedContainer.class);
|
||||
internalClassesToScan.add(ContainerElement.class);
|
||||
internalClassesToScan.add(Test_HasLegContext.class);
|
||||
functionRegistry.registerAllWithInternalFunctionPolicy(internalClassesToScan);
|
||||
|
||||
Collection<Class<?>> externalClassesToScan = new HashSet<>();
|
||||
externalClassesToScan.add(ExternalLibraryClass.class);
|
||||
externalClassesToScan.add(Test_ExternalLibraryClass.class);
|
||||
functionRegistry.registerAllWithExternalFunctionPolicy(externalClassesToScan);
|
||||
}
|
||||
|
||||
|
||||
+2
-2
@@ -13,7 +13,7 @@ import com.sap.sse.datamining.factories.FunctionFactory;
|
||||
import com.sap.sse.datamining.functions.Function;
|
||||
import com.sap.sse.datamining.i18n.DataMiningStringMessages;
|
||||
import com.sap.sse.datamining.impl.functions.MethodWrappingFunction;
|
||||
import com.sap.sse.datamining.test.functions.test_classes.ExternalLibraryClass;
|
||||
import com.sap.sse.datamining.test.functions.test_classes.Test_ExternalLibraryClass;
|
||||
import com.sap.sse.datamining.test.functions.test_classes.SimpleClassWithMarkedMethods;
|
||||
import com.sap.sse.datamining.test.util.FunctionTestsUtil;
|
||||
import com.sap.sse.datamining.test.util.TestsUtil;
|
||||
@@ -28,7 +28,7 @@ public class TestMethodWrappingFunction {
|
||||
public void initializeMethods() {
|
||||
dimensionMethod = FunctionTestsUtil.getMethodFromClass(SimpleClassWithMarkedMethods.class, "dimension");
|
||||
sideEffectFreeValueMethod = FunctionTestsUtil.getMethodFromClass(SimpleClassWithMarkedMethods.class, "sideEffectFreeValue");
|
||||
externalLibraryMethod = FunctionTestsUtil.getMethodFromClass(ExternalLibraryClass.class, "foo");
|
||||
externalLibraryMethod = FunctionTestsUtil.getMethodFromClass(Test_ExternalLibraryClass.class, "foo");
|
||||
}
|
||||
|
||||
@Test(expected=IllegalArgumentException.class)
|
||||
|
||||
+18
@@ -21,29 +21,38 @@ import com.sap.sse.datamining.test.functions.registry.test_classes.Test_Leg;
|
||||
import com.sap.sse.datamining.test.functions.registry.test_classes.Test_Named;
|
||||
import com.sap.sse.datamining.test.functions.registry.test_contexts.Test_HasLegContext;
|
||||
import com.sap.sse.datamining.test.functions.registry.test_contexts.Test_HasRaceContext;
|
||||
import com.sap.sse.datamining.test.functions.test_classes.Test_ExternalLibraryClass;
|
||||
|
||||
|
||||
public class TestSimpleFunctionRegistryRegistrations {
|
||||
|
||||
private Set<Class<?>> internalClassesToScan;
|
||||
private HashSet<Class<?>> externalClassesToScan;
|
||||
|
||||
@Before
|
||||
public void initializeClassesToScan() {
|
||||
internalClassesToScan = new HashSet<>();
|
||||
internalClassesToScan.add(Test_HasLegContext.class);
|
||||
internalClassesToScan.add(Test_HasRaceContext.class);
|
||||
|
||||
externalClassesToScan = new HashSet<>();
|
||||
externalClassesToScan.add(Test_ExternalLibraryClass.class);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testRegistration() throws NoSuchMethodException, SecurityException {
|
||||
FunctionRegistry registry = new SimpleFunctionRegistry();
|
||||
registry.registerAllWithInternalFunctionPolicy(internalClassesToScan);
|
||||
registry.registerAllWithExternalFunctionPolicy(externalClassesToScan);
|
||||
|
||||
Collection<Function<?>> expectedDimensions = createExpectedDimensions();
|
||||
assertThat(registry.getDimensions(), is(expectedDimensions));
|
||||
|
||||
Collection<Function<?>> expectedStatistics = createExpectedStatistics();
|
||||
assertThat(registry.getStatistics(), is(expectedStatistics));
|
||||
|
||||
Collection<Function<?>> expectedExternalFunctions = createExpectedExternalFunctions();
|
||||
assertThat(registry.getExternalFunctions(), is(expectedExternalFunctions));
|
||||
}
|
||||
|
||||
private Collection<Function<?>> createExpectedDimensions() throws NoSuchMethodException, SecurityException {
|
||||
@@ -97,4 +106,13 @@ public class TestSimpleFunctionRegistryRegistrations {
|
||||
return statistics;
|
||||
}
|
||||
|
||||
private Collection<Function<?>> createExpectedExternalFunctions() throws NoSuchMethodException, SecurityException {
|
||||
Method fooMethod = Test_ExternalLibraryClass.class.getMethod("foo", new Class<?>[0]);
|
||||
Function<?> foo = FunctionFactory.createMethodWrappingFunction(fooMethod);
|
||||
|
||||
Collection<Function<?>> externalFunctions = new HashSet<>();
|
||||
externalFunctions.add(foo);
|
||||
return externalFunctions;
|
||||
}
|
||||
|
||||
}
|
||||
+2
-2
@@ -14,7 +14,7 @@ import com.sap.sse.datamining.test.functions.test_classes.DataTypeInterface;
|
||||
import com.sap.sse.datamining.test.functions.test_classes.DataTypeWithContext;
|
||||
import com.sap.sse.datamining.test.functions.test_classes.DataTypeWithContextImpl;
|
||||
import com.sap.sse.datamining.test.functions.test_classes.ExtendingInterface;
|
||||
import com.sap.sse.datamining.test.functions.test_classes.ExternalLibraryClass;
|
||||
import com.sap.sse.datamining.test.functions.test_classes.Test_ExternalLibraryClass;
|
||||
import com.sap.sse.datamining.test.util.FunctionTestsUtil;
|
||||
|
||||
public class TestDeclaringTypeOrParameterTypeCriteria {
|
||||
@@ -31,7 +31,7 @@ public class TestDeclaringTypeOrParameterTypeCriteria {
|
||||
getRaceNameLengthValue = FunctionFactory.createMethodWrappingFunction(FunctionTestsUtil.getMethodFromClass(ExtendingInterface.class, "getRaceNameLength"));
|
||||
getRegattaNameDimension = FunctionFactory.createMethodWrappingFunction(FunctionTestsUtil.getMethodFromClass(DataTypeWithContext.class, "getRegattaName"));
|
||||
|
||||
libraryFunction = FunctionFactory.createMethodWrappingFunction(FunctionTestsUtil.getMethodFromClass(ExternalLibraryClass.class, "foo"));
|
||||
libraryFunction = FunctionFactory.createMethodWrappingFunction(FunctionTestsUtil.getMethodFromClass(Test_ExternalLibraryClass.class, "foo"));
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
+1
-1
@@ -5,7 +5,7 @@ package com.sap.sse.datamining.test.functions.test_classes;
|
||||
* The tests will fail, because they are reflected via constant strings.
|
||||
*/
|
||||
|
||||
public class ExternalLibraryClass {
|
||||
public class Test_ExternalLibraryClass {
|
||||
|
||||
//This method shouldn't be retrieved, because it has no return type
|
||||
public void fooVoid() {
|
||||
+2
-2
@@ -13,7 +13,7 @@ import com.sap.sse.datamining.test.functions.test_classes.DataTypeInterface;
|
||||
import com.sap.sse.datamining.test.functions.test_classes.DataTypeWithContext;
|
||||
import com.sap.sse.datamining.test.functions.test_classes.DataTypeWithContextImpl;
|
||||
import com.sap.sse.datamining.test.functions.test_classes.ExtendingInterface;
|
||||
import com.sap.sse.datamining.test.functions.test_classes.ExternalLibraryClass;
|
||||
import com.sap.sse.datamining.test.functions.test_classes.Test_ExternalLibraryClass;
|
||||
import com.sap.sse.datamining.test.functions.test_classes.SimpleClassWithMarkedMethods;
|
||||
|
||||
public class FunctionTestsUtil extends ConcurrencyTestsUtil {
|
||||
@@ -36,7 +36,7 @@ public class FunctionTestsUtil extends ConcurrencyTestsUtil {
|
||||
}
|
||||
|
||||
public static Method getMethodFromExternalLibraryClass(String name) {
|
||||
return getMethodFromClass(ExternalLibraryClass.class, name);
|
||||
return getMethodFromClass(Test_ExternalLibraryClass.class, name);
|
||||
}
|
||||
|
||||
public static Collection<Function<?>> getMarkedMethodsOfDataTypeWithContextImplAndItsSupertypes() {
|
||||
|
||||
@@ -10,5 +10,6 @@ public interface FunctionRegistry {
|
||||
public Collection<Function<?>> getAllFunctions();
|
||||
public Collection<Function<?>> getStatistics();
|
||||
public Collection<Function<?>> getDimensions();
|
||||
public Collection<Function<?>> getExternalFunctions();
|
||||
|
||||
}
|
||||
+20
-1
@@ -18,10 +18,12 @@ public class SimpleFunctionRegistry implements FunctionRegistry {
|
||||
|
||||
private final Set<Function<?>> statistics;
|
||||
private final Set<Function<?>> dimensions;
|
||||
private final Set<Function<?>> externalFunctions;
|
||||
|
||||
public SimpleFunctionRegistry() {
|
||||
statistics = new HashSet<>();
|
||||
dimensions = new HashSet<>();
|
||||
externalFunctions = new HashSet<>();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -87,14 +89,26 @@ public class SimpleFunctionRegistry implements FunctionRegistry {
|
||||
|
||||
@Override
|
||||
public void registerAllWithExternalFunctionPolicy(Collection<Class<?>> externalClassesToScan) {
|
||||
// TODO Not yet implemented
|
||||
for (Class<?> externalClass : externalClassesToScan) {
|
||||
for (Method method : externalClass.getMethods()) {
|
||||
if (isValidExternalFunction(method)) {
|
||||
Function<?> function = FunctionFactory.createMethodWrappingFunction(method);
|
||||
externalFunctions.add(function);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private boolean isValidExternalFunction(Method method) {
|
||||
return !method.getReturnType().equals(Void.TYPE) && !method.getDeclaringClass().equals(Object.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Collection<Function<?>> getAllFunctions() {
|
||||
Collection<Function<?>> allFunctions = new HashSet<>();
|
||||
allFunctions.addAll(statistics);
|
||||
allFunctions.addAll(dimensions);
|
||||
allFunctions.addAll(externalFunctions);
|
||||
return allFunctions;
|
||||
}
|
||||
|
||||
@@ -107,5 +121,10 @@ public class SimpleFunctionRegistry implements FunctionRegistry {
|
||||
public Collection<Function<?>> getDimensions() {
|
||||
return dimensions;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Collection<Function<?>> getExternalFunctions() {
|
||||
return externalFunctions;
|
||||
}
|
||||
|
||||
}
|
||||
Reference in new issue
Block a user