Author: michiel
Date: 2009-12-03 14:55:15 +0100 (Thu, 03 Dec 2009)
New Revision: 40106

Modified:
   
mmbase/trunk/applications/vpro-wizards/src/main/java/org/mmbase/applications/vprowizards/spring/action/AbstractNodeAction.java
   
mmbase/trunk/applications/vpro-wizards/src/main/java/org/mmbase/applications/vprowizards/spring/action/AbstractRelationAction.java
   
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/SortRelationAction.java
   
mmbase/trunk/applications/vpro-wizards/src/main/java/org/mmbase/applications/vprowizards/spring/action/ToggleRelationAction.java
Log:
added possiblity to add 'relationValues'

Modified: 
mmbase/trunk/applications/vpro-wizards/src/main/java/org/mmbase/applications/vprowizards/spring/action/AbstractNodeAction.java
===================================================================
--- 
mmbase/trunk/applications/vpro-wizards/src/main/java/org/mmbase/applications/vprowizards/spring/action/AbstractNodeAction.java
      2009-12-03 13:55:15 UTC (rev 40105)
+++ 
mmbase/trunk/applications/vpro-wizards/src/main/java/org/mmbase/applications/vprowizards/spring/action/AbstractNodeAction.java
      2009-12-03 13:55:15 UTC (rev 40106)
@@ -87,8 +87,7 @@
         }
 
         if (node == null && isNodeNullIllegal()) {
-            throw new IllegalStateException(
-                    "No node has been provided, and no error has been set. 
Either of these should happen*");
+            throw new IllegalStateException("No node has been provided, and no 
error has been set. Either of these should happen*");
         }
 
         // now check if no illegal fields are set for this node type

Modified: 
mmbase/trunk/applications/vpro-wizards/src/main/java/org/mmbase/applications/vprowizards/spring/action/AbstractRelationAction.java
===================================================================
--- 
mmbase/trunk/applications/vpro-wizards/src/main/java/org/mmbase/applications/vprowizards/spring/action/AbstractRelationAction.java
  2009-12-03 13:55:15 UTC (rev 40105)
+++ 
mmbase/trunk/applications/vpro-wizards/src/main/java/org/mmbase/applications/vprowizards/spring/action/AbstractRelationAction.java
  2009-12-03 13:55:15 UTC (rev 40106)
@@ -9,12 +9,15 @@
 */
 package org.mmbase.applications.vprowizards.spring.action;
 
-import java.util.Map;
+import java.util.*;
 
 import javax.servlet.http.HttpServletRequest;
 
 import org.apache.commons.lang.StringUtils;
 import org.mmbase.bridge.*;
+import org.mmbase.bridge.util.Queries;
+import org.mmbase.storage.search.*;
+import org.mmbase.storage.search.legacy.ConstraintParser;
 import org.mmbase.util.logging.Logger;
 import org.mmbase.util.logging.Logging;
 
@@ -34,6 +37,7 @@
     protected String destinationNodeRef;
     protected String role;
     protected RelationManager relationManager;
+    protected String relationValues;
 
     /**
      * This template method implementation handles all the preconditions for 
relation actions. When
@@ -55,7 +59,7 @@
                         && checkTypeRel(relationManager, sourceNode, 
destinationNode)) {
                         //all preliminary checks ok.
                         //call the callback method
-                        return doCreateNode(transaction, idMap, request);
+                        return createRelation(transaction, idMap, request);
                     } else {
                         return null;
                     }
@@ -78,7 +82,7 @@
      * @param request
      * @return
      */
-    protected abstract Node doCreateNode(Transaction transaction, Map<String, 
Node> idMap, HttpServletRequest request);
+    protected abstract Node createRelation(Transaction transaction, 
Map<String, Node> idMap, HttpServletRequest request);
 
 
     /**
@@ -172,4 +176,57 @@
         this.role = role;
     }
 
+    /**
+     * Sets the values which must be set in the relation. This must be done in 
the syntax of a legacy constraint.
+     */
+    public void setRelationValues(String s) {
+        this.relationValues = s;
+    }
+
+
+    protected void putValues(Step relationStep, Constraint constraint, 
Map<String, Object> values) {
+        if (constraint instanceof CompositeConstraint) {
+            CompositeConstraint cc = (CompositeConstraint) constraint;
+            if (cc.getLogicalOperator() == CompositeConstraint.LOGICAL_AND) {
+                for (Constraint c : cc.getChilds()) {
+                    putValues(relationStep, c, values);
+                }
+            } else {
+                if (cc.getChilds().size() > 0) {
+                    Constraint c = cc.getChilds().get(0);
+                    putValues(relationStep, c, values);
+                }
+            }
+        } else if (constraint instanceof FieldValueConstraint) {
+            FieldValueConstraint fvc = (FieldValueConstraint) constraint;
+            if (! fvc.getField().getStep().equals(relationStep)) {
+                return;
+            }
+            if (fvc.getOperator() != FieldCompareConstraint.EQUAL) {
+                throw new UnsupportedOperationException();
+            }
+            values.put(fvc.getField().getFieldName(), fvc.getValue());
+        } else {
+            throw new UnsupportedOperationException();
+        }
+    }
+
+    /**
+     * TODO. This functionality may be moved to Queries
+     */
+    protected Map<String, Object> getRelationValues() {
+        Map<String, Object> result = new HashMap<String, Object>();
+        if (relationValues != null && relationValues.length() > 0) {
+
+            NodeQuery nq = Queries.createRelatedNodesQuery(sourceNode, 
destinationNode.getNodeManager(), getRole(), null);
+            Step lastStep = (Step) nq.getSteps().get(nq.getSteps().size() -1 );
+            nq.addNode(lastStep, destinationNode);
+            ConstraintParser parser = new ConstraintParser(nq);
+            Constraint constraint = parser.toConstraint(relationValues);
+            putValues((Step) nq.getSteps().get(1), constraint, result);
+        }
+        return result;
+
+    }
+
 }

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
    2009-12-03 13:55:15 UTC (rev 40105)
+++ 
mmbase/trunk/applications/vpro-wizards/src/main/java/org/mmbase/applications/vprowizards/spring/action/CreateRelationAction.java
    2009-12-03 13:55:15 UTC (rev 40106)
@@ -50,7 +50,7 @@
     }
 
     @Override
-    protected Node doCreateNode(Transaction transaction, Map<String, Node> 
idMap, HttpServletRequest request) {
+    protected Node createRelation(Transaction transaction, Map<String, Node> 
idMap, HttpServletRequest request) {
         //preconditions
         if(!SORT_POSITION_BEGIN.equals(sortPosition) && 
!SORT_POSITION_END.equals(sortPosition)){
             addGlobalError("error.field.value", new String[]{"sortPosition", 
sortPosition} );
@@ -63,6 +63,9 @@
 
         if (!hasErrors()) {
             Relation rel = relationManager.createRelation(sourceNode, 
destinationNode);
+            for (Map.Entry<String, Object> entry : 
getRelationValues().entrySet()) {
+                rel.setValue(entry.getKey(), entry.getValue());
+            }
             return rel;
         }
         return null;
@@ -117,7 +120,7 @@
                 position = (sortPosition.equals("begin") ? position - 1 : 
position + 1);
             }
 
-            return new Integer(position);
+            return Integer.valueOf(position);
         } catch (RuntimeException e) {
             addGlobalError("error.unexpected", new String[] { e.getMessage() 
});
             log.error("something went wrong running a query to find out the 
position of a new relation. query: ["

Modified: 
mmbase/trunk/applications/vpro-wizards/src/main/java/org/mmbase/applications/vprowizards/spring/action/SortRelationAction.java
===================================================================
--- 
mmbase/trunk/applications/vpro-wizards/src/main/java/org/mmbase/applications/vprowizards/spring/action/SortRelationAction.java
      2009-12-03 13:55:15 UTC (rev 40105)
+++ 
mmbase/trunk/applications/vpro-wizards/src/main/java/org/mmbase/applications/vprowizards/spring/action/SortRelationAction.java
      2009-12-03 13:55:15 UTC (rev 40106)
@@ -57,7 +57,7 @@
      * and exists between the source and destination node.
      */
     @Override
-    protected Node doCreateNode(Transaction transaction, Map<String, Node> 
idMap, HttpServletRequest request) {
+    protected Node createRelation(Transaction transaction, Map<String, Node> 
idMap, HttpServletRequest request) {
         //preconditions
         if (!DIRECTION_UP.equals(direction) && 
!DIRECTION_DOWN.equals(direction)){
             addGlobalError("error.property.illegal.sortdirection", new 
String[]{direction, this.getClass().getName(), DIRECTION_UP, DIRECTION_DOWN});

Modified: 
mmbase/trunk/applications/vpro-wizards/src/main/java/org/mmbase/applications/vprowizards/spring/action/ToggleRelationAction.java
===================================================================
--- 
mmbase/trunk/applications/vpro-wizards/src/main/java/org/mmbase/applications/vprowizards/spring/action/ToggleRelationAction.java
    2009-12-03 13:55:15 UTC (rev 40105)
+++ 
mmbase/trunk/applications/vpro-wizards/src/main/java/org/mmbase/applications/vprowizards/spring/action/ToggleRelationAction.java
    2009-12-03 13:55:15 UTC (rev 40106)
@@ -39,7 +39,7 @@
 
     private String relate;
     private boolean isNodeCreated = false;
-    private List<Integer> nodesDelted = new ArrayList<Integer>();
+    private final List<Integer> nodesDeleted = new ArrayList<Integer>();
 
     public String getRelate() {
         return relate;
@@ -55,7 +55,7 @@
     }
 
     @Override
-    protected Node doCreateNode(Transaction transaction, Map<String, Node> 
idMap, HttpServletRequest request) {
+    protected Node createRelation(Transaction transaction, Map<String, Node> 
idMap, HttpServletRequest request) {
         // if relate is not empty and there is not a relation between source 
and destination yet, create it.
         //        NodeList nl = 
sourceNode.getRelatedNodes(destinationNode.getNodeManager(), role, null);
         RelationList rl = sourceNode.getRelations(role, 
destinationNode.getNodeManager(), "destination");
@@ -69,7 +69,7 @@
                 // we must undo the relation
                 log.debug("create is false: we delete the node");
                 for (int i = 0; i < rl.size(); i++) {
-                    nodesDelted.add(rl.getRelation(i).getNumber());
+                    nodesDeleted.add(rl.getRelation(i).getNumber());
                     rl.getRelation(i).delete(true);
                 }
             }
@@ -80,7 +80,7 @@
             if (!StringUtils.isBlank(relate) && 
"true".equals(relate.toLowerCase())) {
                 // we must create a relation
                 log.debug("create is true: we must create the relation");
-                Node newRelation = super.doCreateNode(transaction, idMap, 
request);
+                Node newRelation = super.createRelation(transaction, idMap, 
request);
                 if (!hasErrors()) {
                     isNodeCreated = true;
                     return newRelation;
@@ -101,7 +101,7 @@
             super.createCacheFlushHints();
         } else {
             // perhaps one or more relations are deleted
-            for (int nodenr : nodesDelted) {
+            for (int nodenr : nodesDeleted) {
                 CacheFlushHint hint = new 
CacheFlushHint(CacheFlushHint.TYPE_RELATION);
                 hint.setDestinationNodeNumber(destinationNode.getNumber());
                 hint.setSourceNodeNumber(sourceNode.getNumber());

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

Reply via email to