r1056 - in xwiki/trunk/src/main/java/com/xpn/xwiki: doc web

Ludovic Dubost ludovic at users.forge.objectweb.org
Tue Apr 25 03:04:03 CEST 2006


Author: ludovic
Date: 2006-04-25 03:04:02 +0200 (Tue, 25 Apr 2006)
New Revision: 1056

Modified:
   xwiki/trunk/src/main/java/com/xpn/xwiki/doc/XWikiDocument.java
   xwiki/trunk/src/main/java/com/xpn/xwiki/web/LockAction.java
Log:
Fixed bug in editobjects/editrights/removeobject caused by the addition to the save API (this is a bug with a lot of impact). The clone function was not cloning properly objects. It would renumber them while it shouldn't
Do not lock when called from javascript if the user was not owning the lock

Modified: xwiki/trunk/src/main/java/com/xpn/xwiki/doc/XWikiDocument.java
===================================================================
--- xwiki/trunk/src/main/java/com/xpn/xwiki/doc/XWikiDocument.java	2006-04-24 07:28:24 UTC (rev 1055)
+++ xwiki/trunk/src/main/java/com/xpn/xwiki/doc/XWikiDocument.java	2006-04-25 01:04:02 UTC (rev 1056)
@@ -840,6 +840,26 @@
         }
     }
 
+    public void clonexWikiObjects(XWikiDocument templatedoc) {
+        // TODO: look for each object if it already exist and add it if it doesn't
+        Iterator itobjects = templatedoc.getxWikiObjects().keySet().iterator();
+        while (itobjects.hasNext()) {
+            String name = (String) itobjects.next();
+            Vector tobjects = (Vector) templatedoc.getObjects(name);
+            Vector objects = new Vector();
+            objects.setSize(tobjects.size());
+            for (int i = 0; i < tobjects.size(); i++) {
+                BaseObject bobj1 = (BaseObject) tobjects.get(i);
+                if (bobj1 != null) {
+                    BaseObject bobj = (BaseObject) bobj1.clone();
+                    objects.set(i, bobj);
+                }
+            }
+            getxWikiObjects().put(name, objects);
+        }
+    }
+
+
     public String getTemplate() {
         if (template==null)
          return "";
@@ -1206,7 +1226,7 @@
         doc.setTranslation(getTranslation());
         doc.setxWikiClass((BaseClass) getxWikiClass().clone());
         doc.setxWikiClassXML(getxWikiClassXML());
-        doc.mergexWikiObjects(this);
+        doc.clonexWikiObjects(this);
         doc.copyAttachments(this);
         return doc;
     }

Modified: xwiki/trunk/src/main/java/com/xpn/xwiki/web/LockAction.java
===================================================================
--- xwiki/trunk/src/main/java/com/xpn/xwiki/web/LockAction.java	2006-04-24 07:28:24 UTC (rev 1055)
+++ xwiki/trunk/src/main/java/com/xpn/xwiki/web/LockAction.java	2006-04-25 01:04:02 UTC (rev 1056)
@@ -33,10 +33,12 @@
 
         String username = context.getUser();
         XWikiLock lock = tdoc.getLock(context);
-        if ("inline".equals(request.get("action")))
-            doc.setLock(username, context);
-        else
-            tdoc.setLock(username, context);
+        if ((lock==null)||(username.equals(lock.getUserName()))) {
+            if ("inline".equals(request.get("action")))
+                doc.setLock(username, context);
+            else
+                tdoc.setLock(username, context);
+        }
 
         // forward to view
         String redirect = Utils.getRedirect("view", context);





More information about the Xwiki-notifications mailing list