From 925a25657a6fc313bb84ec41ad49da34d772f93b Mon Sep 17 00:00:00 2001 From: Robert von Burg Date: Fri, 29 Nov 2013 08:42:44 +0100 Subject: [PATCH] [New] implemented Parameter selection with test. The ParameterizedElementSelector was still missing. --- .../ParameterizedElementSelector.java | 58 +++++++++++++++++++ .../query/inmemory/InMemoryQueryTest.java | 33 +++++++++++ 2 files changed, 91 insertions(+) create mode 100644 src/main/java/li/strolch/runtime/query/inmemory/ParameterizedElementSelector.java diff --git a/src/main/java/li/strolch/runtime/query/inmemory/ParameterizedElementSelector.java b/src/main/java/li/strolch/runtime/query/inmemory/ParameterizedElementSelector.java new file mode 100644 index 000000000..226b72063 --- /dev/null +++ b/src/main/java/li/strolch/runtime/query/inmemory/ParameterizedElementSelector.java @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2012, Robert von Burg + * + * All rights reserved. + * + * This file is part of the XXX. + * + * XXX is free software: you can redistribute + * it and/or modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the License, + * or (at your option) any later version. + * + * XXX is distributed in the hope that it will + * be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with XXX. If not, see + * . + */ +package li.strolch.runtime.query.inmemory; + +import java.util.List; + +import li.strolch.model.GroupedParameterizedElement; +import li.strolch.model.ParameterBag; +import li.strolch.model.ParameterizedElement; + +/** + * @author Robert von Burg + * + */ +public class ParameterizedElementSelector implements Selector { + + private String key; + private List> selectors; + + public ParameterizedElementSelector(String key, List> selectors) { + this.key = key; + this.selectors = selectors; + } + + @Override + public boolean select(T element) { + + ParameterBag parameterBag = element.getParameterBag(this.key); + if (parameterBag == null) + return false; + + for (Selector selector : this.selectors) { + if (!selector.select(parameterBag)) + return false; + } + + return true; + } +} diff --git a/src/test/java/li/strolch/runtime/query/inmemory/InMemoryQueryTest.java b/src/test/java/li/strolch/runtime/query/inmemory/InMemoryQueryTest.java index 030fa4dfd..bcf88c31c 100644 --- a/src/test/java/li/strolch/runtime/query/inmemory/InMemoryQueryTest.java +++ b/src/test/java/li/strolch/runtime/query/inmemory/InMemoryQueryTest.java @@ -28,8 +28,13 @@ import java.util.Date; import java.util.List; import li.strolch.model.Order; +import li.strolch.model.ParameterBag; +import li.strolch.model.ParameterizedElement; import li.strolch.model.Resource; import li.strolch.model.State; +import li.strolch.model.parameter.BooleanParameter; +import li.strolch.model.parameter.FloatParameter; +import li.strolch.model.parameter.StringParameter; import li.strolch.runtime.ModelBuilder; import org.junit.Test; @@ -121,6 +126,34 @@ public class InMemoryQueryTest { assertEquals(0, result.size()); } + @Test + public void shouldQueryByParameter() { + + List resources = getResources(); + resources.add(getBallResource()); + + InMemoryQuery ballQuery = new InMemoryQuery<>(); + ballQuery.setNavigator(new ListNavigator<>(resources)); + List> ballDetailSelectors = new ArrayList<>(); + ballDetailSelectors.add(ParameterSelector.stringSelector("color", "red")); + ballDetailSelectors.add(ParameterSelector.booleanSelector("forChildren", true)); + ballDetailSelectors.add(ParameterSelector.floatSelector("diameter", 22.0)); + ballQuery.addSelector(new ParameterizedElementSelector("parameters", ballDetailSelectors)); + + List result = ballQuery.doQuery(); + assertEquals(1, result.size()); + } + + private Resource getBallResource() { + Resource res1 = new Resource("childrensBall", "Ball 1", "Ball"); + ParameterBag bag = new ParameterBag("parameters", "Ball Details", "Parameters"); + bag.addParameter(new StringParameter("color", "Color", "red")); + bag.addParameter(new BooleanParameter("forChildren", "Color", true)); + bag.addParameter(new FloatParameter("diameter", "Color", 22.0)); + res1.addParameterBag(bag); + return res1; + } + private List getResources() { Resource res1 = ModelBuilder.createResource("@1", "Res 1", "MyType1"); Resource res2 = ModelBuilder.createResource("@2", "Res 2", "MyType1");