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

Reply via email to