Author: tmortagne
Date: 2008-01-28 11:24:48 +0100 (Mon, 28 Jan 2008)
New Revision: 7100

Modified:
   
xwiki-platform/core/branches/xwiki-core-1.2/xwiki-core/src/main/java/com/xpn/xwiki/XWikiException.java
   
xwiki-platform/core/branches/xwiki-core-1.2/xwiki-core/src/main/java/com/xpn/xwiki/store/XWikiCacheStore.java
   
xwiki-platform/core/branches/xwiki-core-1.2/xwiki-core/src/main/java/com/xpn/xwiki/store/XWikiHibernateStore.java
   
xwiki-platform/core/branches/xwiki-core-1.2/xwiki-core/src/main/java/com/xpn/xwiki/store/XWikiStoreInterface.java
   
xwiki-platform/core/branches/xwiki-core-1.2/xwiki-core/src/main/java/com/xpn/xwiki/store/jcr/XWikiJcrStore.java
Log:
XWIKI-1672: Allow to delete wiki

Modified: 
xwiki-platform/core/branches/xwiki-core-1.2/xwiki-core/src/main/java/com/xpn/xwiki/XWikiException.java
===================================================================
--- 
xwiki-platform/core/branches/xwiki-core-1.2/xwiki-core/src/main/java/com/xpn/xwiki/XWikiException.java
      2008-01-28 09:51:41 UTC (rev 7099)
+++ 
xwiki-platform/core/branches/xwiki-core-1.2/xwiki-core/src/main/java/com/xpn/xwiki/XWikiException.java
      2008-01-28 10:24:48 UTC (rev 7100)
@@ -124,6 +124,7 @@
     public static final int ERROR_XWIKI_STORE_HIBERNATE_CHECK_EXISTS_DOC = 
3236;
     public static final int ERROR_XWIKI_STORE_HIBERNATE_SWITCH_DATABASE = 3301;
     public static final int ERROR_XWIKI_STORE_HIBERNATE_CREATE_DATABASE = 3401;
+    public static final int ERROR_XWIKI_STORE_HIBERNATE_DELETE_DATABASE = 3402;
 
     public static final int ERROR_XWIKI_STORE_JCR_SAVING_DOC = 3501;
     public static final int ERROR_XWIKI_STORE_JCR_READING_DOC = 3502;

Modified: 
xwiki-platform/core/branches/xwiki-core-1.2/xwiki-core/src/main/java/com/xpn/xwiki/store/XWikiCacheStore.java
===================================================================
--- 
xwiki-platform/core/branches/xwiki-core-1.2/xwiki-core/src/main/java/com/xpn/xwiki/store/XWikiCacheStore.java
       2008-01-28 09:51:41 UTC (rev 7099)
+++ 
xwiki-platform/core/branches/xwiki-core-1.2/xwiki-core/src/main/java/com/xpn/xwiki/store/XWikiCacheStore.java
       2008-01-28 10:24:48 UTC (rev 7100)
@@ -466,6 +466,19 @@
         }
     }
 
+    /**
+     * [EMAIL PROTECTED]
+     * 
+     * @see 
com.xpn.xwiki.store.XWikiStoreInterface#deleteWiki(java.lang.String,
+     *      com.xpn.xwiki.XWikiContext)
+     */
+    public void deleteWiki(String wikiName, XWikiContext context) throws 
XWikiException
+    {
+        synchronized (wikiName) {
+            store.deleteWiki(wikiName, context);
+        }
+    }
+    
     public boolean exists(XWikiDocument doc, XWikiContext context) throws 
XWikiException {
         String key = getKey(doc,context);
         initCache(context);

Modified: 
xwiki-platform/core/branches/xwiki-core-1.2/xwiki-core/src/main/java/com/xpn/xwiki/store/XWikiHibernateStore.java
===================================================================
--- 
xwiki-platform/core/branches/xwiki-core-1.2/xwiki-core/src/main/java/com/xpn/xwiki/store/XWikiHibernateStore.java
   2008-01-28 09:51:41 UTC (rev 7099)
+++ 
xwiki-platform/core/branches/xwiki-core-1.2/xwiki-core/src/main/java/com/xpn/xwiki/store/XWikiHibernateStore.java
   2008-01-28 10:24:48 UTC (rev 7100)
@@ -159,6 +159,60 @@
     }
 
     /**
+     * [EMAIL PROTECTED]
+     *
+     * @see 
com.xpn.xwiki.store.XWikiStoreInterface#deleteWiki(java.lang.String, 
com.xpn.xwiki.XWikiContext)
+     */
+    public void deleteWiki(String wikiName, XWikiContext context) throws 
XWikiException
+    {
+        boolean bTransaction = true;
+        String database = context.getDatabase();
+        Statement stmt = null;
+        try {
+            bTransaction = beginTransaction(context);
+            Session session = getSession(context);
+            Connection connection = session.connection();
+            stmt = connection.createStatement();
+
+            String schema = getSchemaFromWikiName(wikiName, context);
+
+            DatabaseProduct databaseProduct = getDatabaseProductName(context);
+            if (DatabaseProduct.ORACLE == databaseProduct) {
+                stmt.execute("DROP SCHEMA " + schema);
+            } else if (DatabaseProduct.DERBY == databaseProduct) {
+                stmt.execute("DROP SCHEMA " + schema);
+            } else if (DatabaseProduct.HSQLDB == databaseProduct) {
+                stmt.execute("DROP SCHEMA " + schema);
+            } else {
+                stmt.execute("create database " + schema);
+            }
+
+            stmt.execute("DROP DATABASE " + schema);
+
+            endTransaction(context, true);
+        } catch (Exception e) {
+            Object[] args = {wikiName};
+            throw new XWikiException(XWikiException.MODULE_XWIKI_STORE,
+                XWikiException.ERROR_XWIKI_STORE_HIBERNATE_DELETE_DATABASE,
+                "Exception while delete wiki database {0}",
+                e,
+                args);
+        } finally {
+            context.setDatabase(database);
+            try {
+                if (stmt != null)
+                    stmt.close();
+            } catch (Exception e) {
+            }
+            try {
+                if (bTransaction)
+                    endTransaction(context, false);
+            } catch (Exception e) {
+            }
+        }
+    }
+
+    /**
      * Verifies if a wiki document exists
      * @param doc
      * @param context

Modified: 
xwiki-platform/core/branches/xwiki-core-1.2/xwiki-core/src/main/java/com/xpn/xwiki/store/XWikiStoreInterface.java
===================================================================
--- 
xwiki-platform/core/branches/xwiki-core-1.2/xwiki-core/src/main/java/com/xpn/xwiki/store/XWikiStoreInterface.java
   2008-01-28 09:51:41 UTC (rev 7099)
+++ 
xwiki-platform/core/branches/xwiki-core-1.2/xwiki-core/src/main/java/com/xpn/xwiki/store/XWikiStoreInterface.java
   2008-01-28 10:24:48 UTC (rev 7100)
@@ -393,6 +393,16 @@
 
     public void cleanUp(XWikiContext context);
     public void createWiki(String wikiName, XWikiContext context) throws 
XWikiException;
+    
+    /**
+     * Delete a wiki database.
+     * 
+     * @param wikiName the name of the wiki.
+     * @param context the XWiki context.
+     * @throws XWikiException error when deleting wiki database.
+     */
+    public void deleteWiki(String wikiName, XWikiContext context) throws 
XWikiException;
+
     public boolean exists(XWikiDocument doc, XWikiContext context) throws 
XWikiException;
     public boolean isCustomMappingValid(BaseClass bclass, String 
custommapping1, XWikiContext context) throws XWikiException;
     public boolean injectCustomMapping(BaseClass doc1class, XWikiContext 
xWikiContext) throws XWikiException;

Modified: 
xwiki-platform/core/branches/xwiki-core-1.2/xwiki-core/src/main/java/com/xpn/xwiki/store/jcr/XWikiJcrStore.java
===================================================================
--- 
xwiki-platform/core/branches/xwiki-core-1.2/xwiki-core/src/main/java/com/xpn/xwiki/store/jcr/XWikiJcrStore.java
     2008-01-28 09:51:41 UTC (rev 7099)
+++ 
xwiki-platform/core/branches/xwiki-core-1.2/xwiki-core/src/main/java/com/xpn/xwiki/store/jcr/XWikiJcrStore.java
     2008-01-28 10:24:48 UTC (rev 7100)
@@ -518,6 +518,19 @@
                        throw new 
XWikiException(XWikiException.MODULE_XWIKI_STORE, 
XWikiException.ERROR_XWIKI_STORE_JCR_OTHER, "Cannot create new xwiki workspace: 
"+wikiName, e);
                }
        }
+       
+    /**
+     * [EMAIL PROTECTED]
+     * 
+     * @see 
com.xpn.xwiki.store.XWikiStoreInterface#deleteWiki(java.lang.String,
+     *      com.xpn.xwiki.XWikiContext)
+     */
+    public void deleteWiki(String wikiName, XWikiContext context) throws 
XWikiException
+    {
+        throw new XWikiException(XWikiException.MODULE_XWIKI_STORE,
+            XWikiException.ERROR_XWIKI_NOT_IMPLEMENTED,
+            "XWikiJcrStore.deleteWiki not implemented");
+    }
 
        public boolean exists(final XWikiDocument doc, XWikiContext context) 
throws XWikiException {
                try {

_______________________________________________
notifications mailing list
notifications@xwiki.org
http://lists.xwiki.org/mailman/listinfo/notifications

Reply via email to