Author: michiel
Date: 2010-04-12 18:21:03 +0200 (Mon, 12 Apr 2010)
New Revision: 41855
Modified:
mmbase/trunk/bridge/src/main/java/org/mmbase/bridge/implementation/BasicNodeQuery.java
mmbase/trunk/bridge/src/main/java/org/mmbase/bridge/implementation/BasicQuery.java
mmbase/trunk/bridge/src/main/java/org/mmbase/bridge/util/Queries.java
mmbase/trunk/bridge/src/main/java/org/mmbase/storage/search/BridgeClusterQueries.java
mmbase/trunk/bridge/src/main/java/org/mmbase/storage/search/ClusterQueries.java
mmbase/trunk/bridge/src/main/java/org/mmbase/storage/search/QueryContext.java
mmbase/trunk/bridge/src/main/java/org/mmbase/storage/search/implementation/BasicSearchQuery.java
mmbase/trunk/bridge/src/main/java/org/mmbase/storage/search/implementation/NodeSearchQuery.java
Log:
rationalized a bit
Modified:
mmbase/trunk/bridge/src/main/java/org/mmbase/bridge/implementation/BasicNodeQuery.java
===================================================================
---
mmbase/trunk/bridge/src/main/java/org/mmbase/bridge/implementation/BasicNodeQuery.java
2010-04-12 15:46:53 UTC (rev 41854)
+++
mmbase/trunk/bridge/src/main/java/org/mmbase/bridge/implementation/BasicNodeQuery.java
2010-04-12 16:21:03 UTC (rev 41855)
@@ -164,7 +164,7 @@
query.setDistinct(distinct);
if (distinct) { // in that case, make sure only the 'explicitely'
added fields remain.
query.removeFields();
- query.addFields(step, new BridgeClusterQueries(getCloud()));
+ query.addFields(step, new QueryContext.Bridge(getCloud()));
implicitFields.clear();
addFields(explicitFields);
}
Modified:
mmbase/trunk/bridge/src/main/java/org/mmbase/bridge/implementation/BasicQuery.java
===================================================================
---
mmbase/trunk/bridge/src/main/java/org/mmbase/bridge/implementation/BasicQuery.java
2010-04-12 15:46:53 UTC (rev 41854)
+++
mmbase/trunk/bridge/src/main/java/org/mmbase/bridge/implementation/BasicQuery.java
2010-04-12 16:21:03 UTC (rev 41855)
@@ -30,8 +30,10 @@
* @since MMBase-1.7
* @see org.mmbase.storage.search.implementation.BasicSearchQuery
*/
-public class BasicQuery implements Query {
+public class BasicQuery implements Query, java.io.Serializable {
+ private static final long serialVersionUID = 1L;
+
private static final Logger log =
Logging.getLoggerInstance(BasicQuery.class);
/**
Modified: mmbase/trunk/bridge/src/main/java/org/mmbase/bridge/util/Queries.java
===================================================================
--- mmbase/trunk/bridge/src/main/java/org/mmbase/bridge/util/Queries.java
2010-04-12 15:46:53 UTC (rev 41854)
+++ mmbase/trunk/bridge/src/main/java/org/mmbase/bridge/util/Queries.java
2010-04-12 16:21:03 UTC (rev 41855)
@@ -145,7 +145,7 @@
List<String> d = StringSplitter.split(directions);
try {
Query query = new BasicQuery(cloud,
- new
BridgeClusterQueries(cloud).getMultiLevelSearchQuery(snodes, f, distinct ?
"YES" : "NO", tables, constraints, orderVec, d,
Collections.singletonList(search)));
+ new
QueryContext.Bridge(cloud).getClusterQueries().getMultiLevelSearchQuery(snodes,
f, distinct ? "YES" : "NO", tables, constraints, orderVec, d,
Collections.singletonList(search)));
return query;
} catch (IllegalArgumentException iae) {
throw new BridgeException(iae.getMessage() + ". (arguments:
startNodes='" + startNodes + "', path='" + nodePath + "', fields='" + fields +
"', constraints='" + constraints + "' orderby='" + orderby + "', directions='"
+ directions + "', searchdir='" + searchDir + "')" , iae);
Modified:
mmbase/trunk/bridge/src/main/java/org/mmbase/storage/search/BridgeClusterQueries.java
===================================================================
---
mmbase/trunk/bridge/src/main/java/org/mmbase/storage/search/BridgeClusterQueries.java
2010-04-12 15:46:53 UTC (rev 41854)
+++
mmbase/trunk/bridge/src/main/java/org/mmbase/storage/search/BridgeClusterQueries.java
2010-04-12 16:21:03 UTC (rev 41855)
@@ -19,51 +19,48 @@
* @since MMBase-2.0
*/
public class BridgeClusterQueries extends ClusterQueries {
- private final Cloud cloud;
- public BridgeClusterQueries(Cloud cloud) {
- this.cloud = cloud;
+ private final QueryContext.Bridge queryContext;
+ public BridgeClusterQueries(QueryContext.Bridge qc) {
+ this.queryContext = qc;
}
@Override
+ public QueryContext getQueryContext() {
+ return queryContext;
+ }
+
+ @Override
protected int getNumberForAlias(String alias) {
- return cloud.getNode(alias).getNumber();
+ return queryContext.cloud.getNode(alias).getNumber();
}
@Override
protected boolean isRelation(String builder) {
- NodeManager insrel = cloud.getNodeManager("insrel");
- NodeManager nm = cloud.getNodeManager(builder);
+ NodeManager insrel = queryContext.cloud.getNodeManager("insrel");
+ NodeManager nm = queryContext.cloud.getNodeManager(builder);
return nm.equals(insrel) || insrel.getDescendants().contains(nm);
}
@Override
protected String getBuilder(int nodeNumber) {
- return cloud.getNode(nodeNumber).getNodeManager().getName();
+ return
queryContext.cloud.getNode(nodeNumber).getNodeManager().getName();
}
@Override
protected int getBuilderNumber(String nodeManager) {
- return cloud.getNodeManager(nodeManager).getNumber();
+ return queryContext.cloud.getNodeManager(nodeManager).getNumber();
}
@Override
protected String getParentBuilder(String builder) {
- NodeManager parent = cloud.getNodeManager(builder).getParent();
+ NodeManager parent =
queryContext.cloud.getNodeManager(builder).getParent();
return parent == null ? null : parent.getName();
}
@Override
- public Field getField(String builder, String fieldName) {
- try {
- return cloud.getNodeManager(builder).getField(fieldName);
- } catch (NotFoundException nfe) {
- throw new IllegalArgumentException(nfe);
- }
- }
- @Override
- protected StepField getField(String fieldName, SearchQuery query){
+ protected StepField getField(String fieldName, SearchQuery query) {
// TODO TEST.
String[] split = fieldName.split(".");
for (StepField sf : query.getFields()) {
@@ -73,16 +70,12 @@
}
return null;
}
- @Override
- public Collection<Field> getFields(String builder) {
- return
cloud.getNodeManager(builder).getFields(NodeManager.ORDER_CREATE);
- }
@Override
public String getTrueTableName(String table) {
String tab = getTableName(table);
- if (cloud.hasRelationManager(tab)) {
- return cloud.getRelationManager(tab).getName();
+ if (queryContext.cloud.hasRelationManager(tab)) {
+ return queryContext.cloud.getRelationManager(tab).getName();
} else {
return table;
}
@@ -98,13 +91,12 @@
protected String getBuilder(final String tableAlias, Map<String, Integer>
roles) {
String tableName = getTableName(tableAlias);
try {
- RelationManager rm = cloud.getRelationManager(tableName);
- System.out.println(cloud);
+ RelationManager rm =
queryContext.cloud.getRelationManager(tableName);
String r = rm.getForwardRole();
roles.put(tableAlias, rm.getNumber());
return rm.getName();
} catch (NotFoundException nfe) {
- if (cloud.hasNodeManager(tableName)) {
+ if (queryContext.cloud.hasNodeManager(tableName)) {
return tableName;
} else {
throw new IllegalArgumentException("'" + tableAlias + "' is
neither a role, nor a builder");
Modified:
mmbase/trunk/bridge/src/main/java/org/mmbase/storage/search/ClusterQueries.java
===================================================================
---
mmbase/trunk/bridge/src/main/java/org/mmbase/storage/search/ClusterQueries.java
2010-04-12 15:46:53 UTC (rev 41854)
+++
mmbase/trunk/bridge/src/main/java/org/mmbase/storage/search/ClusterQueries.java
2010-04-12 16:21:03 UTC (rev 41855)
@@ -25,6 +25,8 @@
private static final Logger log=
Logging.getLoggerInstance(ClusterQueries.class);
+
+ protected abstract QueryContext getQueryContext();
/**
* Translates a search direction constant to a string.
*
@@ -82,7 +84,7 @@
public Field getField(String fieldName) {
String builderName = getBuilderNameFromField(fieldName);
if (builderName.length() > 0) {
- return getField(builderName, getFieldNameFromField(fieldName));
+ return getQueryContext().getField(builderName,
getFieldNameFromField(fieldName));
} else {
//
String bul = getTrueTableName(fieldName);
@@ -93,11 +95,8 @@
return null;
}
- public abstract Field getField(String builder, String fieldName);
- public abstract Collection<? extends Field> getFields(String builder);
-
/**
* Returns the name part of a tablename.
* The name part is the table name minus the numeric digit appended
@@ -467,7 +466,7 @@
return;
}
- Field fieldDefs= getField(step.getTableName(), fieldName);
+ Field fieldDefs= getQueryContext().getField(step.getTableName(),
fieldName);
if (fieldDefs == null) {
throw new IllegalArgumentException("Not a known field of builder "
+ step.getTableName() + ": \"" + fieldName + "\"");
}
Modified:
mmbase/trunk/bridge/src/main/java/org/mmbase/storage/search/QueryContext.java
===================================================================
---
mmbase/trunk/bridge/src/main/java/org/mmbase/storage/search/QueryContext.java
2010-04-12 15:46:53 UTC (rev 41854)
+++
mmbase/trunk/bridge/src/main/java/org/mmbase/storage/search/QueryContext.java
2010-04-12 16:21:03 UTC (rev 41855)
@@ -25,13 +25,19 @@
String getStorageIdentifier(String s);
Field getField(String builder, String fieldName);
+ Collection<? extends Field> getFields(String builder);
+ ClusterQueries getClusterQueries();
+
public static class Bridge implements QueryContext {
protected final Cloud cloud;
+ protected final BridgeClusterQueries clusterQueries;
+
public Bridge(Cloud c) {
cloud = c;
+ clusterQueries = new BridgeClusterQueries(this);
}
public String getStorageIdentifier(String s) {
return s;
@@ -39,6 +45,17 @@
public Field getField(String builder, String fieldName) {
return cloud.getNodeManager(builder).getField(fieldName);
}
+ public Collection<Field> getFields(String builder) {
+ return
cloud.getNodeManager(builder).getFields(NodeManager.ORDER_CREATE);
+ }
+
+
+
+ public BridgeClusterQueries getClusterQueries() {
+ return clusterQueries;
+ }
+
+
}
Modified:
mmbase/trunk/bridge/src/main/java/org/mmbase/storage/search/implementation/BasicSearchQuery.java
===================================================================
---
mmbase/trunk/bridge/src/main/java/org/mmbase/storage/search/implementation/BasicSearchQuery.java
2010-04-12 15:46:53 UTC (rev 41854)
+++
mmbase/trunk/bridge/src/main/java/org/mmbase/storage/search/implementation/BasicSearchQuery.java
2010-04-12 16:21:03 UTC (rev 41855)
@@ -454,20 +454,20 @@
}
- public void addFields(Step step, ClusterQueries cq) {
- addFields(step, step.getTableName(), cq);
+ public void addFields(Step step, QueryContext qc) {
+ addFields(step, step.getTableName(), qc);
}
/**
* Add all fields of given step
*/
- protected void addFields(Step step, String builder, ClusterQueries cq) {
+ protected void addFields(Step step, String builder, QueryContext qc) {
if (! modifiable) throw new IllegalStateException("Unmodifiable");
// http://www.mmbase.org/jira/browse/MMB-1435,
// Using fields with "ORDER_CREATE" only returns fields actually in
storage, and also in the
// right order, which is important for microsoft JDBC.
- for (Field field : cq.getFields(builder)) {
+ for (Field field : qc.getFields(builder)) {
if (! field.isVirtual()) {
BasicStepField stepField = addField(step, field);
mapField(field, stepField);
Modified:
mmbase/trunk/bridge/src/main/java/org/mmbase/storage/search/implementation/NodeSearchQuery.java
===================================================================
---
mmbase/trunk/bridge/src/main/java/org/mmbase/storage/search/implementation/NodeSearchQuery.java
2010-04-12 15:46:53 UTC (rev 41854)
+++
mmbase/trunk/bridge/src/main/java/org/mmbase/storage/search/implementation/NodeSearchQuery.java
2010-04-12 16:21:03 UTC (rev 41855)
@@ -51,12 +51,12 @@
* {...@link org.mmbase.module.core.VirtualBuilder virtual} builder.
* @throws IllegalArgumentException When an invalid argument is supplied.
*/
- public NodeSearchQuery(String builder, ClusterQueries cq) {
+ public NodeSearchQuery(String builder, QueryContext qc) {
if (builder == null) {
throw new IllegalArgumentException("Invalid builder value: " +
builder);
}
Step step = super.addStep(builder);
- addFields(step, builder, cq);
+ addFields(step, builder, qc);
this.builder = builder;
}
_______________________________________________
Cvs mailing list
[email protected]
http://lists.mmbase.org/mailman/listinfo/cvs