Author: tmortagne
Date: 2008-02-05 14:45:31 +0100 (Tue, 05 Feb 2008)
New Revision: 7296

Modified:
   
xwiki-platform/xwiki-plugins/trunk/wiki-manager/src/main/java/com/xpn/xwiki/plugin/globalsearch/GlobalSearch.java
   
xwiki-platform/xwiki-plugins/trunk/wiki-manager/src/main/java/com/xpn/xwiki/plugin/globalsearch/GlobalSearchMessageTool.java
   
xwiki-platform/xwiki-plugins/trunk/wiki-manager/src/main/java/com/xpn/xwiki/plugin/globalsearch/GlobalSearchPluginApi.java
   
xwiki-platform/xwiki-plugins/trunk/wiki-manager/src/main/java/com/xpn/xwiki/plugin/wikimanager/WikiManager.java
   
xwiki-platform/xwiki-plugins/trunk/wiki-manager/src/main/java/com/xpn/xwiki/plugin/wikimanager/WikiManagerException.java
   
xwiki-platform/xwiki-plugins/trunk/wiki-manager/src/main/java/com/xpn/xwiki/plugin/wikimanager/WikiManagerMessageTool.java
   
xwiki-platform/xwiki-plugins/trunk/wiki-manager/src/main/java/com/xpn/xwiki/plugin/wikimanager/WikiManagerPluginApi.java
   
xwiki-platform/xwiki-plugins/trunk/wiki-manager/src/main/java/com/xpn/xwiki/plugin/wikimanager/doc/Wiki.java
   
xwiki-platform/xwiki-plugins/trunk/wiki-manager/src/main/java/com/xpn/xwiki/plugin/wikimanager/doc/XWikiServerClass.java
   
xwiki-platform/xwiki-plugins/trunk/wiki-manager/src/main/resources/wikimanager/ApplicationResources.properties
Log:
XAWM-57: Delete database when deleting virtual wiki
XAWM-58: Add access to Wiki Manager context's message tool

Modified: 
xwiki-platform/xwiki-plugins/trunk/wiki-manager/src/main/java/com/xpn/xwiki/plugin/globalsearch/GlobalSearch.java
===================================================================
--- 
xwiki-platform/xwiki-plugins/trunk/wiki-manager/src/main/java/com/xpn/xwiki/plugin/globalsearch/GlobalSearch.java
   2008-02-05 13:04:34 UTC (rev 7295)
+++ 
xwiki-platform/xwiki-plugins/trunk/wiki-manager/src/main/java/com/xpn/xwiki/plugin/globalsearch/GlobalSearch.java
   2008-02-05 13:45:31 UTC (rev 7296)
@@ -25,11 +25,6 @@
 final class GlobalSearch
 {
     /**
-     * Key to use with [EMAIL PROTECTED] XWikiContext#get(Object)}.
-     */
-    public static final String MESSAGETOOL_CONTEXT_KEY = 
"globalsearchmessagetool";
-
-    /**
      * The logging tool.
      */
     protected static final Log LOG = LogFactory.getLog(GlobalSearch.class);

Modified: 
xwiki-platform/xwiki-plugins/trunk/wiki-manager/src/main/java/com/xpn/xwiki/plugin/globalsearch/GlobalSearchMessageTool.java
===================================================================
--- 
xwiki-platform/xwiki-plugins/trunk/wiki-manager/src/main/java/com/xpn/xwiki/plugin/globalsearch/GlobalSearchMessageTool.java
        2008-02-05 13:04:34 UTC (rev 7295)
+++ 
xwiki-platform/xwiki-plugins/trunk/wiki-manager/src/main/java/com/xpn/xwiki/plugin/globalsearch/GlobalSearchMessageTool.java
        2008-02-05 13:45:31 UTC (rev 7296)
@@ -1,6 +1,7 @@
 package com.xpn.xwiki.plugin.globalsearch;
 
 import java.util.Locale;
+import java.util.ResourceBundle;
 
 import com.xpn.xwiki.XWikiContext;
 import 
com.xpn.xwiki.plugin.applicationmanager.core.plugin.XWikiPluginMessageTool;
@@ -16,6 +17,11 @@
 public class GlobalSearchMessageTool extends XWikiPluginMessageTool
 {
     /**
+     * Key to use with [EMAIL PROTECTED] XWikiContext#get(Object)}.
+     */
+    public static final String MESSAGETOOL_CONTEXT_KEY = 
"globalsearchmessagetool";
+    
+    /**
      * Used as [EMAIL PROTECTED] GlobalSearchException} message when provided 
field does not exist in the
      * document.
      */
@@ -41,6 +47,24 @@
         "globalsearch.plugin.log.getdocumentfromname";
 
     /**
+     * Default bundle manager where to find translated messages.
+     * 
+     * @since 1.1
+     */
+    private static final GlobalSearchMessageTool DEFAULTMESSAGETOOL = new 
GlobalSearchMessageTool();
+
+    /**
+     * Create default WikiManagerMessageTool. Only look at WikiManager 
properties file with system
+     * [EMAIL PROTECTED] Locale}.
+     * 
+     * @since 1.1
+     */
+    private GlobalSearchMessageTool()
+    {
+        super(ResourceBundle.getBundle(GlobalSearchPlugin.PLUGIN_NAME + 
"/ApplicationResources"));
+    }
+    
+    /**
      * Call for [EMAIL PROTECTED] 
XWikiPluginMessageTool#XWikiPluginMessageTool(ResourceBundle, XWikiContext)}.
      * Construct ResourceBundle based on [EMAIL PROTECTED] 
GlobalSearchPlugin#PLUGIN_NAME} +
      * "/ApplicationResources".
@@ -54,4 +78,19 @@
     {
         super(locale, plugin, context);
     }
+    
+    /**
+     * Get Global Search message tool registered in XWiki context. If not 
return default.
+     * 
+     * @param context the XWiki context from which to get message tool.
+     * @return the default Global Search message tool.
+     * @since 1.1
+     */
+    public static GlobalSearchMessageTool getDefault(XWikiContext context)
+    {
+        Object messagetool = context.get(MESSAGETOOL_CONTEXT_KEY);
+
+        return messagetool != null && messagetool instanceof 
GlobalSearchMessageTool
+            ? (GlobalSearchMessageTool) messagetool : DEFAULTMESSAGETOOL;
+    }
 }

Modified: 
xwiki-platform/xwiki-plugins/trunk/wiki-manager/src/main/java/com/xpn/xwiki/plugin/globalsearch/GlobalSearchPluginApi.java
===================================================================
--- 
xwiki-platform/xwiki-plugins/trunk/wiki-manager/src/main/java/com/xpn/xwiki/plugin/globalsearch/GlobalSearchPluginApi.java
  2008-02-05 13:04:34 UTC (rev 7295)
+++ 
xwiki-platform/xwiki-plugins/trunk/wiki-manager/src/main/java/com/xpn/xwiki/plugin/globalsearch/GlobalSearchPluginApi.java
  2008-02-05 13:45:31 UTC (rev 7296)
@@ -62,7 +62,7 @@
         // Message Tool
         Locale locale = (Locale) context.get("locale");
         this.messageTool = new GlobalSearchMessageTool(locale, plugin, 
context);
-        context.put(GlobalSearch.MESSAGETOOL_CONTEXT_KEY, this.messageTool);
+        context.put(GlobalSearchMessageTool.MESSAGETOOL_CONTEXT_KEY, 
this.messageTool);
 
         this.search = new GlobalSearch(messageTool);
     }

Modified: 
xwiki-platform/xwiki-plugins/trunk/wiki-manager/src/main/java/com/xpn/xwiki/plugin/wikimanager/WikiManager.java
===================================================================
--- 
xwiki-platform/xwiki-plugins/trunk/wiki-manager/src/main/java/com/xpn/xwiki/plugin/wikimanager/WikiManager.java
     2008-02-05 13:04:34 UTC (rev 7295)
+++ 
xwiki-platform/xwiki-plugins/trunk/wiki-manager/src/main/java/com/xpn/xwiki/plugin/wikimanager/WikiManager.java
     2008-02-05 13:45:31 UTC (rev 7296)
@@ -56,11 +56,6 @@
 final class WikiManager
 {
     /**
-     * Key to use with [EMAIL PROTECTED] XWikiContext#get(Object)}.
-     */
-    public static final String MESSAGETOOL_CONTEXT_KEY = 
"wikimanagermessagetool";
-
-    /**
      * The logging tool.
      */
     protected static final Log LOG = LogFactory.getLog(WikiManager.class);
@@ -68,11 +63,6 @@
     // 
////////////////////////////////////////////////////////////////////////////
 
     /**
-     * Default bundle manager where to find translated messages.
-     */
-    private static final XWikiPluginMessageTool DEFAULTMESSAGETOOL = new 
WikiManagerMessageTool();
-
-    /**
      * Unique instance of WikiManager.
      */
     private static WikiManager instance;
@@ -106,10 +96,7 @@
      */
     public XWikiPluginMessageTool getMessageTool(XWikiContext context)
     {
-        XWikiPluginMessageTool messagetool =
-            (XWikiPluginMessageTool) context.get(MESSAGETOOL_CONTEXT_KEY);
-
-        return messagetool != null ? messagetool : DEFAULTMESSAGETOOL;
+        return WikiManagerMessageTool.getDefault(context);
     }
 
     // 
////////////////////////////////////////////////////////////////////////////
@@ -351,8 +338,10 @@
                 String docFullName = (String) it.next();
                 XWikiDocument targetDoc = xwiki.getDocument(docFullName, 
context);
 
-                
targetDoc.setContent(MessageFormat.format("#includeInContext(\"{0}{1}{2}\")",
-                    new Object[] {sourceWiki, 
XObjectDocument.WIKI_SPACE_SEPARATOR, docFullName}));
+                targetDoc
+                    
.setContent(MessageFormat.format("#includeInContext(\"{0}{1}{2}\")",
+                        new Object[] {sourceWiki, 
XObjectDocument.WIKI_SPACE_SEPARATOR,
+                            docFullName}));
             }
 
             // Replace documents contents to link
@@ -361,8 +350,10 @@
                 String docFullName = (String) it.next();
                 XWikiDocument targetDoc = xwiki.getDocument(docFullName, 
context);
 
-                
targetDoc.setContent(MessageFormat.format("#includeTopic(\"{0}{1}{2}\")",
-                    new Object[] {sourceWiki, 
XObjectDocument.WIKI_SPACE_SEPARATOR, docFullName}));
+                targetDoc
+                    
.setContent(MessageFormat.format("#includeTopic(\"{0}{1}{2}\")",
+                        new Object[] {sourceWiki, 
XObjectDocument.WIKI_SPACE_SEPARATOR,
+                            docFullName}));
             }
         } finally {
             context.setDatabase(database);
@@ -630,7 +621,8 @@
                 }
             }
 
-            wikiSuperDocToSave = (XWikiServer) 
wikiClass.newXObjectDocument(docToSave, 0, context);
+            wikiSuperDocToSave =
+                (XWikiServer) wikiClass.newXObjectDocument(docToSave, 0, 
context);
 
             // clear entry in virtual wiki cache
             if 
(!wikiSuperDocToSave.getServer().equals(userWikiSuperDoc.getServer())) {
@@ -757,10 +749,29 @@
 
     /**
      * Delete an existing wiki.
-     * <p>
-     * Only delete the wiki descriptor the corresponding database always exist 
after delete.
      * 
      * @param wikiNameToDelete the name of the wiki to delete.
+     * @param deleteDatabase if true wiki's database is also removed.
+     * @param context the XWiki context.
+     * @throws XWikiException error when:
+     *             <ul>
+     *             <li>getting wiki descriptor document.</li>
+     *             <li>or deleteing wiki.</li>
+     *             </ul>
+     * @since 1.1
+     */
+    public void deleteWiki(String wikiNameToDelete, boolean deleteDatabase, 
XWikiContext context)
+        throws XWikiException
+    {
+        Wiki wiki = getWikiFromName(wikiNameToDelete, context);
+
+        wiki.delete(deleteDatabase);
+    }
+
+    /**
+     * Delete an existing wiki alias. If it's the last alias it delete the 
wiki.
+     * 
+     * @param wikiNameToDelete the name of the wiki to delete.
      * @param objectId the id of the XWiki object included in the document to 
manage.
      * @param context the XWiki context.
      * @throws XWikiException error when:
@@ -768,13 +779,19 @@
      *             <li>getting wiki descriptor document.</li>
      *             <li>or deleteing wiki.</li>
      *             </ul>
+     * @since 1.1
      */
-    public void deleteWiki(String wikiNameToDelete, int objectId, XWikiContext 
context)
+    public void deleteWikiAlias(String wikiNameToDelete, int objectId, 
XWikiContext context)
         throws XWikiException
     {
-        XWikiServer doc = getWikiAlias(wikiNameToDelete, objectId, true, 
context);
+        Wiki wiki = getWikiFromName(wikiNameToDelete, context);
+        XWikiServer alias = wiki.getWikiAlias(objectId);
 
-        doc.delete();
+        if (wiki.countWikiAliases() == 1) {
+            wiki.delete(true);
+        } else {
+            alias.delete();
+        }
     }
 
     /**

Modified: 
xwiki-platform/xwiki-plugins/trunk/wiki-manager/src/main/java/com/xpn/xwiki/plugin/wikimanager/WikiManagerException.java
===================================================================
--- 
xwiki-platform/xwiki-plugins/trunk/wiki-manager/src/main/java/com/xpn/xwiki/plugin/wikimanager/WikiManagerException.java
    2008-02-05 13:04:34 UTC (rev 7295)
+++ 
xwiki-platform/xwiki-plugins/trunk/wiki-manager/src/main/java/com/xpn/xwiki/plugin/wikimanager/WikiManagerException.java
    2008-02-05 13:45:31 UTC (rev 7296)
@@ -49,7 +49,7 @@
     public static final int ERROR_WM_WIKIALREADYEXISTS = 50033;
 
     /**
-     * Error when trying to use a provide wiki descriptor that does not exist.
+     * Error when trying to use a provided wiki descriptor that does not exist.
      */
     public static final int ERROR_WM_WIKIDOESNOTEXISTS = 50034;
 
@@ -85,6 +85,13 @@
      */
     public static final int ERROR_WM_PACKAGEINSTALL = 50040;
 
+    /**
+     * Error when trying to get a provided wiki alias that does not exist.
+     * 
+     * @since 1.1
+     */
+    public static final int ERROR_WM_WIKIALIASDOESNOTEXISTS = 50041;
+
     // //////
 
     /**

Modified: 
xwiki-platform/xwiki-plugins/trunk/wiki-manager/src/main/java/com/xpn/xwiki/plugin/wikimanager/WikiManagerMessageTool.java
===================================================================
--- 
xwiki-platform/xwiki-plugins/trunk/wiki-manager/src/main/java/com/xpn/xwiki/plugin/wikimanager/WikiManagerMessageTool.java
  2008-02-05 13:04:34 UTC (rev 7295)
+++ 
xwiki-platform/xwiki-plugins/trunk/wiki-manager/src/main/java/com/xpn/xwiki/plugin/wikimanager/WikiManagerMessageTool.java
  2008-02-05 13:45:31 UTC (rev 7296)
@@ -1,6 +1,7 @@
 package com.xpn.xwiki.plugin.wikimanager;
 
 import java.util.Locale;
+import java.util.ResourceBundle;
 
 import com.xpn.xwiki.XWikiContext;
 import 
com.xpn.xwiki.plugin.applicationmanager.core.plugin.XWikiPluginMessageTool;
@@ -16,6 +17,13 @@
 public class WikiManagerMessageTool extends XWikiPluginMessageTool
 {
     /**
+     * Key to use with [EMAIL PROTECTED] XWikiContext#get(Object)}.
+     * 
+     * @since 1.1
+     */
+    public static final String MESSAGETOOL_CONTEXT_KEY = 
"wikimanagermessagetool";
+
+    /**
      * Used as comment when creating a new empty wiki.
      */
     public static final String COMMENT_CREATEEMPTYWIKI = 
"wikimanager.plugin.comment.createwiki";
@@ -94,6 +102,33 @@
     public static final String ERROR_PACKAGEINSTALL = 
"wikimanager.plugin.error.packageinstall";
 
     /**
+     * Used as [EMAIL PROTECTED] WikiManagerException} message when trying to 
delete wiki with not
+     * administrator user.
+     * 
+     * @since 1.1
+     */
+    public static final String ERROR_RIGHTTODELETEWIKI =
+        "wikimanager.plugin.error.righttodeletewiki";
+
+    /**
+     * Used as [EMAIL PROTECTED] WikiManagerException} message when trying to 
delete wiki with not
+     * administrator user.
+     * 
+     * @since 1.1
+     */
+    public static final String ERROR_WIKIALIASDOESNOTEXISTS =
+        "wikimanager.plugin.error.wikialiasdoesnotexists";
+
+    /**
+     * Used as [EMAIL PROTECTED] WikiManagerException} message when trying to 
delete wiki with not
+     * administrator user.
+     * 
+     * @since 1.1
+     */
+    public static final String ERROR_WIKITEMPLATEALIASDOESNOTEXISTS =
+        "wikimanager.plugin.error.wikitemplatealiasdoesnotexists";
+
+    /**
      * Used as [EMAIL PROTECTED] org.apache.commons.logging.Log} log message 
when trying to create a new wiki
      * with a wiki descriptor that already exist.
      */
@@ -135,7 +170,7 @@
      * Used as [EMAIL PROTECTED] org.apache.commons.logging.Log} log message 
when failed to find wiki alias.
      */
     public static final String LOG_WIKIGET = "wikimanager.plugin.log.wikiget";
-    
+
     /**
      * Used as [EMAIL PROTECTED] org.apache.commons.logging.Log} log message 
when failed to find wiki
      * descriptor document.
@@ -174,12 +209,19 @@
         "wikimanager.plugin.log.wikitemplategetall";
 
     /**
+     * Default bundle manager where to find translated messages.
+     * 
+     * @since 1.1
+     */
+    private static final WikiManagerMessageTool DEFAULTMESSAGETOOL = new 
WikiManagerMessageTool();
+
+    /**
      * Create default WikiManagerMessageTool. Only look at WikiManager 
properties file with system
      * [EMAIL PROTECTED] Locale}.
      */
-    WikiManagerMessageTool()
+    private WikiManagerMessageTool()
     {
-        super(null, null);
+        super(ResourceBundle.getBundle(WikiManagerPlugin.PLUGIN_NAME + 
"/ApplicationResources"));
     }
 
     /**
@@ -196,4 +238,19 @@
     {
         super(locale, plugin, context);
     }
+
+    /**
+     * Get Wiki Manager message tool registered in XWiki context. If not 
return default.
+     * 
+     * @param context the XWiki context from which to get message tool.
+     * @return the default Wiki Manager message tool.
+     * @since 1.1
+     */
+    public static WikiManagerMessageTool getDefault(XWikiContext context)
+    {
+        Object messagetool = context.get(MESSAGETOOL_CONTEXT_KEY);
+
+        return messagetool != null && messagetool instanceof 
WikiManagerMessageTool
+            ? (WikiManagerMessageTool) messagetool : DEFAULTMESSAGETOOL;
+    }
 }

Modified: 
xwiki-platform/xwiki-plugins/trunk/wiki-manager/src/main/java/com/xpn/xwiki/plugin/wikimanager/WikiManagerPluginApi.java
===================================================================
--- 
xwiki-platform/xwiki-plugins/trunk/wiki-manager/src/main/java/com/xpn/xwiki/plugin/wikimanager/WikiManagerPluginApi.java
    2008-02-05 13:04:34 UTC (rev 7295)
+++ 
xwiki-platform/xwiki-plugins/trunk/wiki-manager/src/main/java/com/xpn/xwiki/plugin/wikimanager/WikiManagerPluginApi.java
    2008-02-05 13:45:31 UTC (rev 7296)
@@ -93,7 +93,7 @@
         // Message Tool
         Locale locale = (Locale) context.get("locale");
         this.messageTool = new WikiManagerMessageTool(locale, plugin, context);
-        context.put(WikiManager.MESSAGETOOL_CONTEXT_KEY, this.messageTool);
+        context.put(WikiManagerMessageTool.MESSAGETOOL_CONTEXT_KEY, 
this.messageTool);
 
         searchApi = plugin.getGlobalSearchApiPlugin(context);
     }
@@ -199,9 +199,10 @@
     }
 
     /**
-     * Delete wiki descriptor document from database.
+     * Delete wiki descriptor document and wiki's database.
      * 
      * @param wikiName the name of the wiki to delete.
+     * @param deleteDatabase if true wiki's database is also removed.
      * @return If there is error, it add error code in context [EMAIL 
PROTECTED] #CONTEXT_LASTERRORCODE} field
      *         and exception in context's [EMAIL PROTECTED] 
#CONTEXT_LASTEXCEPTION} field.
      *         <p>
@@ -210,12 +211,55 @@
      *         <li>[EMAIL PROTECTED] XWikiExceptionApi#ERROR_NOERROR}: methods 
succeed.</li>
      *         <li>[EMAIL PROTECTED] 
WikiManagerException#ERROR_WM_WIKIDOESNOTEXISTS}: wiki to delete does
      *         not exists.</li>
+     *         <li>[EMAIL PROTECTED] 
XWikiException#ERROR_XWIKI_ACCESS_DENIED}: you don't have right to
+     *         delete wiki.</li>
      *         </ul>
      * @throws XWikiException critical error in xwiki engine.
+     * @since 1.1
      */
+    public int deleteWiki(String wikiName, boolean deleteDatabase) throws 
XWikiException
+    {
+        int returncode = XWikiExceptionApi.ERROR_NOERROR;
+
+        try {
+            if (!hasAdminRights()) {
+                throw new 
WikiManagerException(XWikiException.ERROR_XWIKI_ACCESS_DENIED,
+                    
messageTool.get(WikiManagerMessageTool.ERROR_RIGHTTODELETEWIKI, wikiName));
+            }
+
+            WikiManager.getInstance().deleteWiki(wikiName, deleteDatabase, 
this.context);
+        } catch (WikiManagerException e) {
+            LOG.error(messageTool.get(WikiManagerMessageTool.LOG_WIKIDELETION, 
wikiName), e);
+
+            this.context.put(CONTEXT_LASTERRORCODE, new Integer(e.getCode()));
+            this.context.put(CONTEXT_LASTEXCEPTION, new XWikiExceptionApi(e, 
this.context));
+
+            returncode = e.getCode();
+        }
+
+        return returncode;
+    }
+
+    /**
+     * Delete wiki descriptor document and wiki's database.
+     * 
+     * @param wikiName the name of the wiki to delete.
+     * @return If there is error, it add error code in context [EMAIL 
PROTECTED] #CONTEXT_LASTERRORCODE} field
+     *         and exception in context's [EMAIL PROTECTED] 
#CONTEXT_LASTEXCEPTION} field.
+     *         <p>
+     *         Error codes can be :
+     *         <ul>
+     *         <li>[EMAIL PROTECTED] XWikiExceptionApi#ERROR_NOERROR}: methods 
succeed.</li>
+     *         <li>[EMAIL PROTECTED] 
WikiManagerException#ERROR_WM_WIKIDOESNOTEXISTS}: wiki to delete does
+     *         not exists.</li>
+     *         <li>[EMAIL PROTECTED] 
XWikiException#ERROR_XWIKI_ACCESS_DENIED}: you don't have right to
+     *         delete wiki.</li>
+     *         </ul>
+     * @throws XWikiException critical error in xwiki engine.
+     */
     public int deleteWiki(String wikiName) throws XWikiException
     {
-        return deleteWiki(wikiName, 0);
+        return deleteWiki(wikiName, true);
     }
 
     /**
@@ -231,19 +275,47 @@
      *         <li>[EMAIL PROTECTED] XWikiExceptionApi#ERROR_NOERROR}: methods 
succeed.</li>
      *         <li>[EMAIL PROTECTED] 
WikiManagerException#ERROR_WM_WIKIDOESNOTEXISTS}: wiki to delete does
      *         not exists.</li>
+     *         <li>[EMAIL PROTECTED] 
XWikiException#ERROR_XWIKI_ACCESS_DENIED}: you don't have right to
+     *         delete wiki.</li>
      *         </ul>
      * @throws XWikiException critical error in xwiki engine.
+     * @deprecated Use [EMAIL PROTECTED] #deleteWikiAlias(String, int)} since 
1.1.
      */
     public int deleteWiki(String wikiName, int objectId) throws XWikiException
     {
-        if (!hasAdminRights()) {
-            return XWikiException.ERROR_XWIKI_ACCESS_DENIED;
-        }
+        return deleteWikiAlias(wikiName, objectId);
+    }
 
+    /**
+     * Delete wiki descriptor alias document from database.
+     * 
+     * @param wikiName the name of the wiki to delete.
+     * @param objectId the id of the XWiki object included in the document to 
manage.
+     * @return If there is error, it add error code in context [EMAIL 
PROTECTED] #CONTEXT_LASTERRORCODE} field
+     *         and exception in context's [EMAIL PROTECTED] 
#CONTEXT_LASTEXCEPTION} field.
+     *         <p>
+     *         Error codes can be :
+     *         <ul>
+     *         <li>[EMAIL PROTECTED] XWikiExceptionApi#ERROR_NOERROR}: methods 
succeed.</li>
+     *         <li>[EMAIL PROTECTED] 
WikiManagerException#ERROR_WM_WIKIDOESNOTEXISTS}: wiki to delete does
+     *         not exists.</li>
+     *         <li>[EMAIL PROTECTED] 
XWikiException#ERROR_XWIKI_ACCESS_DENIED}: you don't have right to
+     *         delete wiki.</li>
+     *         </ul>
+     * @throws XWikiException critical error in xwiki engine.
+     * @since 1.1
+     */
+    public int deleteWikiAlias(String wikiName, int objectId) throws 
XWikiException
+    {
         int returncode = XWikiExceptionApi.ERROR_NOERROR;
 
         try {
-            WikiManager.getInstance().deleteWiki(wikiName, objectId, 
this.context);
+            if (!hasAdminRights()) {
+                throw new 
WikiManagerException(XWikiException.ERROR_XWIKI_ACCESS_DENIED,
+                    
messageTool.get(WikiManagerMessageTool.ERROR_RIGHTTODELETEWIKI, wikiName));
+            }
+
+            WikiManager.getInstance().deleteWikiAlias(wikiName, objectId, 
this.context);
         } catch (WikiManagerException e) {
             LOG.error(messageTool.get(WikiManagerMessageTool.LOG_WIKIDELETION, 
wikiName), e);
 

Modified: 
xwiki-platform/xwiki-plugins/trunk/wiki-manager/src/main/java/com/xpn/xwiki/plugin/wikimanager/doc/Wiki.java
===================================================================
--- 
xwiki-platform/xwiki-plugins/trunk/wiki-manager/src/main/java/com/xpn/xwiki/plugin/wikimanager/doc/Wiki.java
        2008-02-05 13:04:34 UTC (rev 7295)
+++ 
xwiki-platform/xwiki-plugins/trunk/wiki-manager/src/main/java/com/xpn/xwiki/plugin/wikimanager/doc/Wiki.java
        2008-02-05 13:45:31 UTC (rev 7296)
@@ -2,12 +2,15 @@
 
 import java.util.Collection;
 import java.util.Iterator;
+import java.util.List;
 
 import com.xpn.xwiki.XWikiContext;
 import com.xpn.xwiki.XWikiException;
 import com.xpn.xwiki.api.Document;
 import com.xpn.xwiki.doc.XWikiDocument;
 import com.xpn.xwiki.objects.BaseObject;
+import com.xpn.xwiki.plugin.wikimanager.WikiManagerException;
+import com.xpn.xwiki.plugin.wikimanager.WikiManagerMessageTool;
 
 /**
  * This class manage wiki document descriptor.
@@ -39,6 +42,73 @@
     }
 
     /**
+     * Delete the wiki.
+     * 
+     * @param deleteDatabase if true wiki's database is also removed.
+     * @throws XWikiException error deleting the wiki.
+     * @since 1.1
+     */
+    public void delete(boolean deleteDatabase) throws XWikiException
+    {
+        if (hasAdminRights()) {
+            this.context.getWiki().getStore().deleteWiki(getWikiName(), 
context);
+        } else {
+            throw new 
WikiManagerException(XWikiException.ERROR_XWIKI_ACCESS_DENIED,
+                WikiManagerMessageTool.getDefault(context).get(
+                    WikiManagerMessageTool.ERROR_RIGHTTODELETEWIKI, 
getWikiName()));
+        }
+
+        super.delete();
+    }
+
+    /**
+     * @return the number of wiki aliases in this wiki.
+     * @throws XWikiException when getting the number of wiki aliases.
+     * @since 1.1
+     */
+    public int countWikiAliases() throws XWikiException
+    {
+        List objects = 
getObjects(XWikiServerClass.getInstance(context).getClassFullName());
+
+        int nb = 0;
+        for (Iterator it = objects.iterator(); it.hasNext();) {
+            if (it.next() != null) {
+                ++nb;
+            }
+        }
+
+        return nb;
+    }
+
+    /**
+     * Get wiki alias id from domain name.
+     * 
+     * @param domain the wiki alias domain name.
+     * @return the wiki alias id.
+     * @throws XWikiException error when getting wiki alias id from domain 
name.
+     * @since 1.1
+     */
+    public int getWikiAliasIdFromDomain(String domain) throws XWikiException
+    {
+        Collection objects =
+            
doc.getObjects(XWikiServerClass.getInstance(context).getClassFullName());
+
+        for (Iterator it = objects.iterator(); it.hasNext();) {
+            BaseObject bobect = (BaseObject) it.next();
+
+            if (bobect != null
+                && 
bobect.getStringValue(XWikiServerClass.FIELD_SERVER).equals(domain)) {
+                return bobect.getNumber();
+            }
+        }
+
+        throw new 
WikiManagerException(WikiManagerException.ERROR_WM_WIKIALIASDOESNOTEXISTS,
+            WikiManagerMessageTool.getDefault(context).get(
+                WikiManagerMessageTool.ERROR_WIKIALIASDOESNOTEXISTS,
+                getWikiName() + " - " + domain));
+    }
+
+    /**
      * @return the list of aliases to of this wiki.
      * @throws XWikiException error when getting aliases.
      */
@@ -60,19 +130,9 @@
      */
     public XWikiServer getWikiAlias(String domain) throws XWikiException
     {
-        Collection objects =
-            
doc.getObjects(XWikiServerClass.getInstance(context).getClassFullName());
+        int id = getWikiAliasIdFromDomain(domain);
 
-        for (Iterator it = objects.iterator(); it.hasNext();) {
-            BaseObject bobect = (BaseObject) it.next();
-
-            if (bobect != null
-                && 
bobect.getStringValue(XWikiServerClass.FIELD_SERVER).equals(domain)) {
-                return getWikiAlias(bobect.getNumber());
-            }
-        }
-
-        return null;
+        return getWikiAlias(id);
     }
 
     /**
@@ -87,10 +147,10 @@
         return (XWikiServer) 
XWikiServerClass.getInstance(context).newXObjectDocument(doc, id,
             context);
     }
-    
+
     /**
      * [EMAIL PROTECTED]
-     *
+     * 
      * @see java.lang.Object#toString()
      */
     public String toString()

Modified: 
xwiki-platform/xwiki-plugins/trunk/wiki-manager/src/main/java/com/xpn/xwiki/plugin/wikimanager/doc/XWikiServerClass.java
===================================================================
--- 
xwiki-platform/xwiki-plugins/trunk/wiki-manager/src/main/java/com/xpn/xwiki/plugin/wikimanager/doc/XWikiServerClass.java
    2008-02-05 13:04:34 UTC (rev 7295)
+++ 
xwiki-platform/xwiki-plugins/trunk/wiki-manager/src/main/java/com/xpn/xwiki/plugin/wikimanager/doc/XWikiServerClass.java
    2008-02-05 13:45:31 UTC (rev 7296)
@@ -28,6 +28,7 @@
 import 
com.xpn.xwiki.plugin.applicationmanager.core.doc.objects.classes.XObjectDocumentDoesNotExistException;
 import com.xpn.xwiki.objects.classes.BaseClass;
 import com.xpn.xwiki.plugin.wikimanager.WikiManagerException;
+import com.xpn.xwiki.plugin.wikimanager.WikiManagerMessageTool;
 
 /**
  * [EMAIL PROTECTED] 
com.xpn.xwiki.plugin.applicationmanager.core.doc.objects.classes.XClassManager}
@@ -288,7 +289,7 @@
     }
 
     /**
-     * Get wiki descriptor [EMAIL PROTECTED] XWikiServer}.
+     * Get wiki alias [EMAIL PROTECTED] XWikiServer}.
      * 
      * @param wikiName the name of the wiki.
      * @param objectId the id of the XWiki object included in the document to 
manage.
@@ -305,13 +306,14 @@
             return (XWikiServer) getXObjectDocument(wikiName, objectId, 
validate, context);
         } catch (XObjectDocumentDoesNotExistException e) {
             throw new 
WikiManagerException(WikiManagerException.ERROR_WM_WIKIDOESNOTEXISTS,
-                wikiName + " wiki descriptor document does not exist",
+                WikiManagerMessageTool.getDefault(context).get(
+                    WikiManagerMessageTool.ERROR_WIKIALIASDOESNOTEXISTS, 
wikiName),
                 e);
         }
     }
 
     /**
-     * Get wiki template descriptor [EMAIL PROTECTED] XWikiServer}.
+     * Get wiki template alias [EMAIL PROTECTED] XWikiServer}.
      * 
      * @param wikiName the name of the wiki.
      * @param objectId the id of the XWiki object included in the document to 
manage.
@@ -328,7 +330,8 @@
 
         if (validate && 
!wiki.getVisibility().equals(FIELDL_VISIBILITY_TEMPLATE)) {
             throw new 
WikiManagerException(WikiManagerException.ERROR_WM_WIKIDOESNOTEXISTS,
-                wikiName + " wiki template descriptor document does not 
exist");
+                WikiManagerMessageTool.getDefault(context).get(
+                    
WikiManagerMessageTool.ERROR_WIKITEMPLATEALIASDOESNOTEXISTS, wikiName));
         }
 
         return wiki;

Modified: 
xwiki-platform/xwiki-plugins/trunk/wiki-manager/src/main/resources/wikimanager/ApplicationResources.properties
===================================================================
--- 
xwiki-platform/xwiki-plugins/trunk/wiki-manager/src/main/resources/wikimanager/ApplicationResources.properties
      2008-02-05 13:04:34 UTC (rev 7295)
+++ 
xwiki-platform/xwiki-plugins/trunk/wiki-manager/src/main/resources/wikimanager/ApplicationResources.properties
      2008-02-05 13:45:31 UTC (rev 7296)
@@ -1,35 +1,38 @@
 # comments
-wikimanager.plugin.comment.createwiki=create wiki \"{0}\"
-wikimanager.plugin.comment.createwikifromtemplat=import wiki \"{0}\" from wiki 
template \"{1}\"
-wikimanager.plugin.comment.createwikifrompackage=reload wiki \"{0}\" from 
package \"{1}\"
-wikimanager.plugin.comment.createwikitemplate=create wiki template \"{0}\" 
from package \"{1}\"
+wikimanager.plugin.comment.createwiki=create wiki [{0}]
+wikimanager.plugin.comment.createwikifromtemplat=import wiki [{0}] from wiki 
template [{1}]
+wikimanager.plugin.comment.createwikifrompackage=reload wiki [{0}] from 
package [{1}]
+wikimanager.plugin.comment.createwikitemplate=create wiki template [{0}] from 
package [{1}]
 
 # messages
 wikimanager.plugin.error.xwikinotvirtual=XWiki is not in virtual mode. Make 
sure property \"xwiki.virtual\" is setted to \"xwiki.virtual=1\" in xwiki.cfg 
file
-wikimanager.plugin.error.userdoesnotexists=User \"{0}\" does not exist
-wikimanager.plugin.error.usernotactive=User \"{0}\" is not active
-wikimanager.plugin.error.wikinameforbidden=Wiki name \"{0}\" forbidden
-wikimanager.plugin.error.descriptoralreadyexists=Wiki \"{0}\" document already 
exist
-wikimanager.plugin.error.updatedatabase=Wiki \"{0}\" database update failed
-wikimanager.plugin.error.packagedoesnotexists=Package \"{0}\" does not exists
-wikimanager.plugin.error.packageimport=Fail to import package {0}
-wikimanager.plugin.error.packageinstall=Fail to install package {0}
+wikimanager.plugin.error.userdoesnotexists=User [{0}] does not exist
+wikimanager.plugin.error.usernotactive=User [{0}] is not active
+wikimanager.plugin.error.wikinameforbidden=Wiki name [{0}] forbidden
+wikimanager.plugin.error.descriptoralreadyexists=Wiki [{0}] document already 
exist
+wikimanager.plugin.error.updatedatabase=Wiki [{0}] database update failed
+wikimanager.plugin.error.packagedoesnotexists=Package [{0}] does not exists
+wikimanager.plugin.error.packageimport=Fail to import package [{0}]
+wikimanager.plugin.error.packageinstall=Fail to install package [{0}]
+wikimanager.plugin.error.righttodeletewiki=You don't have right to delete wiki 
[{0}]
+wikimanager.plugin.error.wikialiasdoesnotexists=Wiki alias [{0}] document does 
not exist
+wikimanager.plugin.error.wikitemplatealiasdoesnotexists=Wiki template alias 
[{0}] document does not exist
 
 # log
-wikimanager.plugin.log.createwiki.userdoesnotexist=Wiki \"{0}\" creation 
failed: user does not exist
-wikimanager.plugin.log.createwiki.usernotactive=Wiki \"{0}\" creation failed: 
user is not active
-wikimanager.plugin.log.createwiki.wikinameforbidden=Wiki \"{0}\" creation 
failed: wiki name is forbidden
-wikimanager.plugin.log.createwiki.descriptoralreadyexists=Wiki \"{0}\" 
creation failed: wiki descriptor page already exists
-wikimanager.plugin.log.createwiki.databasealreadyexist=Wiki \"{0}\" creation 
failed: wiki database already exists
-wikimanager.plugin.log.createwiki.databasecreation=Wiki \"{0}\" creation 
failed: wiki database creation failed
-wikimanager.plugin.log.createwiki.databasecreationexception=Wiki \"{0}\" 
creation failed: wiki database creation threw exception
-wikimanager.plugin.log.wikicreation=Wiki ({0}) creation failed
-wikimanager.plugin.log.wikideletion=Wiki \"{0}\" deletion failed
-wikimanager.plugin.log.wikiget=Wiki \"{0}\" descriptor can't be found
+wikimanager.plugin.log.createwiki.userdoesnotexist=Wiki [{0}] creation failed: 
user does not exist
+wikimanager.plugin.log.createwiki.usernotactive=Wiki \"{0}} creation failed: 
user is not active
+wikimanager.plugin.log.createwiki.wikinameforbidden=Wiki [{0}] creation 
failed: wiki name is forbidden
+wikimanager.plugin.log.createwiki.descriptoralreadyexists=Wiki [{0}] creation 
failed: wiki descriptor page already exists
+wikimanager.plugin.log.createwiki.databasealreadyexist=Wiki [{0}] creation 
failed: wiki database already exists
+wikimanager.plugin.log.createwiki.databasecreation=Wiki [{0}] creation failed: 
wiki database creation failed
+wikimanager.plugin.log.createwiki.databasecreationexception=Wiki [{0}] 
creation failed: wiki database creation threw exception
+wikimanager.plugin.log.wikicreation=Wiki [{0}] creation failed
+wikimanager.plugin.log.wikideletion=Wiki [{0}] deletion failed
+wikimanager.plugin.log.wikiget=Wiki [{0}] descriptor can't be found
 wikimanager.plugin.log.wikigetall=All wikis descriptors can't be found
-wikimanager.plugin.log.wikialiasget=Wiki \"{0}\" alias can't be found
+wikimanager.plugin.log.wikialiasget=Wiki [{0}] alias can't be found
 wikimanager.plugin.log.wikialiasgetall=All wikis aliases can't be found
-wikimanager.plugin.log.wikisetvisibility=Wiki \"{0}\" visibility field can't 
be modified
-wikimanager.plugin.log.wikitemplatecreation=Wiki template \"{0}\" creation 
failed
-wikimanager.plugin.log.wikitemplateget=Wiki template \"{0}\" descriptor can't 
be found
+wikimanager.plugin.log.wikisetvisibility=Wiki [{0}] visibility field can't be 
modified
+wikimanager.plugin.log.wikitemplatecreation=Wiki template [{0}] creation failed
+wikimanager.plugin.log.wikitemplateget=Wiki template [{0}] descriptor can't be 
found
 wikimanager.plugin.log.wikitemplategetall=All wikis templates descriptors 
can't be found
\ No newline at end of file

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

Reply via email to