[New] Moved *Visitor transformations in query into query method
This is better than keeping the Visitor in the instance of the query, where it might be to early to instantiate it.
This commit is contained in:
parent
c49bd5f87f
commit
546524b113
|
@ -28,13 +28,19 @@ import li.strolch.agent.api.StrolchRealm;
|
|||
import li.strolch.exception.StrolchException;
|
||||
import li.strolch.model.GroupedParameterizedElement;
|
||||
import li.strolch.model.Locator;
|
||||
import li.strolch.model.Order;
|
||||
import li.strolch.model.OrderVisitor;
|
||||
import li.strolch.model.ParameterBag;
|
||||
import li.strolch.model.Resource;
|
||||
import li.strolch.model.ResourceVisitor;
|
||||
import li.strolch.model.StrolchElement;
|
||||
import li.strolch.model.StrolchRootElement;
|
||||
import li.strolch.model.Tags;
|
||||
import li.strolch.model.parameter.Parameter;
|
||||
import li.strolch.model.query.OrderQuery;
|
||||
import li.strolch.model.query.ResourceQuery;
|
||||
import li.strolch.model.visitor.NoStrategyOrderVisitor;
|
||||
import li.strolch.model.visitor.NoStrategyResourceVisitor;
|
||||
import li.strolch.persistence.inmemory.InMemoryTransaction;
|
||||
import li.strolch.runtime.observer.ObserverHandler;
|
||||
import li.strolch.service.api.Command;
|
||||
|
@ -164,13 +170,23 @@ public abstract class AbstractTransaction implements StrolchTransaction {
|
|||
}
|
||||
|
||||
@Override
|
||||
public <U> List<U> doQuery(OrderQuery<U> query) {
|
||||
return getPersistenceHandler().getOrderDao(this).doQuery(query);
|
||||
public List<Order> doQuery(OrderQuery query) {
|
||||
return getPersistenceHandler().getOrderDao(this).doQuery(query, new NoStrategyOrderVisitor());
|
||||
}
|
||||
|
||||
@Override
|
||||
public <U> List<U> doQuery(ResourceQuery<U> query) {
|
||||
return getPersistenceHandler().getResourceDao(this).doQuery(query);
|
||||
public <U> List<U> doQuery(OrderQuery query, OrderVisitor<U> orderVisitor) {
|
||||
return getPersistenceHandler().getOrderDao(this).doQuery(query, orderVisitor);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Resource> doQuery(ResourceQuery query) {
|
||||
return getPersistenceHandler().getResourceDao(this).doQuery(query, new NoStrategyResourceVisitor());
|
||||
}
|
||||
|
||||
@Override
|
||||
public <U> List<U> doQuery(ResourceQuery query, ResourceVisitor<U> resourceVisitor) {
|
||||
return getPersistenceHandler().getResourceDao(this).doQuery(query, resourceVisitor);
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
|
|
|
@ -18,6 +18,7 @@ package li.strolch.persistence.api;
|
|||
import java.util.List;
|
||||
|
||||
import li.strolch.model.Order;
|
||||
import li.strolch.model.OrderVisitor;
|
||||
import li.strolch.model.query.OrderQuery;
|
||||
|
||||
/**
|
||||
|
@ -25,5 +26,5 @@ import li.strolch.model.query.OrderQuery;
|
|||
*/
|
||||
public interface OrderDao extends StrolchDao<Order> {
|
||||
|
||||
public <U> List<U> doQuery(OrderQuery<U> query);
|
||||
public <U> List<U> doQuery(OrderQuery query, OrderVisitor<U> orderVisitor);
|
||||
}
|
||||
|
|
|
@ -18,6 +18,7 @@ package li.strolch.persistence.api;
|
|||
import java.util.List;
|
||||
|
||||
import li.strolch.model.Resource;
|
||||
import li.strolch.model.ResourceVisitor;
|
||||
import li.strolch.model.query.ResourceQuery;
|
||||
|
||||
/**
|
||||
|
@ -25,5 +26,5 @@ import li.strolch.model.query.ResourceQuery;
|
|||
*/
|
||||
public interface ResourceDao extends StrolchDao<Resource> {
|
||||
|
||||
public <U> List<U> doQuery(ResourceQuery<U> query);
|
||||
public <U> List<U> doQuery(ResourceQuery query, ResourceVisitor<U> resourceVisitor);
|
||||
}
|
||||
|
|
|
@ -22,8 +22,10 @@ import li.strolch.agent.api.ResourceMap;
|
|||
import li.strolch.exception.StrolchException;
|
||||
import li.strolch.model.Locator;
|
||||
import li.strolch.model.Order;
|
||||
import li.strolch.model.OrderVisitor;
|
||||
import li.strolch.model.ParameterBag;
|
||||
import li.strolch.model.Resource;
|
||||
import li.strolch.model.ResourceVisitor;
|
||||
import li.strolch.model.StrolchElement;
|
||||
import li.strolch.model.StrolchRootElement;
|
||||
import li.strolch.model.parameter.Parameter;
|
||||
|
@ -64,9 +66,13 @@ public interface StrolchTransaction extends AutoCloseable {
|
|||
|
||||
public void addCommand(Command command);
|
||||
|
||||
public <U> List<U> doQuery(OrderQuery<U> query);
|
||||
public List<Order> doQuery(OrderQuery query);
|
||||
|
||||
public <U> List<U> doQuery(ResourceQuery<U> query);
|
||||
public <U> List<U> doQuery(OrderQuery query, OrderVisitor<U> orderVisitor);
|
||||
|
||||
public List<Resource> doQuery(ResourceQuery query);
|
||||
|
||||
public <U> List<U> doQuery(ResourceQuery query, ResourceVisitor<U> resourceVisitor);
|
||||
|
||||
/**
|
||||
* <p>
|
||||
|
|
|
@ -3,6 +3,7 @@ package li.strolch.persistence.inmemory;
|
|||
import java.util.List;
|
||||
|
||||
import li.strolch.model.Order;
|
||||
import li.strolch.model.OrderVisitor;
|
||||
import li.strolch.model.query.OrderQuery;
|
||||
import li.strolch.persistence.api.OrderDao;
|
||||
import li.strolch.runtime.query.inmemory.InMemoryOrderQueryVisitor;
|
||||
|
@ -11,9 +12,9 @@ import li.strolch.runtime.query.inmemory.InMemoryQuery;
|
|||
public class InMemoryOrderDao extends InMemoryDao<Order> implements OrderDao {
|
||||
|
||||
@Override
|
||||
public <U> List<U> doQuery(OrderQuery<U> orderQuery) {
|
||||
public <U> List<U> doQuery(OrderQuery orderQuery, OrderVisitor<U> orderVisitor) {
|
||||
InMemoryOrderQueryVisitor visitor = new InMemoryOrderQueryVisitor();
|
||||
InMemoryQuery<Order, U> query = visitor.visit(orderQuery);
|
||||
InMemoryQuery<Order, U> query = visitor.visit(orderQuery, orderVisitor);
|
||||
return query.doQuery(this);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3,6 +3,7 @@ package li.strolch.persistence.inmemory;
|
|||
import java.util.List;
|
||||
|
||||
import li.strolch.model.Resource;
|
||||
import li.strolch.model.ResourceVisitor;
|
||||
import li.strolch.model.query.ResourceQuery;
|
||||
import li.strolch.persistence.api.ResourceDao;
|
||||
import li.strolch.runtime.query.inmemory.InMemoryQuery;
|
||||
|
@ -11,9 +12,9 @@ import li.strolch.runtime.query.inmemory.InMemoryResourceQueryVisitor;
|
|||
public class InMemoryResourceDao extends InMemoryDao<Resource> implements ResourceDao {
|
||||
|
||||
@Override
|
||||
public <U> List<U> doQuery(ResourceQuery<U> resourceQuery) {
|
||||
public <U> List<U> doQuery(ResourceQuery resourceQuery, ResourceVisitor<U> resourceVisitor) {
|
||||
InMemoryResourceQueryVisitor visitor = new InMemoryResourceQueryVisitor();
|
||||
InMemoryQuery<Resource, U> query = visitor.visit(resourceQuery);
|
||||
InMemoryQuery<Resource, U> query = visitor.visit(resourceQuery, resourceVisitor);
|
||||
return query.doQuery(this);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -39,8 +39,8 @@ public class InMemoryOrderQueryVisitor extends InMemoryQueryVisitor<Order, Order
|
|||
return new InMemoryOrderQueryVisitor();
|
||||
}
|
||||
|
||||
public <U> InMemoryQuery<Order, U> visit(OrderQuery<U> orderQuery) {
|
||||
DBC.PRE.assertNotNull("OrderVisitor may not be null!", orderQuery.getElementVisitor());
|
||||
public <U> InMemoryQuery<Order, U> visit(OrderQuery orderQuery, OrderVisitor<U> orderVisitor) {
|
||||
DBC.PRE.assertNotNull("OrderVisitor may not be null!", orderVisitor);
|
||||
orderQuery.accept(this);
|
||||
|
||||
if (this.navigator == null) {
|
||||
|
@ -48,12 +48,11 @@ public class InMemoryOrderQueryVisitor extends InMemoryQueryVisitor<Order, Order
|
|||
throw new QueryException(msg);
|
||||
}
|
||||
|
||||
OrderVisitor<U> elementVisitor = orderQuery.getElementVisitor();
|
||||
if (this.selectors.isEmpty())
|
||||
return new InMemoryQuery<>(this.navigator, null, elementVisitor);
|
||||
return new InMemoryQuery<>(this.navigator, null, orderVisitor);
|
||||
|
||||
DBC.PRE.assertTrue("Invalid query as it may only contain one selector!", this.selectors.size() == 1); //$NON-NLS-1$
|
||||
return new InMemoryQuery<>(this.navigator, this.selectors.get(0), elementVisitor);
|
||||
return new InMemoryQuery<>(this.navigator, this.selectors.get(0), orderVisitor);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -15,13 +15,13 @@
|
|||
*/
|
||||
package li.strolch.runtime.query.inmemory;
|
||||
|
||||
import ch.eitchnet.utils.dbc.DBC;
|
||||
import li.strolch.model.Resource;
|
||||
import li.strolch.model.ResourceVisitor;
|
||||
import li.strolch.model.query.ResourceQuery;
|
||||
import li.strolch.model.query.ResourceQueryVisitor;
|
||||
import li.strolch.model.query.StrolchTypeNavigation;
|
||||
import li.strolch.persistence.api.ResourceDao;
|
||||
import ch.eitchnet.utils.dbc.DBC;
|
||||
|
||||
/**
|
||||
* @author Robert von Burg <eitch@eitchnet.ch>
|
||||
|
@ -38,8 +38,8 @@ public class InMemoryResourceQueryVisitor extends InMemoryQueryVisitor<Resource,
|
|||
return new InMemoryResourceQueryVisitor();
|
||||
}
|
||||
|
||||
public <U> InMemoryQuery<Resource, U> visit(ResourceQuery<U> resourceQuery) {
|
||||
DBC.PRE.assertNotNull("ResourceVisitor may not be null!", resourceQuery.getElementVisitor());
|
||||
public <U> InMemoryQuery<Resource, U> visit(ResourceQuery resourceQuery, ResourceVisitor<U> resourceVisitor) {
|
||||
DBC.PRE.assertNotNull("ResourceVisitor may not be null!", resourceVisitor);
|
||||
resourceQuery.accept(this);
|
||||
|
||||
if (this.navigator == null) {
|
||||
|
@ -47,12 +47,11 @@ public class InMemoryResourceQueryVisitor extends InMemoryQueryVisitor<Resource,
|
|||
throw new QueryException(msg);
|
||||
}
|
||||
|
||||
ResourceVisitor<U> elementVisitor = resourceQuery.getElementVisitor();
|
||||
if (this.selectors.isEmpty())
|
||||
return new InMemoryQuery<>(this.navigator, null, elementVisitor);
|
||||
return new InMemoryQuery<>(this.navigator, null, resourceVisitor);
|
||||
|
||||
DBC.INTERIM.assertTrue("Invalid query as it may only contain one selector!", this.selectors.size() == 1); //$NON-NLS-1$
|
||||
return new InMemoryQuery<>(this.navigator, this.selectors.get(0), elementVisitor);
|
||||
return new InMemoryQuery<>(this.navigator, this.selectors.get(0), resourceVisitor);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -35,6 +35,8 @@ import li.strolch.model.query.OrderQuery;
|
|||
import li.strolch.model.query.ParameterSelection;
|
||||
import li.strolch.model.query.ResourceQuery;
|
||||
import li.strolch.model.query.Selection;
|
||||
import li.strolch.model.visitor.NoStrategyOrderVisitor;
|
||||
import li.strolch.model.visitor.NoStrategyResourceVisitor;
|
||||
import li.strolch.persistence.api.StrolchTransaction;
|
||||
import li.strolch.runtime.StrolchConstants;
|
||||
|
||||
|
@ -63,14 +65,14 @@ public class QueryTest {
|
|||
tx.getResourceMap().add(tx, res1);
|
||||
}
|
||||
|
||||
ResourceQuery<Resource> query = ResourceQuery.query("MyType");
|
||||
ResourceQuery query = ResourceQuery.query("MyType");
|
||||
List<Selection> elementAndSelections = new ArrayList<>();
|
||||
elementAndSelections.add(new IdSelection("@1"));
|
||||
elementAndSelections.add(ParameterSelection.integerSelection(BAG_ID, "nbOfBooks", 33));
|
||||
query.and().with(elementAndSelections);
|
||||
|
||||
InMemoryResourceQueryVisitor resourceQuery = new InMemoryResourceQueryVisitor();
|
||||
InMemoryQuery<Resource, Resource> inMemoryQuery = resourceQuery.visit(query);
|
||||
InMemoryQuery<Resource, Resource> inMemoryQuery = resourceQuery.visit(query, new NoStrategyResourceVisitor());
|
||||
List<Resource> result;
|
||||
try (StrolchTransaction tx = container.getRealm(StrolchConstants.DEFAULT_REALM).openTx()) {
|
||||
result = inMemoryQuery.doQuery(tx.getPersistenceHandler().getResourceDao(tx));
|
||||
|
@ -93,14 +95,14 @@ public class QueryTest {
|
|||
tx.getOrderMap().add(tx, o1);
|
||||
}
|
||||
|
||||
OrderQuery<Order> query = OrderQuery.query("MyType");
|
||||
OrderQuery query = OrderQuery.query("MyType");
|
||||
List<Selection> elementAndSelections = new ArrayList<>();
|
||||
elementAndSelections.add(new IdSelection("@1"));
|
||||
elementAndSelections.add(ParameterSelection.integerSelection(BAG_ID, "nbOfBooks", 33));
|
||||
query.and().with(elementAndSelections);
|
||||
|
||||
InMemoryOrderQueryVisitor orderQuery = new InMemoryOrderQueryVisitor();
|
||||
InMemoryQuery<Order, Order> inMemoryQuery = orderQuery.visit(query);
|
||||
InMemoryQuery<Order, Order> inMemoryQuery = orderQuery.visit(query, new NoStrategyOrderVisitor());
|
||||
List<Order> result;
|
||||
try (StrolchTransaction tx = container.getRealm(StrolchConstants.DEFAULT_REALM).openTx()) {
|
||||
result = inMemoryQuery.doQuery(tx.getPersistenceHandler().getOrderDao(tx));
|
||||
|
@ -121,7 +123,7 @@ public class QueryTest {
|
|||
tx.getResourceMap().add(tx, res1);
|
||||
}
|
||||
|
||||
ResourceQuery<Resource> query = ResourceQuery.query("MyType");
|
||||
ResourceQuery query = ResourceQuery.query("MyType");
|
||||
query.and().with(ParameterSelection.stringSelection(BAG_ID, PARAM_STRING_ID, "olch").contains(true));
|
||||
List<Resource> result;
|
||||
try (StrolchTransaction tx = container.getRealm(StrolchConstants.DEFAULT_REALM).openTx()) {
|
||||
|
@ -143,7 +145,7 @@ public class QueryTest {
|
|||
tx.getResourceMap().add(tx, res1);
|
||||
}
|
||||
|
||||
ResourceQuery<Resource> query = ResourceQuery.query("MyType");
|
||||
ResourceQuery query = ResourceQuery.query("MyType");
|
||||
query.and().with(ParameterSelection.stringSelection(BAG_ID, PARAM_STRING_ID, "str").contains(true));
|
||||
List<Resource> result;
|
||||
try (StrolchTransaction tx = container.getRealm(StrolchConstants.DEFAULT_REALM).openTx()) {
|
||||
|
@ -164,7 +166,7 @@ public class QueryTest {
|
|||
tx.getResourceMap().add(tx, res1);
|
||||
}
|
||||
|
||||
ResourceQuery<Resource> query = ResourceQuery.query("MyType");
|
||||
ResourceQuery query = ResourceQuery.query("MyType");
|
||||
query.and().with(ParameterSelection.stringSelection(BAG_ID, PARAM_STRING_ID, "strolch").caseInsensitive(true));
|
||||
List<Resource> result;
|
||||
try (StrolchTransaction tx = container.getRealm(StrolchConstants.DEFAULT_REALM).openTx()) {
|
||||
|
@ -186,7 +188,7 @@ public class QueryTest {
|
|||
tx.getResourceMap().add(tx, res1);
|
||||
}
|
||||
|
||||
ResourceQuery<Resource> query = ResourceQuery.query("MyType");
|
||||
ResourceQuery query = ResourceQuery.query("MyType");
|
||||
query.and().with(ParameterSelection.stringSelection(BAG_ID, PARAM_STRING_ID, "strolch"));
|
||||
List<Resource> result;
|
||||
try (StrolchTransaction tx = container.getRealm(StrolchConstants.DEFAULT_REALM).openTx()) {
|
||||
|
@ -210,7 +212,7 @@ public class QueryTest {
|
|||
}
|
||||
|
||||
{
|
||||
ResourceQuery<Resource> query = ResourceQuery.query("MyType");
|
||||
ResourceQuery query = ResourceQuery.query("MyType");
|
||||
query.not(new IdSelection("@1"));
|
||||
List<Resource> result;
|
||||
try (StrolchTransaction tx = container.getRealm(StrolchConstants.DEFAULT_REALM).openTx()) {
|
||||
|
@ -221,7 +223,7 @@ public class QueryTest {
|
|||
}
|
||||
|
||||
{
|
||||
ResourceQuery<Resource> query = ResourceQuery.query("MyType");
|
||||
ResourceQuery query = ResourceQuery.query("MyType");
|
||||
query.not(new IdSelection("@2"));
|
||||
List<Resource> result;
|
||||
try (StrolchTransaction tx = container.getRealm(StrolchConstants.DEFAULT_REALM).openTx()) {
|
||||
|
@ -232,7 +234,7 @@ public class QueryTest {
|
|||
}
|
||||
|
||||
{
|
||||
ResourceQuery<Resource> query = ResourceQuery.query("MyType");
|
||||
ResourceQuery query = ResourceQuery.query("MyType");
|
||||
query.not(new IdSelection("@1", "@2"));
|
||||
List<Resource> result;
|
||||
try (StrolchTransaction tx = container.getRealm(StrolchConstants.DEFAULT_REALM).openTx()) {
|
||||
|
|
Loading…
Reference in New Issue