Author: michiel
Date: 2010-03-12 12:39:39 +0100 (Fri, 12 Mar 2010)
New Revision: 41358

Modified:
   
mmbase/trunk/applications/vpro-wizards/src/main/java/org/mmbase/applications/vprowizards/spring/action/CreateRelationAction.java
Log:
consider searchDir when creating relation. Also, make sortField default 'pos' 
if role posrel (as advertised in documetnaiton of the tags)

Modified: 
mmbase/trunk/applications/vpro-wizards/src/main/java/org/mmbase/applications/vprowizards/spring/action/CreateRelationAction.java
===================================================================
--- 
mmbase/trunk/applications/vpro-wizards/src/main/java/org/mmbase/applications/vprowizards/spring/action/CreateRelationAction.java
    2010-03-12 11:38:21 UTC (rev 41357)
+++ 
mmbase/trunk/applications/vpro-wizards/src/main/java/org/mmbase/applications/vprowizards/spring/action/CreateRelationAction.java
    2010-03-12 11:39:39 UTC (rev 41358)
@@ -55,17 +55,24 @@
         if(!SORT_POSITION_BEGIN.equals(sortPosition) && 
!SORT_POSITION_END.equals(sortPosition)){
             addGlobalError("error.field.value", new String[]{"sortPosition", 
sortPosition} );
         }
+
         if(!StringUtils.isBlank(sortField)){
             if(!relationManager.hasField(sortField)){
                 addGlobalError("error.field.unknown", new 
String[]{"sortField", this.getClass().getName(), relationManager.getName()});
             }
         }
-
         if (!hasErrors()) {
-            Relation rel = relationManager.createRelation(sourceNode, 
destinationNode);
+            Relation rel;
+            if ("source".equals(searchDir)) {
+                rel = relationManager.createRelation(destinationNode, 
sourceNode);
+            } else {
+                rel = relationManager.createRelation(sourceNode, 
destinationNode);
+            }
             for (Map.Entry<String, Object> entry : 
getRelationValues().entrySet()) {
                 rel.setValue(entry.getKey(), entry.getValue());
             }
+            log.info("Created relation " + rel);
+
             return rel;
         }
         return null;
@@ -78,10 +85,12 @@
      */
     @Override
     protected void processNode(Transaction transaction) {
+        log.info("Processing relation (sortField " + sortField + ")");
         if (!StringUtils.isBlank(sortField)) {
 
             // set the position if we need to do that
             Integer sortPositionValue = resolvePosition(transaction);
+            log.info("Resolved position value  " + sortPositionValue);
             if (sortPositionValue != null) {
                 getNode().setIntValue(sortField, sortPositionValue);
             }
@@ -107,17 +116,20 @@
             // find the lowest or highest relation number
 
             // it is unlikely that the path matches duplicate builder names 
here, but who knows?
-            PathBuilder pathBuilder = new PathBuilder(new String[] { 
sourceNode.getNodeManager().getName(), role,
+            PathBuilder pathBuilder = new PathBuilder(new String[] { 
sourceNode.getNodeManager().getName(),
+                                                                     role,
                                                                      
destinationNode.getNodeManager().getName() });
-            q = Queries.createQuery(transaction, sourceNode.getNumber() + "", 
pathBuilder.getPath(), pathBuilder
-                                    .getStep(1)
-                                    + "." + sortField, null, 
pathBuilder.getStep(1) + "." + sortField,
+            q = Queries.createQuery(transaction, sourceNode.getNumber() + "", 
pathBuilder.getPath(),
+                                    pathBuilder.getStep(1) + "." + sortField,
+                                    null, pathBuilder.getStep(1) + "." + 
sortField,
                                     (sortPosition.equals("begin") ? "up" : 
"down"), null, false);
             q.setMaxNumber(1);
             NodeList nl = transaction.getList(q);
             if (nl.size() > 0) {
                 position = nl.getNode(0).getIntValue(role + "." + sortField);
                 position = (sortPosition.equals("begin") ? position - 1 : 
position + 1);
+            } else {
+                log.warn("Query " + q + " didn't result anything");
             }
 
             return Integer.valueOf(position);
@@ -146,4 +158,12 @@
         this.sortField = sortField;
     }
 
+    @Override
+    public void setRole(String role) {
+        super.setRole(role);
+        if ("posrel".equals(role) && this.sortField == null) {
+            this.sortField = "pos";
+        }
+    }
+
 }

_______________________________________________
Cvs mailing list
Cvs@lists.mmbase.org
http://lists.mmbase.org/mailman/listinfo/cvs

Reply via email to