r1572 - in xwiki/trunk: core/src/main/java/com/xpn/xwiki/store src/test/java/com/xpn/xwiki/test

Ludovic Dubost ludovic at users.forge.objectweb.org
Wed Nov 15 17:00:37 CET 2006


Author: ludovic
Date: 2006-11-15 17:00:36 +0100 (Wed, 15 Nov 2006)
New Revision: 1572

Modified:
   xwiki/trunk/core/src/main/java/com/xpn/xwiki/store/XWikiHibernateAttachmentStore.java
   xwiki/trunk/src/test/java/com/xpn/xwiki/test/StoreTest.java
Log:
Fix XWIKI-428 Delete doc with bad attachment
---
Test was added to delete attachment with missing data in xwikiattachment_content or xwikiattachment_archive
---

Modified: xwiki/trunk/core/src/main/java/com/xpn/xwiki/store/XWikiHibernateAttachmentStore.java
===================================================================
--- xwiki/trunk/core/src/main/java/com/xpn/xwiki/store/XWikiHibernateAttachmentStore.java	2006-11-15 14:32:32 UTC (rev 1571)
+++ xwiki/trunk/core/src/main/java/com/xpn/xwiki/store/XWikiHibernateAttachmentStore.java	2006-11-15 16:00:36 UTC (rev 1572)
@@ -232,29 +232,29 @@
                 // Delete the three attachement entries
                 try {
                     loadAttachmentContent(attachment, context, false);
+                    try {
+                        session.delete(attachment.getAttachment_content());
+                    } catch (Exception e) {
+                        if (log.isWarnEnabled())
+                            log.warn("Error deleting attachment content " + attachment.getFilename() + " of doc " + attachment.getDoc().getFullName());
+                    }
                 } catch (Exception e) {
                     if (log.isWarnEnabled())
                         log.warn("Error loading attachment content when deleting attachment " + attachment.getFilename() + " of doc " + attachment.getDoc().getFullName());
                 }
                 try {
-                    session.delete(attachment.getAttachment_content());
-                } catch (Exception e) {
-                    if (log.isWarnEnabled())
-                        log.warn("Error deleting attachment content " + attachment.getFilename() + " of doc " + attachment.getDoc().getFullName());
-                }
-                try {
                     loadAttachmentArchive(attachment, context, false);
+                    try {
+                        session.delete(attachment.getAttachment_archive());
+                    } catch (Exception e) {
+                        if (log.isWarnEnabled())
+                            log.warn("Error deleting attachment archive " + attachment.getFilename() + " of doc " + attachment.getDoc().getFullName());
+                    }
                 } catch(XWikiException e){
                     if (log.isWarnEnabled())
                         log.warn("Error loading attachment archive when deleting attachment " + attachment.getFilename() + " of doc " + attachment.getDoc().getFullName());
                 }
 
-                try {
-                    session.delete(attachment.getAttachment_archive());
-                } catch (Exception e) {
-                    if (log.isWarnEnabled())
-                        log.warn("Error deleting attachment archive " + attachment.getFilename() + " of doc " + attachment.getDoc().getFullName());
-                }
 
                 try {
                     session.delete(attachment);

Modified: xwiki/trunk/src/test/java/com/xpn/xwiki/test/StoreTest.java
===================================================================
--- xwiki/trunk/src/test/java/com/xpn/xwiki/test/StoreTest.java	2006-11-15 14:32:32 UTC (rev 1571)
+++ xwiki/trunk/src/test/java/com/xpn/xwiki/test/StoreTest.java	2006-11-15 16:00:36 UTC (rev 1572)
@@ -41,6 +41,7 @@
 import com.xpn.xwiki.store.XWikiStoreInterface;
 import com.xpn.xwiki.store.XWikiAttachmentStoreInterface;
 import com.xpn.xwiki.store.XWikiVersioningStoreInterface;
+import com.xpn.xwiki.store.XWikiHibernateStore;
 
 public class StoreTest extends HibernateTestCase {
 
@@ -492,4 +493,62 @@
         StringInputStream is = new StringInputStream(txt);
         archive = new Archive("", is);
     }
+
+
+    public void deleteDocWithBadAttachment1(XWikiStoreInterface store, String web, String name) throws XWikiException, IOException {
+        XWikiDocument doc3 = new XWikiDocument(web, name);
+        doc3 = (XWikiDocument) store.loadXWikiDoc(doc3, getXWikiContext());
+        store.deleteXWikiDoc(doc3, getXWikiContext());
+
+        XWikiDocument doc4 = new XWikiDocument(web, name);
+        doc4.setContent(Utils.content1);
+        doc4.setAuthor(Utils.author);
+        doc4.setParent(Utils.parent);
+        store.saveXWikiDoc(doc4, getXWikiContext());
+
+        XWikiDocument doc5 = new XWikiDocument(web, name);
+        doc5 = (XWikiDocument) store.loadXWikiDoc(doc5, getXWikiContext());
+        List attachlist = doc5.getAttachmentList();
+        assertEquals("Attachment is still there", 0, attachlist.size());
+    }
+
+    public void testDeleteDocWithBadAttachment1() throws XWikiException, IOException {
+        Utils.setStandardData();
+        attachmentReadWrite(getXWiki().getStore(), Utils.web, Utils.name);
+
+        getXWiki().getHibernateStore().beginTransaction(getXWikiContext());
+        StoreHibernateTest.runSQL(getXWiki().getHibernateStore(), "delete from xwikiattachment_content", getXWikiContext());
+        getXWiki().getHibernateStore().endTransaction(getXWikiContext(), true);
+
+        xwiki.flushCache();
+        
+        deleteDocWithAttachment(getXWiki().getStore(), Utils.web, Utils.name);
+    }
+
+    public void testDeleteDocWithBadAttachment2() throws XWikiException, IOException {
+        Utils.setStandardData();
+        attachmentReadWrite(getXWiki().getStore(), Utils.web, Utils.name);
+
+        getXWiki().getHibernateStore().beginTransaction(getXWikiContext());
+        StoreHibernateTest.runSQL(getXWiki().getHibernateStore(), "delete from xwikiattachment_archive", getXWikiContext());
+        getXWiki().getHibernateStore().endTransaction(getXWikiContext(), true);
+
+        xwiki.flushCache();
+
+        deleteDocWithAttachment(getXWiki().getStore(), Utils.web, Utils.name);
+    }
+
+    public void testDeleteDocWithBadAttachment3() throws XWikiException, IOException {
+        Utils.setStandardData();
+        attachmentReadWrite(getXWiki().getStore(), Utils.web, Utils.name);
+
+        getXWiki().getHibernateStore().beginTransaction(getXWikiContext());
+        StoreHibernateTest.runSQL(getXWiki().getHibernateStore(), "delete from xwikiattachment", getXWikiContext());
+        getXWiki().getHibernateStore().endTransaction(getXWikiContext(), true);
+
+        xwiki.flushCache();
+
+        deleteDocWithAttachment(getXWiki().getStore(), Utils.web, Utils.name);
+    }
+
 }





More information about the Xwiki-notifications mailing list