diff --git a/activity-tracker-root/activity-tracker/src/main/java/io/fourfinance/activity_tracker/activity/JoinPointParameters.java b/activity-tracker-root/activity-tracker/src/main/java/io/fourfinance/activity_tracker/activity/JoinPointParameters.java index ea1312ae..5b5a022c 100644 --- a/activity-tracker-root/activity-tracker/src/main/java/io/fourfinance/activity_tracker/activity/JoinPointParameters.java +++ b/activity-tracker-root/activity-tracker/src/main/java/io/fourfinance/activity_tracker/activity/JoinPointParameters.java @@ -1,40 +1,32 @@ package io.fourfinance.activity_tracker.activity; -import static java.util.Arrays.asList; -import static java.util.Collections.emptyList; - -import java.util.List; - +import javaslang.Tuple; +import javaslang.collection.HashMap; +import javaslang.collection.List; +import javaslang.collection.Map; +import javaslang.control.Option; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.reflect.MethodSignature; -import com.google.common.base.Optional; -import com.google.common.base.Preconditions; +import static com.google.common.base.Preconditions.checkNotNull; class JoinPointParameters { - private final List parameterNames; - - private final List parameterValues; + private final Map parameters; JoinPointParameters(JoinPoint joinPoint) { MethodSignature signature = (MethodSignature) joinPoint.getSignature(); - parameterNames = signature.getParameterNames() != null ? asList(signature.getParameterNames()) : java.util - .Collections.emptyList(); - parameterValues = joinPoint.getArgs() != null ? asList(joinPoint.getArgs()) : emptyList(); + List names = signature.getParameterNames() != null ? List.of(signature.getParameterNames()) : List.empty(); + List values = joinPoint.getArgs() != null ? List.of(joinPoint.getArgs()) : List.empty(); + parameters = HashMap.ofEntries(names.zip(values).map(t -> Tuple.of(t._1, t._2.toString()))); } - Optional getValue(String parameterName) { - Preconditions.checkNotNull(parameterName, "JoinPoint param must not be null"); - if(parameterNames.contains(parameterName)) { - return Optional.fromNullable(parameterValues.get(indexOfParameter(parameterName))); + Option getValue(String parameterName) { + checkNotNull(parameterName, "JoinPoint param must not be null"); + if (parameters.containsKey(parameterName)) { + return parameters.get(parameterName); } else { - return Optional.absent(); + return Option.none(); } } - - private int indexOfParameter(final String parameterName) { - return parameterNames.indexOf(parameterName); - } - } diff --git a/activity-tracker-root/activity-tracker/src/main/java/io/fourfinance/activity_tracker/activity/TrackUserActivityAspect.java b/activity-tracker-root/activity-tracker/src/main/java/io/fourfinance/activity_tracker/activity/TrackUserActivityAspect.java index 504a159c..f1bf81e4 100644 --- a/activity-tracker-root/activity-tracker/src/main/java/io/fourfinance/activity_tracker/activity/TrackUserActivityAspect.java +++ b/activity-tracker-root/activity-tracker/src/main/java/io/fourfinance/activity_tracker/activity/TrackUserActivityAspect.java @@ -51,6 +51,6 @@ private String readActivityName(JoinPoint joinPoint) { } private String extractParamValue(JoinPoint joinPoint, final String field) { - return new JoinPointParameters(joinPoint).getValue(field).or("").toString(); + return new JoinPointParameters(joinPoint).getValue(field).getOrElse(""); } } diff --git a/activity-tracker-root/activity-tracker/src/test/groovy/io/fourfinance/activity_tracker/activity/JoinPointParametersSpec.groovy b/activity-tracker-root/activity-tracker/src/test/groovy/io/fourfinance/activity_tracker/activity/JoinPointParametersSpec.groovy new file mode 100644 index 00000000..1c15badd --- /dev/null +++ b/activity-tracker-root/activity-tracker/src/test/groovy/io/fourfinance/activity_tracker/activity/JoinPointParametersSpec.groovy @@ -0,0 +1,27 @@ +package io.fourfinance.activity_tracker.activity + +import org.aspectj.lang.JoinPoint +import org.aspectj.lang.reflect.MethodSignature +import org.junit.Test +import spock.lang.Specification + +public class JoinPointParametersSpec extends Specification { + + JoinPoint joinPoint = Mock(JoinPoint) + + void setup() { + MethodSignature signature = Mock(MethodSignature) + joinPoint.signature >> signature + signature.getParameterNames() >> ['foo'] + } + + @Test + public void shouldReturnEmptyValueWhenThereIsNoValue() { + given: + JoinPointParameters joinPointParameters = new JoinPointParameters(joinPoint) + expect: + joinPointParameters.getValue("foo").isEmpty() + } + + +} \ No newline at end of file diff --git a/activity-tracker-root/build.gradle b/activity-tracker-root/build.gradle index f27c66b7..e7a4b238 100644 --- a/activity-tracker-root/build.gradle +++ b/activity-tracker-root/build.gradle @@ -18,6 +18,7 @@ project(':activity-tracker-root:activity-tracker') { compile group: 'org.aspectj', name: 'aspectjweaver', version: '1.8.9' compile group: 'io.dropwizard.metrics', name: 'metrics-core', version: '3.1.2' compile 'commons-beanutils:commons-beanutils:1.9.2' + compile 'io.javaslang:javaslang:2.0.2' compile 'com.google.guava:guava' } }