From e7059a370c1fe6c15d21e2dc2ec269bc4330d9cd Mon Sep 17 00:00:00 2001 From: John Blum Date: Mon, 7 Jul 2014 23:50:45 -0700 Subject: [PATCH] Fixes JIRA issue SGF-297 enabling Spring Data GemFire POJO, Function annotated methods to be invoked from Gfsh when arguments are injected during Function argument resolution. --- .../DefaultFunctionArgumentResolver.java | 16 ++++++- .../FunctionArgumentResolverTest.java | 46 ++++++++++--------- 2 files changed, 39 insertions(+), 23 deletions(-) diff --git a/src/main/java/org/springframework/data/gemfire/function/DefaultFunctionArgumentResolver.java b/src/main/java/org/springframework/data/gemfire/function/DefaultFunctionArgumentResolver.java index f9794ab8..84c2d522 100644 --- a/src/main/java/org/springframework/data/gemfire/function/DefaultFunctionArgumentResolver.java +++ b/src/main/java/org/springframework/data/gemfire/function/DefaultFunctionArgumentResolver.java @@ -28,7 +28,7 @@ class DefaultFunctionArgumentResolver implements FunctionArgumentResolver { */ @Override public Object[] resolveFunctionArguments(final FunctionContext functionContext) { - return (isArray(functionContext.getArguments())) ? (Object[]) functionContext.getArguments() + return (isArray(functionContext.getArguments())) ? toObjectArray((Object[]) functionContext.getArguments()) : getArguments(functionContext); } @@ -36,8 +36,20 @@ class DefaultFunctionArgumentResolver implements FunctionArgumentResolver { return (value != null && value.getClass().isArray()); } + private Object[] toObjectArray(final Object[] arguments) { + Object[] result = new Object[arguments.length]; + + int index = 0; + + for (Object arg : arguments) { + result[index++] = arg; + } + + return result; + } + private Object[] getArguments(final FunctionContext context) { - final Object arguments = context.getArguments(); + Object arguments = context.getArguments(); return (arguments != null ? new Object[] { arguments } : EMPTY_ARRAY); } diff --git a/src/test/java/org/springframework/data/gemfire/function/FunctionArgumentResolverTest.java b/src/test/java/org/springframework/data/gemfire/function/FunctionArgumentResolverTest.java index a6c33660..e809e26d 100644 --- a/src/test/java/org/springframework/data/gemfire/function/FunctionArgumentResolverTest.java +++ b/src/test/java/org/springframework/data/gemfire/function/FunctionArgumentResolverTest.java @@ -13,6 +13,7 @@ package org.springframework.data.gemfire.function; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertSame; import static org.mockito.Mockito.mock; @@ -39,7 +40,7 @@ import com.gemstone.gemfire.cache.execute.ResultSender; public class FunctionArgumentResolverTest { @Test - public void testDefaultFunctionArgumentResolverNoArguments() { + public void testDefaultFunctionArgumentResolverWithNoArguments() { FunctionArgumentResolver functionArgumentResolver = new DefaultFunctionArgumentResolver(); FunctionContext mockFunctionContext = mock(FunctionContext.class); @@ -51,32 +52,35 @@ public class FunctionArgumentResolverTest { assertEquals(0, args.length); } - @Test - public void testDefaultFunctionArgumentResolverSingleArg() { - FunctionArgumentResolver far = new DefaultFunctionArgumentResolver(); + @Test + public void testDefaultFunctionArgumentResolverWithArgumentArray() { + FunctionArgumentResolver functionArgumentResolver = new DefaultFunctionArgumentResolver(); + FunctionContext functionContext = mock(FunctionContext.class); + when(functionContext.getArguments()).thenReturn(new String[] { "one", "two", "three" }); + + Object[] args = functionArgumentResolver.resolveFunctionArguments(functionContext); + + assertNotNull(args); + assertFalse(args instanceof String[]); + assertEquals(3, args.length); + assertEquals("one", args[0]); + assertEquals("two", args[1]); + assertEquals("three", args[2]); + } + + @Test + public void testDefaultFunctionArgumentResolverWithSingleArgument() { + FunctionArgumentResolver functionArgumentResolver = new DefaultFunctionArgumentResolver(); FunctionContext functionContext = mock(FunctionContext.class); - when(functionContext.getArguments()).thenReturn("hello"); + when(functionContext.getArguments()).thenReturn("test"); - Object[] args = far.resolveFunctionArguments(functionContext); + Object[] args = functionArgumentResolver.resolveFunctionArguments(functionContext); + assertNotNull(args); assertEquals(1, args.length); - assertEquals("hello", args[0]); - } - - @Test - public void testDefaultFunctionArgumentResolverSingleArgAsArray() { - FunctionArgumentResolver far = new DefaultFunctionArgumentResolver(); - - FunctionContext functionContext = mock(FunctionContext.class); - - when(functionContext.getArguments()).thenReturn(new String[]{"hello"}); - - Object[] args = far.resolveFunctionArguments(functionContext); - - assertEquals(1, args.length); - assertEquals("hello", args[0]); + assertEquals("test", args[0]); } @Test