From 8f69831ae6cc401bf1e40f2c427e805ebfbeb179 Mon Sep 17 00:00:00 2001 From: Costin Leau Date: Tue, 12 Jul 2011 22:08:44 +0300 Subject: [PATCH] SGF-48 + add find and findUnique (plus tests) --- .../data/gemfire/GemfireTemplate.java | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/src/main/java/org/springframework/data/gemfire/GemfireTemplate.java b/src/main/java/org/springframework/data/gemfire/GemfireTemplate.java index e44b4467..43944220 100644 --- a/src/main/java/org/springframework/data/gemfire/GemfireTemplate.java +++ b/src/main/java/org/springframework/data/gemfire/GemfireTemplate.java @@ -22,6 +22,7 @@ import java.lang.reflect.Method; import java.lang.reflect.Proxy; import org.springframework.dao.DataAccessException; +import org.springframework.dao.InvalidDataAccessApiUsageException; import org.springframework.util.Assert; import org.springframework.util.ClassUtils; @@ -29,7 +30,9 @@ import com.gemstone.gemfire.GemFireCheckedException; import com.gemstone.gemfire.GemFireException; import com.gemstone.gemfire.cache.Region; import com.gemstone.gemfire.cache.query.IndexInvalidException; +import com.gemstone.gemfire.cache.query.Query; import com.gemstone.gemfire.cache.query.QueryInvalidException; +import com.gemstone.gemfire.cache.query.QueryService; import com.gemstone.gemfire.cache.query.SelectResults; /** @@ -124,6 +127,39 @@ public class GemfireTemplate extends GemfireAccessor { }); } + public SelectResults find(final String query, final Object... params) + throws InvalidDataAccessApiUsageException { + return execute(new GemfireCallback>() { + @SuppressWarnings("unchecked") + public SelectResults doInGemfire(Region region) throws GemFireCheckedException, GemFireException { + QueryService queryService = region.getRegionService().getQueryService(); + Query q = queryService.newQuery(query); + Object result = q.execute(params); + if (result instanceof SelectResults) { + return (SelectResults) result; + } + throw new InvalidDataAccessApiUsageException( + "Result object returned from GemfireCallback isn't a SelectResult: [" + result + "]"); + } + }); + } + + public T findUnique(final String query, final Object... params) { + return execute(new GemfireCallback() { + @SuppressWarnings("unchecked") + public T doInGemfire(Region region) throws GemFireCheckedException, GemFireException { + QueryService queryService = region.getRegionService().getQueryService(); + Query q = queryService.newQuery(query); + Object result = q.execute(params); + if (result instanceof SelectResults) { + throw new InvalidDataAccessApiUsageException( + "Result object returned from GemfireCallback isn't unique: [" + result + "]"); + } + return (T) result; + } + }); + } + public T execute(GemfireCallback action) throws DataAccessException { return execute(action, isExposeNativeRegion()); }