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");