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