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