Author: michiel Date: 2009-10-20 22:05:58 +0200 (Tue, 20 Oct 2009) New Revision: 39251
Modified: mmbase/trunk/core/src/main/java/org/mmbase/bridge/implementation/VirtualNodeManager.java Log: exposed the query->fields functionaliy Modified: mmbase/trunk/core/src/main/java/org/mmbase/bridge/implementation/VirtualNodeManager.java =================================================================== --- mmbase/trunk/core/src/main/java/org/mmbase/bridge/implementation/VirtualNodeManager.java 2009-10-20 15:28:34 UTC (rev 39250) +++ mmbase/trunk/core/src/main/java/org/mmbase/bridge/implementation/VirtualNodeManager.java 2009-10-20 20:05:58 UTC (rev 39251) @@ -91,55 +91,64 @@ * Returns the fieldlist of this nodemanager after making sure the manager is synced with the builder. * @since MMBase-1.8 */ - @Override protected Map<String, Field> getFieldTypes() { + @Override + protected Map<String, Field> getFieldTypes() { if (builder != null) { return fieldTypes; } else { if (query != null) { // means not yet called (lazy loading of fields) - // code to solve the fields. - for (Step step : query.getSteps()) { - String name = step.getAlias(); + fieldTypes.putAll(getFieldTypes(query, this)); + query = null; + } + return fieldTypes; + } + } + + public static Map<String, Field> getFieldTypes(SearchQuery query, NodeManager nm) { + Cloud cloud = nm.getCloud(); + Map<String, Field> fieldTypes = new HashMap<String, Field>(); + // code to solve the fields. + for (Step step : query.getSteps()) { + String name = step.getAlias(); + if (name == null) { + name = step.getTableName(); + } + Field ft = new VirtualNodeManagerField(nm, UNKNOWN_NODE_TYPE, name); + fieldTypes.put(name, ft); + + if (allowNonQueriedFields && ! query.isAggregating()) { + /// if hasField returns true also for unqueried fields + for (Field f : cloud.getNodeManager(step.getTableName()).getFields()) { + final String fieldName = name + "." + f.getName(); + fieldTypes.put(fieldName, new VirtualNodeManagerField(nm, f, fieldName)); + } + } + } + if (! allowNonQueriedFields || query.isAggregating()) { + //hasField only returns true for queried fields + for (StepField field : query.getFields()) { + Step step = field.getStep(); + Field f = cloud.getNodeManager(step.getTableName()).getField(field.getFieldName()); + String name = field.getAlias(); + if (name == null) { + name = step.getAlias(); if (name == null) { name = step.getTableName(); } - Field ft = new VirtualNodeManagerField(UNKNOWN_NODE_TYPE, name); - fieldTypes.put(name, ft); - - if (allowNonQueriedFields && ! query.isAggregating()) { - /// if hasField returns true also for unqueried fields - for (Field f : cloud.getNodeManager(step.getTableName()).getFields()) { - final String fieldName = name + "." + f.getName(); - fieldTypes.put(fieldName, new VirtualNodeManagerField(f, fieldName)); - } - } + name += "." + field.getFieldName(); } - if (! allowNonQueriedFields || query.isAggregating()) { - //hasField only returns true for queried fields - for (StepField field : query.getFields()) { - Step step = field.getStep(); - Field f = cloud.getNodeManager(step.getTableName()).getField(field.getFieldName()); - String name = field.getAlias(); - if (name == null) { - name = step.getAlias(); - if (name == null) { - name = step.getTableName(); - } - name += "." + field.getFieldName(); - } - final String fieldName = name; - fieldTypes.put(name, new VirtualNodeManagerField(f, fieldName)); + final String fieldName = name; + fieldTypes.put(name, new VirtualNodeManagerField(nm, f, fieldName)); - } - } - query = null; } - return fieldTypes; } + return fieldTypes; } - @Override public String getGUIName(int plurality, Locale locale) { + @Override + public String getGUIName(int plurality, Locale locale) { if (locale == null) locale = cloud.getLocale(); if (builder != null) { if (plurality == NodeManager.GUI_SINGULAR) { @@ -170,16 +179,18 @@ /** */ - private class VirtualNodeManagerField extends FieldWrapper { + public static class VirtualNodeManagerField extends FieldWrapper { private final String name; - VirtualNodeManagerField(Field field, String name) { + private final NodeManager nodeManager; + VirtualNodeManagerField(NodeManager nm, Field field, String name) { super(field); this.name = name; + this.nodeManager = nm; } @Override public NodeManager getNodeManager() { - return VirtualNodeManager.this; + return nodeManager; } @Override public String getName() { _______________________________________________ Cvs mailing list Cvs@lists.mmbase.org http://lists.mmbase.org/mailman/listinfo/cvs