Author: michiel
Date: 2009-11-18 22:37:03 +0100 (Wed, 18 Nov 2009)
New Revision: 39789
Modified:
mmbase/trunk/core/src/main/java/org/mmbase/util/functions/GuiFunction.java
mmbase/trunk/core/src/main/java/org/mmbase/util/functions/NodeFunction.java
Log:
MMB-1896
Modified:
mmbase/trunk/core/src/main/java/org/mmbase/util/functions/GuiFunction.java
===================================================================
--- mmbase/trunk/core/src/main/java/org/mmbase/util/functions/GuiFunction.java
2009-11-18 21:36:52 UTC (rev 39788)
+++ mmbase/trunk/core/src/main/java/org/mmbase/util/functions/GuiFunction.java
2009-11-18 21:37:03 UTC (rev 39789)
@@ -9,7 +9,6 @@
*/
package org.mmbase.util.functions;
-import org.mmbase.module.core.MMObjectNode;
import org.mmbase.bridge.*;
import org.mmbase.util.logging.Logger;
import org.mmbase.util.logging.Logging;
@@ -21,7 +20,7 @@
* @version $Id$
* @since MMBase-1.9
*/
-public class GuiFunction extends NodeFunction<String> {
+public class GuiFunction extends
org.mmbase.module.core.MMObjectNodeFunction<String> {
private static final long serialVersionUID = 0L;
private static final Logger log =
Logging.getLoggerInstance(GuiFunction.class);
public static final Parameter<?>[] PARAMETERS = {
@@ -52,7 +51,7 @@
parameters.set("stringvalue", node.getStringValue(fieldName));
}
}
- MMObjectNode n = (MMObjectNode) parameters.get(Parameter.CORENODE);
+ org.mmbase.module.core.MMObjectNode n =
(org.mmbase.module.core.MMObjectNode) parameters.get(Parameter.CORENODE);
return n.getBuilder().getGUIIndicator(n, parameters);
}
Modified:
mmbase/trunk/core/src/main/java/org/mmbase/util/functions/NodeFunction.java
===================================================================
--- mmbase/trunk/core/src/main/java/org/mmbase/util/functions/NodeFunction.java
2009-11-18 21:36:52 UTC (rev 39788)
+++ mmbase/trunk/core/src/main/java/org/mmbase/util/functions/NodeFunction.java
2009-11-18 21:37:03 UTC (rev 39789)
@@ -10,8 +10,6 @@
package org.mmbase.util.functions;
import java.util.*;
-import org.mmbase.module.core.MMObjectNode;
-import org.mmbase.module.core.MMObjectBuilder;
import org.mmbase.bridge.*;
import org.mmbase.util.logging.Logger;
@@ -22,9 +20,12 @@
* that it always has one implicit node argument. This node-argument needs not
be mentioned in
* the Parameter array of the constructor.
*
+ * If you need to impelment this and like to use MMObjectNodes for the
implementation (which would probably make the function unusable in RMMCI), then
you could
+ * extend {...@link org.mmbase.module.core.MMObjectNodeFunction}.
+ *
+ *
* @author Michiel Meeuwissen
* @version $Id$
- * @see org.mmbase.module.core.MMObjectBuilder#executeFunction
* @see org.mmbase.bridge.Node#getFunctionValue
* @see org.mmbase.util.functions.BeanFunction
* @since MMBase-1.8
@@ -93,102 +94,19 @@
List<Parameter> defList = new ArrayList(Arrays.asList(def));
if (! defList.contains(Parameter.NODE)) defList.add(Parameter.NODE);
if (! defList.contains(Parameter.CLOUD)) defList.add(Parameter.CLOUD);
- if (! defList.contains(Parameter.CORENODE))
defList.add(Parameter.CORENODE);
return defList.toArray(Parameter.emptyArray());
}
+
/**
* Returns a new instance of NodeInstanceFunction, which represents an
actual Function.
*/
- final public Function<R> newInstance(MMObjectNode node) {
+ final public Function<R> newInstance(Node node) {
return new NodeInstanceFunction(node);
}
/**
- * Implements the function on a certain node. Override this method
<em>or</em> it's bridge
- * counter-part {...@link #getFunctionValue(org.mmbase.bridge.Node,
Parameters)}. Overriding the
- * bridge version has two advantages. It's easier, and mmbase security
will be honoured. That
- * last thing is of course not necesary if you are not going to use other
nodes.
- *
- * XXX: made final because it does not work well if you don't implement a
bridge version
*/
- protected final R getFunctionValue(final MMObjectNode coreNode, final
Parameters parameters) {
- if (coreNode == null) throw new RuntimeException("No node argument
given for " + this + "(" + parameters + ")!");
- Node node = parameters.get(Parameter.NODE);
- if (node == null) {
- Cloud cloud = parameters.get(Parameter.CLOUD);
- if (cloud == null) {
- // lets try this
- try {
- cloud =
org.mmbase.bridge.ContextProvider.getDefaultCloudContext().getCloud("mmbase",
"class", null);
- } catch (org.mmbase.security.SecurityException se) {
- // perhaps class-security not implemented by security
implementation.
- log.warn("" + se.getMessage());
- cloud =
org.mmbase.bridge.ContextProvider.getDefaultCloudContext().getCloud("mmbase");
- }
- if (cloud == null) {
- throw new RuntimeException("No cloud argument given" +
this + "(" + parameters + ")!" + Logging.stackTrace());
- }
- }
- if (coreNode instanceof org.mmbase.module.core.VirtualNode) {
- node = new
org.mmbase.bridge.implementation.VirtualNode((org.mmbase.module.core.VirtualNode)
coreNode, cloud);
- log.debug("Core node is virtual, taking bridge node " + node);
- } else {
- int number = coreNode.getNumber();
- if (number == -1) {
- // must be in transaction or uncommited node
- String tmpNumber =
coreNode.getStringValue(MMObjectBuilder.TMP_FIELD_NUMBER);
- if (cloud.hasNode(tmpNumber)) {
- node = cloud.getNode(tmpNumber);
- log.debug("Found transactional (?) node " + node + "
from " + cloud);
- } else {
- // last resort..., we're really desperate now.
- // This happens when calling gui() in transaction.
- // Perhaps we need something like a public new
BasicNode(MMobjectNode, Cloud). Abusing VirtualNode for similar purpose now.
- org.mmbase.module.core.VirtualNode virtual = new
org.mmbase.module.core.VirtualNode(coreNode.getBuilder());
- for (Map.Entry<String, Object> entry :
coreNode.getValues().entrySet()) {
- virtual.storeValue(entry.getKey(),
entry.getValue());
- }
- node = new
org.mmbase.bridge.implementation.VirtualNode(virtual, cloud);
- log.debug("Found transaction (?) node " + node + ".
Not in cloud " + cloud + " taking" + node);
- }
- } else {
- if (cloud.mayRead(number)) {
- node = cloud.getNode(number);
- log.debug("Node exists, taking " + node + " from " +
cloud);
- } else {
- log.warn("Could not produce Bridge Node for '" +
number + "', cannot execute node function.");
- return null;
- }
- }
- }
- parameters.set(Parameter.NODE, node);
- } else {
- log.debug("node as param: " + node);
- }
-
- return getFunctionValue(node, parameters);
-
- }
-
- /**
- * Utility method to convert a {...@link org.mmbase.bridge.Node} to a a
{...@link org.mmbase.module.core.MMObjectNode}.
- */
- protected final MMObjectNode getCoreNode(final MMObjectBuilder builder,
final Node node) {
- if (node instanceof org.mmbase.bridge.implementation.VirtualNode) {
- MMObjectNode n = ((org.mmbase.bridge.implementation.VirtualNode)
node).getNodeRef();
- log.debug("" + node + " -> " + n);
- return n;
- } else {
- MMObjectNode n = builder.getNode(node.getNumber());
- log.debug("" + node + " -> " + n);
- return n;
- }
-
- }
-
- /**
- */
protected abstract R getFunctionValue(Node node, Parameters parameters);
protected Node getNode(Parameters parameters) {
@@ -243,30 +161,34 @@
}
}
+
/**
* This represents the function on one specific Node. This is instantiated
when new Istance
* if called on a NodeFunction.
*/
private class NodeInstanceFunction extends WrappedFunction<R> {
- protected MMObjectNode node;
+ protected Node node;
- public NodeInstanceFunction(MMObjectNode node) {
+ public NodeInstanceFunction(Node node) {
super(NodeFunction.this);
this.node = node;
}
- //javadoc inherited
+ @Override
public final R getFunctionValue(Parameters parameters) {
- parameters.set(Parameter.CORENODE, node);
+ parameters.set(Parameter.NODE, node);
return NodeFunction.this.getFunctionValue(node, parameters);
}
+ @Override
public String toString() {
return NodeFunction.this.toString() + " for node " +
node.getNumber();
}
}
+
+
}
_______________________________________________
Cvs mailing list
[email protected]
http://lists.mmbase.org/mailman/listinfo/cvs