First attempt for correct transitive annotation handling

This commit is contained in:
Lennart Hensler committed 2014-06-05 17:56:08 +02:00
1 parent 9ca4744652
commit a3b29e6e0f
30 files changed
+469 -251

No files matched your search

@@ -28,7 +28,6 @@ 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.MarkedContainer;
import com.sap.sse.datamining.test.functions.test_classes.SimpleClassWithMarkedMethods;
import com.sap.sse.datamining.test.util.ConcurrencyTestsUtil;
import com.sap.sse.datamining.test.util.FunctionTestsUtil;
import com.sap.sse.datamining.test.util.TestsUtil;
@@ -40,7 +39,7 @@ public class TestFunctionProvider {
@Before
public void initializeFunctionRegistry() {
functionRegistry = new SimpleFunctionRegistry(ConcurrencyTestsUtil.getExecutor());
functionRegistry = new SimpleFunctionRegistry();
Collection<Class<?>> internalClassesToScan = new HashSet<>();
internalClassesToScan.add(SimpleClassWithMarkedMethods.class);
@@ -1,47 +0,0 @@
package com.sap.sse.datamining.impl.functions;
import static org.hamcrest.Matchers.is;
import static org.junit.Assert.assertThat;
import java.util.Collection;
import java.util.HashSet;
import org.junit.Before;
import org.junit.Test;
import com.sap.sse.datamining.functions.Function;
import com.sap.sse.datamining.functions.FunctionRegistry;
import com.sap.sse.datamining.impl.functions.SimpleFunctionRegistry;
import com.sap.sse.datamining.test.functions.test_classes.DataTypeWithContext;
import com.sap.sse.datamining.test.functions.test_classes.ExternalLibraryClass;
import com.sap.sse.datamining.test.functions.test_classes.SimpleClassWithMarkedMethods;
import com.sap.sse.datamining.test.util.ConcurrencyTestsUtil;
import com.sap.sse.datamining.test.util.FunctionTestsUtil;
public class TestSimpleFunctionRegistryAccess {
private FunctionRegistry functionRegistry;
@Before
public void initializeTheFunctionRegistry() {
functionRegistry = new SimpleFunctionRegistry(ConcurrencyTestsUtil.getExecutor());
Collection<Class<?>> internalClassesToScan = new HashSet<>();
internalClassesToScan.add(SimpleClassWithMarkedMethods.class);
internalClassesToScan.add(DataTypeWithContext.class);
functionRegistry.registerAllWithInternalFunctionPolicy(internalClassesToScan);
Collection<Class<?>> externalClassesToScan = new HashSet<>();
externalClassesToScan.add(ExternalLibraryClass.class);
functionRegistry.registerAllWithExternalFunctionPolicy(externalClassesToScan);
}
@Test
public void testGetAllDimensions() {
Collection<Function<?>> modifiableExpectedDimensions = FunctionTestsUtil.getDimensionsFor(DataTypeWithContext.class);
modifiableExpectedDimensions.addAll(FunctionTestsUtil.getDimensionsFor(SimpleClassWithMarkedMethods.class));
Collection<Function<?>> expectedDimensions = modifiableExpectedDimensions;
assertThat(functionRegistry.getAllDimensions(), is(expectedDimensions));
}
}
@@ -4,72 +4,97 @@ import static org.hamcrest.Matchers.is;
import static org.junit.Assert.assertThat;
import java.lang.reflect.Method;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashSet;
import java.util.Set;
import org.junit.Before;
import org.junit.Test;
import com.sap.sse.datamining.factories.FunctionFactory;
import com.sap.sse.datamining.functions.Function;
import com.sap.sse.datamining.functions.FunctionRegistry;
import com.sap.sse.datamining.impl.functions.SimpleFunctionRegistry;
import com.sap.sse.datamining.test.functions.test_classes.ExternalLibraryClass;
import com.sap.sse.datamining.test.functions.test_classes.SimpleClassWithMarkedMethods;
import com.sap.sse.datamining.test.util.ConcurrencyTestsUtil;
import com.sap.sse.datamining.test.util.FunctionTestsUtil;
import com.sap.sse.datamining.test.functions.registry.test_classes.Test_Boat;
import com.sap.sse.datamining.test.functions.registry.test_classes.Test_Competitor;
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;
public class TestSimpleFunctionRegistryRegistrations {
@Test
public void testSimpleRegistration() {
Method dimension = FunctionTestsUtil.getMethodFromSimpleClassWithMarkedMethod("dimension");
FunctionRegistry registry = new SimpleFunctionRegistry(ConcurrencyTestsUtil.getExecutor());
registry.register(dimension);
Set<Function<?>> expectedRegisteredFunctionsAsSet = new HashSet<>();
expectedRegisteredFunctionsAsSet.add(FunctionFactory.createMethodWrappingFunction(dimension));
Iterable<Function<?>> expectedRegisteredFunctions = expectedRegisteredFunctionsAsSet;
assertThat(registry.getAllFunctions(), is(expectedRegisteredFunctions));
assertThat(registry.getFunctionsOf(SimpleClassWithMarkedMethods.class), is(expectedRegisteredFunctions));
private Set<Class<?>> internalClassesToScan;
@Before
public void initializeClassesToScan() {
internalClassesToScan = new HashSet<>();
internalClassesToScan.add(Test_HasLegContext.class);
internalClassesToScan.add(Test_HasRaceContext.class);
}
@Test
public void testRegistrationByFunctionRetrievers() {
FunctionRegistry registry = new SimpleFunctionRegistry(ConcurrencyTestsUtil.getExecutor());
registerMethodsOfTestClasses(registry);
Set<Function<?>> expectedRegisteredFunctionsAsSet = new HashSet<>();
expectedRegisteredFunctionsAsSet.addAll(FunctionTestsUtil.getMarkedMethodsOfSimpleClassWithMarkedMethod());
expectedRegisteredFunctionsAsSet.addAll(FunctionTestsUtil.getMethodsOfExternalLibraryClass());
Iterable<Function<?>> expectedRegisteredFunctions = expectedRegisteredFunctionsAsSet;
assertThat(registry.getAllFunctions(), is(expectedRegisteredFunctions));
}
private void registerMethodsOfTestClasses(FunctionRegistry registry) {
Collection<Class<?>> internalClassesToScan = new HashSet<>();
internalClassesToScan.add(SimpleClassWithMarkedMethods.class);
public void testRegistration() throws NoSuchMethodException, SecurityException {
FunctionRegistry registry = new SimpleFunctionRegistry();
registry.registerAllWithInternalFunctionPolicy(internalClassesToScan);
Collection<Class<?>> externalClassesToScan = new HashSet<>();
externalClassesToScan.add(ExternalLibraryClass.class);
registry.registerAllWithExternalFunctionPolicy(externalClassesToScan);
Collection<Function<?>> expectedDimensions = createExpectedDimensions();
assertThat(registry.getAllDimensions(), is(expectedDimensions));
Collection<Function<?>> expectedStatistics = createExpectedStatistics();
assertThat(registry.getAllStatistics(), is(expectedStatistics));
}
@Test
public void testTheMultipleRegistrationOfTheSameFunction() {
Method dimension = FunctionTestsUtil.getMethodFromSimpleClassWithMarkedMethod("dimension");
private Collection<Function<?>> createExpectedDimensions() throws NoSuchMethodException, SecurityException {
Collection<Function<?>> dimensions = new HashSet<>();
FunctionRegistry registry = new SimpleFunctionRegistry(ConcurrencyTestsUtil.getExecutor());
registry.register(dimension);
registry.register(dimension);
registry.register(dimension);
Method getNameMethod = Test_Named.class.getMethod("getName", new Class<?>[0]);
Function<?> getName = FunctionFactory.createMethodWrappingFunction(getNameMethod);
Set<Function<?>> expectedRegisteredFunctionsAsSet = new HashSet<>();
expectedRegisteredFunctionsAsSet.add(FunctionFactory.createMethodWrappingFunction(dimension));
Iterable<Function<?>> expectedRegisteredFunctions = expectedRegisteredFunctionsAsSet;
assertThat(registry.getAllFunctions(), is(expectedRegisteredFunctions));
Method getRegattaMethod = Test_HasRaceContext.class.getMethod("getRegatta", new Class<?>[0]);
Function<?> getRegatta = FunctionFactory.createMethodWrappingFunction(getRegattaMethod);
dimensions.add(FunctionFactory.createCompoundFunction(null, Arrays.asList(getRegatta, getName)));
Method getRaceMethod = Test_HasRaceContext.class.getMethod("getRace", new Class<?>[0]);
Function<?> getRace = FunctionFactory.createMethodWrappingFunction(getRaceMethod);
dimensions.add(FunctionFactory.createCompoundFunction(null, Arrays.asList(getRace, getName)));
Method getBoatClassMethod = Test_HasRaceContext.class.getMethod("getBoatClass", new Class<?>[0]);
Function<?> getBoatClass = FunctionFactory.createMethodWrappingFunction(getBoatClassMethod);
dimensions.add(FunctionFactory.createCompoundFunction(null, Arrays.asList(getBoatClass, getName)));
Method getYearMethod = Test_HasRaceContext.class.getMethod("getYear", new Class<?>[0]);
dimensions.add(FunctionFactory.createMethodWrappingFunction(getYearMethod));
Method getLegNumberMethod = Test_HasLegContext.class.getMethod("getLegNumber", new Class<?>[0]);
dimensions.add(FunctionFactory.createMethodWrappingFunction(getLegNumberMethod));
Method getCompetitorMethod = Test_HasLegContext.class.getMethod("getCompetitor", new Class<?>[0]);
Function<?> getCompetitor = FunctionFactory.createMethodWrappingFunction(getCompetitorMethod);
Method getTeamMethod = Test_Competitor.class.getMethod("getTeam", new Class<?>[0]);
Function<?> getTeam = FunctionFactory.createMethodWrappingFunction(getTeamMethod);
dimensions.add(FunctionFactory.createCompoundFunction(null, Arrays.asList(getCompetitor, getTeam, getName)));
Method getBoatMethod = Test_Competitor.class.getMethod("getBoat", new Class<?>[0]);
Function<?> getBoat = FunctionFactory.createMethodWrappingFunction(getBoatMethod);
Method getSailIDMethod = Test_Boat.class.getMethod("getSailID", new Class<?>[0]);
Function<?> getSailID = FunctionFactory.createMethodWrappingFunction(getSailIDMethod);
dimensions.add(FunctionFactory.createCompoundFunction(null, Arrays.asList(getCompetitor, getBoat, getSailID)));
return dimensions;
}
private Collection<Function<?>> createExpectedStatistics() throws NoSuchMethodException, SecurityException {
Method getLegMethod = Test_HasLegContext.class.getMethod("getLeg", new Class<?>[0]);
Function<?> getLeg = FunctionFactory.createMethodWrappingFunction(getLegMethod);
Method getDistanceTraveledMethod = Test_Leg.class.getMethod("getDistanceTraveled", new Class<?>[0]);
Function<?> getDistanceTraveled = FunctionFactory.createMethodWrappingFunction(getDistanceTraveledMethod);
Collection<Function<?>> statistics = new HashSet<>();
statistics.add(FunctionFactory.createCompoundFunction("getDistanceTraveled", Arrays.asList(getLeg, getDistanceTraveled)));
return statistics;
}
}
@@ -0,0 +1,10 @@
package com.sap.sse.datamining.test.functions.registry.test_classes;
import com.sap.sse.datamining.shared.annotations.Dimension;
public interface Test_Boat {
@Dimension(messageKey="SailID")
public String getSailID();
}
@@ -0,0 +1,5 @@
package com.sap.sse.datamining.test.functions.registry.test_classes;
public interface Test_BoatClass extends Test_Named {
}
@@ -0,0 +1,13 @@
package com.sap.sse.datamining.test.functions.registry.test_classes;
import com.sap.sse.datamining.shared.annotations.Connector;
public interface Test_Competitor {
@Connector
public Test_Team getTeam();
@Connector
public Test_Boat getBoat();
}
@@ -0,0 +1,11 @@
package com.sap.sse.datamining.test.functions.registry.test_classes;
import com.sap.sse.datamining.shared.Unit;
import com.sap.sse.datamining.shared.annotations.Statistic;
public interface Test_Leg {
@Statistic(messageKey="DistanceTraveled", resultUnit=Unit.Meters, resultDecimals=0)
public double getDistanceTraveled();
}
@@ -0,0 +1,10 @@
package com.sap.sse.datamining.test.functions.registry.test_classes;
import com.sap.sse.datamining.shared.annotations.Dimension;
public interface Test_Named {
@Dimension(messageKey="Name")
public String getName();
}
@@ -0,0 +1,5 @@
package com.sap.sse.datamining.test.functions.registry.test_classes;
public interface Test_Race extends Test_Named {
}
@@ -0,0 +1,5 @@
package com.sap.sse.datamining.test.functions.registry.test_classes;
public interface Test_Regatta extends Test_Named {
}
@@ -0,0 +1,5 @@
package com.sap.sse.datamining.test.functions.registry.test_classes;
public interface Test_Team extends Test_Named {
}
@@ -0,0 +1,11 @@
package com.sap.sse.datamining.test.functions.registry.test_classes.impl;
import com.sap.sse.datamining.test.functions.registry.test_classes.Test_BoatClass;
public class Test_BoatClassImpl extends Test_NamedImpl implements Test_BoatClass {
public Test_BoatClassImpl(String name) {
super(name);
}
}
@@ -0,0 +1,18 @@
package com.sap.sse.datamining.test.functions.registry.test_classes.impl;
import com.sap.sse.datamining.test.functions.registry.test_classes.Test_Boat;
public class Test_BoatImpl implements Test_Boat {
private String sailID;
public Test_BoatImpl(String sailID) {
this.sailID = sailID;
}
@Override
public String getSailID() {
return sailID;
}
}
@@ -0,0 +1,27 @@
package com.sap.sse.datamining.test.functions.registry.test_classes.impl;
import com.sap.sse.datamining.test.functions.registry.test_classes.Test_Boat;
import com.sap.sse.datamining.test.functions.registry.test_classes.Test_Competitor;
import com.sap.sse.datamining.test.functions.registry.test_classes.Test_Team;
public class Test_CompetitorImpl implements Test_Competitor {
private Test_Team team;
private Test_Boat boat;
public Test_CompetitorImpl(Test_Team team, Test_Boat boat) {
this.team = team;
this.boat = boat;
}
@Override
public Test_Team getTeam() {
return team;
}
@Override
public Test_Boat getBoat() {
return boat;
}
}
@@ -0,0 +1,18 @@
package com.sap.sse.datamining.test.functions.registry.test_classes.impl;
import com.sap.sse.datamining.test.functions.registry.test_classes.Test_Leg;
public class Test_LegImpl implements Test_Leg {
private double distanceTraveled;
public Test_LegImpl(double distanceTraveled) {
this.distanceTraveled = distanceTraveled;
}
@Override
public double getDistanceTraveled() {
return distanceTraveled;
}
}
@@ -0,0 +1,18 @@
package com.sap.sse.datamining.test.functions.registry.test_classes.impl;
import com.sap.sse.datamining.test.functions.registry.test_classes.Test_Named;
public abstract class Test_NamedImpl implements Test_Named {
private String name;
public Test_NamedImpl(String name) {
this.name = name;
}
@Override
public String getName() {
return name;
}
}
@@ -0,0 +1,11 @@
package com.sap.sse.datamining.test.functions.registry.test_classes.impl;
import com.sap.sse.datamining.test.functions.registry.test_classes.Test_Race;
public class Test_RaceImpl extends Test_NamedImpl implements Test_Race {
public Test_RaceImpl(String name) {
super(name);
}
}
@@ -0,0 +1,11 @@
package com.sap.sse.datamining.test.functions.registry.test_classes.impl;
import com.sap.sse.datamining.test.functions.registry.test_classes.Test_Regatta;
public class Test_RegattaImpl extends Test_NamedImpl implements Test_Regatta {
public Test_RegattaImpl(String name) {
super(name);
}
}
@@ -0,0 +1,11 @@
package com.sap.sse.datamining.test.functions.registry.test_classes.impl;
import com.sap.sse.datamining.test.functions.registry.test_classes.Test_Team;
public class Test_TeamImpl extends Test_NamedImpl implements Test_Team {
public Test_TeamImpl(String name) {
super(name);
}
}
@@ -0,0 +1,19 @@
package com.sap.sse.datamining.test.functions.registry.test_contexts;
import com.sap.sse.datamining.shared.annotations.Connector;
import com.sap.sse.datamining.shared.annotations.Dimension;
import com.sap.sse.datamining.test.functions.registry.test_classes.Test_Competitor;
import com.sap.sse.datamining.test.functions.registry.test_classes.Test_Leg;
public interface Test_HasLegContext extends Test_HasRaceContext {
@Connector
public Test_Leg getLeg();
@Dimension(messageKey="LegNumber")
public int getLegNumber();
@Connector
public Test_Competitor getCompetitor();
}
@@ -0,0 +1,38 @@
package com.sap.sse.datamining.test.functions.registry.test_contexts;
import com.sap.sse.datamining.test.functions.registry.test_classes.Test_BoatClass;
import com.sap.sse.datamining.test.functions.registry.test_classes.Test_Competitor;
import com.sap.sse.datamining.test.functions.registry.test_classes.Test_Leg;
import com.sap.sse.datamining.test.functions.registry.test_classes.Test_Race;
import com.sap.sse.datamining.test.functions.registry.test_classes.Test_Regatta;
public class Test_HasLegContextImpl extends Test_HasRaceContextImpl implements Test_HasLegContext {
private Test_Leg leg;
private int legNumber;
private Test_Competitor competitor;
public Test_HasLegContextImpl(Test_Regatta regatta, Test_Race race, Test_BoatClass boatClass, int year,
Test_Leg leg, int legNumber, Test_Competitor competitor) {
super(regatta, race, boatClass, year);
this.leg = leg;
this.legNumber = legNumber;
this.competitor = competitor;
}
@Override
public Test_Leg getLeg() {
return leg;
}
@Override
public int getLegNumber() {
return legNumber;
}
@Override
public Test_Competitor getCompetitor() {
return competitor;
}
}
@@ -0,0 +1,23 @@
package com.sap.sse.datamining.test.functions.registry.test_contexts;
import com.sap.sse.datamining.shared.annotations.Connector;
import com.sap.sse.datamining.shared.annotations.Dimension;
import com.sap.sse.datamining.test.functions.registry.test_classes.Test_BoatClass;
import com.sap.sse.datamining.test.functions.registry.test_classes.Test_Race;
import com.sap.sse.datamining.test.functions.registry.test_classes.Test_Regatta;
public interface Test_HasRaceContext {
@Connector
public Test_Regatta getRegatta();
@Connector
public Test_Race getRace();
@Connector
public Test_BoatClass getBoatClass();
@Dimension(messageKey="Year")
public int getYear();
}
@@ -0,0 +1,41 @@
package com.sap.sse.datamining.test.functions.registry.test_contexts;
import com.sap.sse.datamining.test.functions.registry.test_classes.Test_BoatClass;
import com.sap.sse.datamining.test.functions.registry.test_classes.Test_Race;
import com.sap.sse.datamining.test.functions.registry.test_classes.Test_Regatta;
public class Test_HasRaceContextImpl implements Test_HasRaceContext {
private Test_Regatta regatta;
private Test_Race race;
private Test_BoatClass boatClass;
private int year;
public Test_HasRaceContextImpl(Test_Regatta regatta, Test_Race race, Test_BoatClass boatClass, int year) {
this.regatta = regatta;
this.race = race;
this.boatClass = boatClass;
this.year = year;
}
@Override
public Test_Regatta getRegatta() {
return regatta;
}
@Override
public Test_Race getRace() {
return race;
}
@Override
public Test_BoatClass getBoatClass() {
return boatClass;
}
@Override
public int getYear() {
return year;
}
}