Author: michiel
Date: 2009-06-05 15:28:16 +0200 (Fri, 05 Jun 2009)
New Revision: 35776
Modified:
mmbase/trunk/core/src/main/java/org/mmbase/datatypes/processors/Related.java
mmbase/trunk/core/src/main/java/org/mmbase/datatypes/processors/RelatedField.java
Log:
Simplified/generalized a bit
Modified:
mmbase/trunk/core/src/main/java/org/mmbase/datatypes/processors/Related.java
===================================================================
---
mmbase/trunk/core/src/main/java/org/mmbase/datatypes/processors/Related.java
2009-06-05 13:21:16 UTC (rev 35775)
+++
mmbase/trunk/core/src/main/java/org/mmbase/datatypes/processors/Related.java
2009-06-05 13:28:16 UTC (rev 35776)
@@ -15,6 +15,7 @@
import org.mmbase.util.*;
import org.mmbase.storage.search.*;
import java.util.*;
+import java.util.concurrent.*;
import org.mmbase.util.logging.*;
/**
@@ -86,6 +87,44 @@
}
return nq;
}
+
+ protected NodeQuery getRelatedQuery(Node node) {
+ Cloud cloud = node.getCloud();
+ NodeQuery nq = Queries.createRelatedNodesQuery(node,
getRelatedType(node), role, searchDir);
+ for (Map.Entry<String, String> entry :
relationConstraints.entrySet()) {
+ Queries.addConstraint(nq, Queries.createConstraint(nq,
entry.getKey(), FieldCompareConstraint.EQUAL, entry.getValue()));
+ }
+ return nq;
+ }
+
+ protected String getKey(Node node, Field field) {
+ return Related.class.getName() + node.getValue("_number") + "." +
role + "." + getRelatedType(node) + "." + searchDir;
+ }
+
+ protected Node getRelatedNode(final Node node, final Field field) {
+ String key = getKey(node, field);
+ Node relatedNode = (Node) node.getCloud().getProperty(key);
+ if (relatedNode != null) {
+ log.debug("Found node in in " + key);
+ return relatedNode;
+ } else {
+ NodeQuery related = getRelatedQuery(node);
+ NodeList rl = related.getNodeManager().getList(related);
+ if (rl.size() > 0) {
+ relatedNode = rl.getNode(0);
+ if (node.getCloud() instanceof Transaction) {
+ node.getCloud().setProperty(key, relatedNode);
+ }
+ log.debug("Found relatedNode " + relatedNode);
+ } else {
+ log.debug("Not related");
+ }
+ return relatedNode;
+
+ }
+ }
+
+
}
public static class Setter extends AbstractProcessor {
@@ -154,20 +193,7 @@
// null cannot be related to anything
return null;
}
- NodeQuery relations = getRelationsQuery(node);
- NodeList rl = relations.getNodeManager().getList(relations);
- if (rl.size() == 0) {
- log.debug("Not found, returning null");
- return null;
- } else {
- Relation relation = rl.getNode(0).toRelation();
- log.debug("Found " + relation);
- if (relation.getSource().getNumber() == node.getNumber()) {
- return relation.getDestination();
- } else {
- return relation.getSource();
- }
- }
+ return getRelatedNode(node, field);
}
}
Modified:
mmbase/trunk/core/src/main/java/org/mmbase/datatypes/processors/RelatedField.java
===================================================================
---
mmbase/trunk/core/src/main/java/org/mmbase/datatypes/processors/RelatedField.java
2009-06-05 13:21:16 UTC (rev 35775)
+++
mmbase/trunk/core/src/main/java/org/mmbase/datatypes/processors/RelatedField.java
2009-06-05 13:28:16 UTC (rev 35776)
@@ -34,14 +34,6 @@
public abstract static class AbstractProcessor extends
Related.AbstractProcessor {
- protected NodeQuery getRelatedQuery(Node node) {
- Cloud cloud = node.getCloud();
- NodeQuery nq = Queries.createRelatedNodesQuery(node,
getRelatedType(node), role, searchDir);
- for (Map.Entry<String, String> entry :
relationConstraints.entrySet()) {
- Queries.addConstraint(nq, Queries.createConstraint(nq,
entry.getKey(), FieldCompareConstraint.EQUAL, entry.getValue()));
- }
- return nq;
- }
protected String otherField = null;
@@ -49,32 +41,7 @@
otherField = f;
}
- protected String getKey(Node node, Field field) {
- return RelatedField.class.getName() + node.getValue("_number") +
"." + role + "." + getRelatedType(node) + "." + searchDir;
- }
- protected Node getRelatedNode(final Node node, final Field field) {
- String key = getKey(node, field);
- Node relatedNode = (Node) node.getCloud().getProperty(key);
- if (relatedNode != null) {
- log.debug("Found node in in " + key);
- return relatedNode;
- } else {
- NodeQuery related = getRelatedQuery(node);
- NodeList rl = related.getNodeManager().getList(related);
- if (rl.size() > 0) {
- relatedNode = rl.getNode(0);
- if (node.getCloud() instanceof Transaction) {
- node.getCloud().setProperty(key, relatedNode);
- }
- log.debug("Found relatedNode " + relatedNode);
- } else {
- log.debug("Not related");
- }
- return relatedNode;
-
- }
- }
}
_______________________________________________
Cvs mailing list
[email protected]
http://lists.mmbase.org/mailman/listinfo/cvs