Author: michiel
Date: 2010-02-11 16:45:11 +0100 (Thu, 11 Feb 2010)
New Revision: 40963

Modified:
   
mmbase/branches/MMBase-1_8/src/org/mmbase/module/tools/ApplicationInstaller.java
   mmbase/branches/MMBase-1_8/src/org/mmbase/util/XMLRelationNodeReader.java
Log:
  MMB-1932

Modified: 
mmbase/branches/MMBase-1_8/src/org/mmbase/module/tools/ApplicationInstaller.java
===================================================================
--- 
mmbase/branches/MMBase-1_8/src/org/mmbase/module/tools/ApplicationInstaller.java
    2010-02-11 15:44:23 UTC (rev 40962)
+++ 
mmbase/branches/MMBase-1_8/src/org/mmbase/module/tools/ApplicationInstaller.java
    2010-02-11 15:45:11 UTC (rev 40963)
@@ -457,6 +457,32 @@
         return result.isSuccess();
     }
 
+    private int getSyncedNumber(MMObjectBuilder syncbul, String exportsource, 
MMObjectNode newNode, String field) throws SearchQueryException {
+        String s = newNode.getStringValue(field);
+        int number;
+        if (s.startsWith(":")) {
+            String nodeNumber = s.substring(1);
+            MMObjectNode otherNode = syncbul.getNode(nodeNumber);
+            if (otherNode == null) {
+                log.warn("No such node '" + nodeNumber + "'");
+                number = -1;
+            } else {
+                number = otherNode.getNumber();
+            }
+        } else {
+            number = newNode.getIntValue(field);
+            List snumberNodes = getSyncnodes(syncbul, exportsource, number);
+            if (!snumberNodes.isEmpty()) {
+                MMObjectNode n2 = (MMObjectNode)snumberNodes.get(0);
+                number = n2.getIntValue("localnumber");
+            } else {
+                number = -1;
+            }
+        }
+        newNode.setValue(field, number);
+        return number;
+    }
+
     private void installRelationSource(MMObjectBuilder syncbul, InsRel insRel, 
XMLRelationNodeReader nodereader, List nodeFieldNodes, ApplicationResult 
result) {
         String exportsource = nodereader.getExportSource();
         int timestamp = nodereader.getTimeStamp();
@@ -480,26 +506,9 @@
                     // ye be warned.
 
                     // find snumber
-                    int snumber = newNode.getIntValue("snumber");
-                    List snumberNodes = getSyncnodes(syncbul, exportsource, 
snumber);
-                    if (!snumberNodes.isEmpty()) {
-                        MMObjectNode n2 = (MMObjectNode)snumberNodes.get(0);
-                        snumber = n2.getIntValue("localnumber");
-                    } else {
-                        snumber = -1;
-                    }
-                    newNode.setValue("snumber", snumber);
-
+                    int snumber = getSyncedNumber(syncbul, exportsource, 
newNode, "snumber");
                     // find dnumber
-                    int dnumber = newNode.getIntValue("dnumber");
-                    List dnumberNodes = getSyncnodes(syncbul, exportsource, 
dnumber);
-                    if (!dnumberNodes.isEmpty()) {
-                        MMObjectNode n2 = (MMObjectNode)dnumberNodes.get(0);
-                        dnumber = n2.getIntValue("localnumber");
-                    } else {
-                        dnumber = -1;
-                    }
-                    newNode.setValue("dnumber", dnumber);
+                    int dnumber = getSyncedNumber(syncbul, exportsource, 
newNode, "dnumber");
 
                     int localnumber = -1;
                     if (snumber != -1 && dnumber != -1) {
@@ -508,8 +517,7 @@
                         if (relationAlreadyExists(insRel, newNode, snumber, 
dnumber)) {
                             log.warn("Application tries to add relation which 
already exists. " +
                                     "Skipping relation with exportnumber " + 
exportnumber);
-                        }
-                        else {
+                        } else {
                             localnumber = newNode.insert("import");
                             if (localnumber != -1) {
                                 createSyncnode(syncbul, exportsource, 
timestamp, exportnumber, localnumber);

Modified: 
mmbase/branches/MMBase-1_8/src/org/mmbase/util/XMLRelationNodeReader.java
===================================================================
--- mmbase/branches/MMBase-1_8/src/org/mmbase/util/XMLRelationNodeReader.java   
2010-02-11 15:44:23 UTC (rev 40962)
+++ mmbase/branches/MMBase-1_8/src/org/mmbase/util/XMLRelationNodeReader.java   
2010-02-11 15:45:11 UTC (rev 40963)
@@ -64,13 +64,26 @@
                         n4 = nm.getNamedItem("number");
                         int num = Integer.parseInt(n4.getNodeValue());
                         newNode.setValue("number", num);
-
-                        n4 = nm.getNamedItem("snumber");
-                        int rnum = Integer.parseInt(n4.getNodeValue());
-                        newNode.setValue("snumber", rnum);
-                        n4 = nm.getNamedItem("dnumber");
-                        int dnum = Integer.parseInt(n4.getNodeValue());
-                        newNode.setValue("dnumber", dnum);
+                        {
+                            n4 = nm.getNamedItem("snumber");
+                            String s = n4.getNodeValue();
+                            if (s.startsWith(":")) {
+                                newNode.setValue("snumber", s);
+                            } else {
+                                int snum = Integer.parseInt(n4.getNodeValue());
+                                newNode.setValue("snumber", snum);
+                            }
+                        }
+                        {
+                            n4 = nm.getNamedItem("dnumber");
+                            String s = n4.getNodeValue();
+                            if (s.startsWith(":")) {
+                                newNode.setValue("dnumber", s);
+                            } else {
+                                int dnum = Integer.parseInt(n4.getNodeValue());
+                                newNode.setValue("dnumber", dnum);
+                            }
+                        }
                         n4 = nm.getNamedItem("rtype");
                         String rname = n4.getNodeValue();
                         RelDef reldef = mmbase.getRelDef();

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

Reply via email to