Update of 
/var/cvs/contributions/CMSContainer/cmsc/utilities/src/java/com/finalist/cmsc/mmbase
In directory 
james.mmbase.org:/tmp/cvs-serv9322/cmsc/utilities/src/java/com/finalist/cmsc/mmbase

Modified Files:
      Tag: b1_5
        TreeUtil.java 
Log Message:
CMSC-958 Copy and delete page problem.


See also: 
http://cvs.mmbase.org/viewcvs/contributions/CMSContainer/cmsc/utilities/src/java/com/finalist/cmsc/mmbase
See also: http://www.mmbase.org/jira/browse/CMSC-958


Index: TreeUtil.java
===================================================================
RCS file: 
/var/cvs/contributions/CMSContainer/cmsc/utilities/src/java/com/finalist/cmsc/mmbase/TreeUtil.java,v
retrieving revision 1.15
retrieving revision 1.15.2.1
diff -u -b -r1.15 -r1.15.2.1
--- TreeUtil.java       25 Jul 2008 15:54:11 -0000      1.15
+++ TreeUtil.java       31 Dec 2008 14:05:43 -0000      1.15.2.1
@@ -59,6 +59,32 @@
       RelationUtil.createCountedRelation(parentNode, childNode, relationName, 
countField);
    }
 
+   public static void uniqueChild(Node parentNode, Node newChildNode, 
LinkedHashMap<String, String> treeManagers, String relationName) {
+      String fragmentFieldname = getFragmentFieldname(newChildNode, 
treeManagers);
+      String fragment = newChildNode.getStringValue(fragmentFieldname);
+
+      NodeList children = getChildren(parentNode, relationName);
+      int startsWithIndex = 0;
+      boolean foundExistingChildFragment = false;
+      for (Iterator<Node> iter = children.iterator(); iter.hasNext();) {
+         Node child = iter.next();
+         String fragmentfield = getFragmentFieldname(child, treeManagers);
+         String value = child.getStringValue(fragmentfield);
+         if (value.equals(fragment)) {
+            foundExistingChildFragment = true;
+         }
+         else {
+            if (value.startsWith(fragment + "_")) {
+               startsWithIndex++;
+            }
+         }
+      }
+      if (foundExistingChildFragment) {
+         newChildNode.setStringValue(fragmentFieldname, fragment + "_" + 
(startsWithIndex+1));
+         newChildNode.commit();
+      }
+   }
+   
    public static Node getParent(Node node, String relationName) {
       List<String> treeManagers = new ArrayList<String>();
       treeManagers.add(node.getNodeManager().getName());
@@ -232,8 +258,7 @@
       for (Iterator<Node> i = path.iterator(); i.hasNext();) {
          Node n = i.next();
 
-         String nManagerName = n.getNodeManager().getName();
-         String fragmentFieldname = getFragmentFieldname(nManagerName, 
treeManagers);
+         String fragmentFieldname = getFragmentFieldname(n, treeManagers);
 
          pathStr += n.getStringValue(fragmentFieldname);
 
@@ -249,6 +274,9 @@
       return path.split(PATH_SEPARATOR);
    }
 
+   public static String getFragmentFieldname(Node node, LinkedHashMap<String, 
String> treeManagers) {
+      return getFragmentFieldname(node.getNodeManager().getName(), 
treeManagers);
+   }
 
    public static String getFragmentFieldname(String nManagerName, 
LinkedHashMap<String, String> treeManagers) {
       return treeManagers.get(nManagerName);
@@ -380,8 +408,7 @@
          }
       }
 
-      String nManagerName = root.getNodeManager().getName();
-      String fragmentFieldname = getFragmentFieldname(nManagerName, 
treeManagers);
+      String fragmentFieldname = getFragmentFieldname(root, treeManagers);
 
       String[] fragments = getPathFragments(path);
       if (root.getStringValue(fragmentFieldname).equals(path)) {
@@ -408,8 +435,7 @@
    private static Node getTreeItemFromPath(Cloud cloud, String[] fragments, 
Node root, LinkedHashMap<String, String> treeManagers,
                                            String relationName, int level) {
 
-      String nManagerName = root.getNodeManager().getName();
-      String fragmentFieldname = getFragmentFieldname(nManagerName, 
treeManagers);
+      String fragmentFieldname = getFragmentFieldname(root, treeManagers);
 
       String field = root.getStringValue(fragmentFieldname);
 
@@ -421,8 +447,7 @@
             NodeIterator nli = nl.nodeIterator();
             while (nli.hasNext()) {
                Node element = nli.nextNode();
-               String elementManagerName = element.getNodeManager().getName();
-               String elementFieldname = 
getFragmentFieldname(elementManagerName, treeManagers);
+               String elementFieldname = getFragmentFieldname(element, 
treeManagers);
 
                field = element.getStringValue(elementFieldname);
                if (fragments[level + 1].equalsIgnoreCase(field)) {
@@ -489,8 +514,7 @@
       NodeList children = getChildren(parent, relationName);
       for (Iterator<Node> iter = children.iterator(); iter.hasNext();) {
          Node child = iter.next();
-         String nManagerName = child.getNodeManager().getName();
-         String fragmentfield = getFragmentFieldname(nManagerName, 
treeManagers);
+         String fragmentfield = getFragmentFieldname(child, treeManagers);
          String value = child.getStringValue(fragmentfield);
          if (value.equals(fragment)) {
             return true;
@@ -510,8 +534,7 @@
       NodeList children = getChildren(parentItem, relationName);
       for (Iterator<Node> iter = children.iterator(); iter.hasNext();) {
          Node child = iter.next();
-         String nManagerName = child.getNodeManager().getName();
-         String fragmentfield = getFragmentFieldname(nManagerName, 
treeManagers);
+         String fragmentfield = getFragmentFieldname(child, treeManagers);
          String value = child.getStringValue(fragmentfield);
          if (value.equals(fragment)) {
             return child;
_______________________________________________
Cvs mailing list
[email protected]
http://lists.mmbase.org/mailman/listinfo/cvs

Reply via email to