Author: tmortagne
Date: 2007-10-03 16:34:45 +0200 (Wed, 03 Oct 2007)
New Revision: 5251

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/WikiManagerException.java
Log:
* XAWM-8 : Throw exception if XWiki is not in virtual mode with message saying 
that you have to make sure property "xwiki.virtual" is setted to 
"xwiki.virtual=1" in xwiki.cfg file.
* Improve javadoc.

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
     2007-10-03 13:56:50 UTC (rev 5250)
+++ 
xwiki-platform/xwiki-plugins/trunk/wiki-manager/src/main/java/com/xpn/xwiki/plugin/wikimanager/WikiManager.java
     2007-10-03 14:34:45 UTC (rev 5251)
@@ -53,8 +53,14 @@
     {
     }
 
+    /**
+     * Unique instance of WikiManager.
+     */
     private static WikiManager _instance = null;
 
+    /**
+     * @return a unique instance of WikiManager. Thread safe.
+     */
     public static WikiManager getInstance()
     {
         synchronized (WikiManager.class) {
@@ -68,39 +74,72 @@
     // 
////////////////////////////////////////////////////////////////////////////
     // Utils
 
-    public void saveDocument(String wiki, XWikiDocument doc, XWikiContext 
context)
+    /**
+     * Encapsulate [EMAIL PROTECTED] 
com.xpn.xwiki.XWiki#saveDocument(XWikiDocument, XWikiContext)} adding wiki
+     * switch.
+     * 
+     * @param wikiName the name of the wiki where to save the document.
+     * @param doc the document to save.
+     * @param context the XWiki Context.
+     * @throws XWikiException
+     * @see com.xpn.xwiki.XWiki#saveDocument(XWikiDocument, XWikiContext)
+     */
+    public void saveDocument(String wikiName, XWikiDocument doc, XWikiContext 
context)
         throws XWikiException
     {
         String database = context.getDatabase();
 
         try {
-            context.setDatabase(wiki);
+            context.setDatabase(wikiName);
             context.getWiki().saveDocument(doc, context);
         } finally {
             context.setDatabase(database);
         }
     }
 
-    public XWikiDocument getDocument(String wiki, String fullname, 
XWikiContext context)
+    /**
+     * Encapsulate [EMAIL PROTECTED] com.xpn.xwiki.XWiki#getDocument(String, 
XWikiContext)} adding wiki switch.
+     * 
+     * @param wikiName the name of the wiki where to get the document.
+     * @param fullname the full name of the document to get.
+     * @param context the XWiki context.
+     * @return the document with full name equals to <code>fullname</code> and 
wiki
+     *         <code>wikiName</code>. If it dos not exist return new 
XWikiDocument.
+     * @throws XWikiException
+     * @see om.xpn.xwiki.XWiki#getDocument(String, XWikiContext)
+     */
+    public XWikiDocument getDocument(String wikiName, String fullname, 
XWikiContext context)
         throws XWikiException
     {
         String database = context.getDatabase();
 
         try {
-            context.setDatabase(wiki);
+            context.setDatabase(wikiName);
             return context.getWiki().getDocument(fullname, context);
         } finally {
             context.setDatabase(database);
         }
     }
 
-    public List searchDocuments(String wiki, String wheresql, XWikiContext 
context)
+    /**
+     * Encapsulate [EMAIL PROTECTED] 
com.xpn.xwiki.XWiki#searchDocuments(String, XWikiContext)} adding wiki
+     * switch.
+     * 
+     * @param wikiName the name of the wiki where to search for documents.
+     * @param wheresql the conditions to add to HQL request.
+     * @param context the XWiki context.
+     * @return the list of documents that match the <code>wheresql</code> 
conditions. If nothing
+     *         found return empty List.
+     * @throws XWikiException
+     * @see com.xpn.xwiki.XWiki#searchDocuments(String, XWikiContext)
+     */
+    public List searchDocuments(String wikiName, String wheresql, XWikiContext 
context)
         throws XWikiException
     {
         String database = context.getDatabase();
 
         try {
-            context.setDatabase(wiki);
+            context.setDatabase(wikiName);
             return context.getWiki().getStore().searchDocuments(wheresql, 
context);
         } finally {
             context.setDatabase(database);
@@ -114,28 +153,31 @@
         throws XWikiException
     {
         // Get applications manger
-        ApplicationManagerPluginApi appmanager = (ApplicationManagerPluginApi) 
context.getWiki().getPluginApi(ApplicationManagerPlugin.PLUGIN_NAME, context);
-        
+        ApplicationManagerPluginApi appmanager =
+            (ApplicationManagerPluginApi) context.getWiki().getPluginApi(
+                ApplicationManagerPlugin.PLUGIN_NAME, context);
+
         if (appmanager == null)
             return null;
 
-        ////////////////////////////////////
+        // //////////////////////////////////
         // Get documents to include
-        
+
         String database = context.getDatabase();
 
         Collection docsToInclude = null;
 
         try {
             context.setDatabase(wiki);
-            
+
             XWikiApplication rootApp = appmanager.getRootApplication();
 
             if (rootApp != null)
                 docsToInclude = rootApp.getDocsNameToInclude(true, context);
             else
                 docsToInclude =
-                    
XWikiApplication.getDocsNameToInclude(appmanager.getApplicationDocumentList(), 
true, context);
+                    XWikiApplication.getDocsNameToInclude(
+                        appmanager.getApplicationDocumentList(), true, 
context);
         } finally {
             context.setDatabase(database);
         }
@@ -146,45 +188,88 @@
     private void copyWiki(String sourceWiki, String targetWiki, String 
language,
         XWikiContext context) throws XWikiException
     {
-        /* TODO : add included copy support to xwiki-core and use this code
-         * context.getWiki().copyWikiWeb(null, sourceWiki,
-            getDocsNameToInclude(sourceWiki, context), targetWiki, language, 
true, context);*/
-       
-       XWiki xwiki = context.getWiki();
-       
-       // Copy all the wiki
-       xwiki.copyWikiWeb(null, sourceWiki, targetWiki, language, true, 
context);
-       
-       // Replace documents contents to include
-       String database = context.getDatabase();
-       try {
-               context.setDatabase(targetWiki);
-               
-               Collection docsNameToInclude = getDocsNameToInclude(sourceWiki, 
context);
-               for (Iterator it = docsNameToInclude.iterator(); it.hasNext();) 
{
-                       String docFullName = (String)it.next();
-                       XWikiDocument targetDoc = 
xwiki.getDocument(docFullName, context);
-                       
-                       targetDoc.setContent("#includeInContext(\"" + 
sourceWiki + ":" + docFullName + "\")");
-               }
-       } finally {
-               context.setDatabase(database);
-       }
+        /*
+         * TODO : add included copy support to xwiki-core and use this code
+         * context.getWiki().copyWikiWeb(null, sourceWiki, 
getDocsNameToInclude(sourceWiki,
+         * context), targetWiki, language, true, context);
+         */
+
+        XWiki xwiki = context.getWiki();
+
+        // Copy all the wiki
+        xwiki.copyWikiWeb(null, sourceWiki, targetWiki, language, true, 
context);
+
+        // Replace documents contents to include
+        String database = context.getDatabase();
+        try {
+            context.setDatabase(targetWiki);
+
+            Collection docsNameToInclude = getDocsNameToInclude(sourceWiki, 
context);
+            for (Iterator it = docsNameToInclude.iterator(); it.hasNext();) {
+                String docFullName = (String) it.next();
+                XWikiDocument targetDoc = xwiki.getDocument(docFullName, 
context);
+
+                targetDoc.setContent("#includeInContext(\"" + sourceWiki + ":" 
+ docFullName
+                    + "\")");
+            }
+        } finally {
+            context.setDatabase(database);
+        }
     }
 
+    /**
+     * Create a new virtual wiki. The new wiki is initialized with provided 
xar package.
+     * 
+     * @param userWikiSuperDoc a wiki descriptor document from which the new 
wiki descriptor
+     *            document will be created.
+     * @param packageName the name of the attached XAR file to import in the 
new wiki.
+     * @param failOnExist if true throw exception when wiki already exist. If 
false overwrite
+     *            existing wiki.
+     * @param context the XWiki context.
+     * @return the new wiki descriptor document.
+     * @throws XWikiException
+     * @see #createNewWiki(XWikiServer, boolean, XWikiContext)
+     * @see #createNewWikiFromTemplate(XWikiServer, String, boolean, 
XWikiContext)
+     */
     public XWikiServer createNewWikiFromPackage(XWikiServer userWikiSuperDoc, 
String packageName,
         boolean failOnExist, XWikiContext context) throws XWikiException
     {
         return createNewWiki(userWikiSuperDoc, failOnExist, null, packageName, 
context);
     }
 
-    public XWikiServer createNewWikiFromTemplate(XWikiServer userWikiSuperDoc, 
String templateWikiName,
-        boolean failOnExist, XWikiContext context) throws XWikiException
+    /**
+     * Create a new virtual wiki. The new wiki is a copy of provided existing 
wiki.
+     * 
+     * @param userWikiSuperDoc a wiki descriptor document from which the new 
wiki descriptor
+     *            document will be created.
+     * @param templateWikiName the of the wiki from where to copy document to 
the new wiki.
+     * @param failOnExist if true throw exception when wiki already exist. If 
false overwrite
+     *            existing wiki.
+     * @param context the XWiki context.
+     * @return the new wiki descriptor document.
+     * @throws XWikiException
+     * @see #createNewWiki(XWikiServer, boolean, XWikiContext)
+     * @see #createNewWikiFromPackage(XWikiServer, String, boolean, 
XWikiContext)
+     */
+    public XWikiServer createNewWikiFromTemplate(XWikiServer userWikiSuperDoc,
+        String templateWikiName, boolean failOnExist, XWikiContext context) 
throws XWikiException
     {
         return createNewWiki(userWikiSuperDoc, failOnExist, templateWikiName, 
null, context);
     }
-    
-    public XWikiServer createNewWiki(XWikiServer userWikiSuperDoc, boolean 
failOnExist, XWikiContext context) throws XWikiException
+
+    /**
+     * Create a new empty virtual wiki.
+     * 
+     * @param userWikiSuperDoc a wiki descriptor document from which the new 
wiki descriptor
+     *            document will be created.
+     * @param failOnExist if true throw exception when wiki already exist. If 
false overwrite
+     *            existing wiki.
+     * @param context the XWiki context.
+     * @return the new wiki descriptor document.
+     * @throws XWikiException
+     */
+    public XWikiServer createNewWiki(XWikiServer userWikiSuperDoc, boolean 
failOnExist,
+        XWikiContext context) throws XWikiException
     {
         return createNewWiki(userWikiSuperDoc, failOnExist, null, null, 
context);
     }
@@ -193,16 +278,21 @@
         String templateWikiName, String packageName, XWikiContext context) 
throws XWikiException
     {
         if (userWikiSuperDoc.getOwner().length() == 0)
-        throw new 
WikiManagerException(WikiManagerException.ERROR_XWIKI_USER_INACTIVE,
-            "Invalid user \"" + userWikiSuperDoc.getOwner() + "\"");
-        
+            throw new 
WikiManagerException(WikiManagerException.ERROR_XWIKI_USER_INACTIVE,
+                "Invalid user \"" + userWikiSuperDoc.getOwner() + "\"");
+
         XWiki xwiki = context.getWiki();
+
+        if (!xwiki.isVirtual())
+            throw new 
WikiManagerException(WikiManagerException.ERROR_WIKIMANAGER_XWIKI_NOT_VIRTUAL,
+                "XWiki is not in virtual mode. Make sure property 
\"xwiki.virtual\" is setted to \"xwiki.virtual=1\" in xwiki.cfg file");
+
         XWikiServerClass wikiClass = XWikiServerClass.getInstance(context);
 
         String newWikiName = userWikiSuperDoc.getWikiName();
-        
+
         String database = context.getDatabase();
-        
+
         try {
             // Return to root database
             context.setDatabase(context.getMainXWiki());
@@ -253,14 +343,17 @@
                             LOG.error("Wiki creation (" + userWikiSuperDoc + 
") failed: "
                                 + "wiki server page already exists");
                         throw new 
WikiManagerException(WikiManagerException.ERROR_WIKIMANAGER_WIKISERVER_ALREADY_EXISTS,
-                            "Wiki \"" + userWikiSuperDoc.getFullName() + "\" 
document already exist");
+                            "Wiki \"" + userWikiSuperDoc.getFullName()
+                                + "\" document already exist");
                     } else if (LOG.isWarnEnabled())
                         LOG.warn("Wiki creation (" + userWikiSuperDoc + ") 
failed: "
                             + "wiki server page already exists");
 
                 }
 
-                wikiSuperDocToSave = 
(XWikiServer)XWikiServerClass.getInstance(context).newSuperDocument(docToSave, 
context);
+                wikiSuperDocToSave =
+                    (XWikiServer) 
XWikiServerClass.getInstance(context).newSuperDocument(
+                        docToSave, context);
 
                 // clear entry in virtual wiki cache
                 if 
(!wikiSuperDocToSave.getServer().equals(userWikiSuperDoc.getServer()))
@@ -306,7 +399,7 @@
             if (templateWikiName != null) {
                 copyWiki(templateWikiName, newWikiName, language, context);
             }
-            
+
             if (packageName != null) {
                 // Prepare to import
                 XWikiDocument doc = context.getDoc();
@@ -339,19 +432,29 @@
             // Create user page in his wiki
             // Let's not create it anymore.. this makes the creator loose 
super admin rights on
             // his wiki
-            //xwiki.copyDocument(userWikiSuperDoc.getOwner(), database, 
newWikiName, language, context);
+            // xwiki.copyDocument(userWikiSuperDoc.getOwner(), database, 
newWikiName, language,
+            // context);
 
             // Return to root database
             context.setDatabase(context.getMainXWiki());
 
             wikiSuperDocToSave.save();
-            
+
             return wikiSuperDocToSave;
         } finally {
             context.setDatabase(database);
         }
     }
 
+    /**
+     * Delete an existing wiki.
+     * <p>
+     * Only delete the wiki descriptor the corresponding database always exist 
after delete.
+     * 
+     * @param wikiNameToDelete the name of te wiki to delete.
+     * @param context the XWiki context.
+     * @throws XWikiException
+     */
     public void deleteWiki(String wikiNameToDelete, XWikiContext context) 
throws XWikiException
     {
         XWikiServer doc = getWiki(wikiNameToDelete, context, true);
@@ -359,17 +462,45 @@
         doc.delete(context);
     }
 
+    /**
+     * Get the wiki descriptor document.
+     * 
+     * @param wikiName the name of the wiki.
+     * @param context the XWiki context.
+     * @param validate when wiki descriptor document does not exist :
+     *            <ul>
+     *            <li> if true, throw an exception with code
+     *            [EMAIL PROTECTED] 
WikiManagerException#ERROR_WIKIMANAGER_SERVER_DOES_NOT_EXIST}
+     *            <li> if false, return new document unsaved
+     *            </ul>
+     * @return a wiki descriptor document.
+     * @throws XWikiException
+     */
     public XWikiServer getWiki(String wikiName, XWikiContext context, boolean 
validate)
         throws XWikiException
     {
         return XWikiServerClass.getInstance(context).getWikiServer(wikiName, 
context, validate);
     }
 
+    /**
+     * Get all wiki descriptors documents.
+     * 
+     * @param context the XWiki context.
+     * @return a list of XWikiDocuments.
+     * @throws XWikiException
+     */
     public List getWikiDocumentList(XWikiContext context) throws XWikiException
     {
         return 
XWikiServerClass.getInstance(context).searchItemDocuments(context);
     }
-    
+
+    /**
+     * Get all the wikis descriptors documents.
+     * 
+     * @param context the XWiki context.
+     * @return a list of XWikiServer.
+     * @throws XWikiException
+     */
     public List getWikiList(XWikiContext context) throws XWikiException
     {
         List documentList = getWikiDocumentList(context);
@@ -377,12 +508,20 @@
         List applicationList = new ArrayList(documentList.size());
 
         for (Iterator it = documentList.iterator(); it.hasNext();) {
-            
applicationList.add(XWikiServerClass.getInstance(context).newSuperDocument((XWikiDocument)
 it.next(), context));
+            
applicationList.add(XWikiServerClass.getInstance(context).newSuperDocument(
+                (XWikiDocument) it.next(), context));
         }
 
         return applicationList;
     }
 
+    /**
+     * Indicate of wiki descriptor document exist.
+     * 
+     * @param wikiName the name of the wiki.
+     * @param context the XWiki context.
+     * @return true if wiki descriptor exist, false if not.
+     */
     public boolean isWikiExist(String wikiName, XWikiContext context)
     {
         try {
@@ -395,12 +534,40 @@
     // 
////////////////////////////////////////////////////////////////////////////
     // Template management
 
+    /**
+     * Get template wiki descriptor document.
+     * <p>
+     * A template wiki is a wiki which the XWiki.XWikiServerClass "visibility" 
field is set to
+     * "template".
+     * 
+     * @param wikiName the name of the template wiki.
+     * @param context the XWiki context.
+     * @param validate when wiki descriptor document does not exist :
+     *            <ul>
+     *            <li> if true, throw an exception with code
+     *            [EMAIL PROTECTED] 
WikiManagerException#ERROR_WIKIMANAGER_SERVER_DOES_NOT_EXIST}
+     *            <li> if false, return new document unsaved
+     *            </ul>
+     * @return a wiki descriptor document.
+     * @throws XWikiException
+     */
     public XWikiServer getWikiTemplate(String wikiName, XWikiContext context, 
boolean validate)
         throws XWikiException
     {
-        return 
XWikiServerClass.getInstance(context).getWikiTemplateServer(wikiName, context, 
validate);
+        return 
XWikiServerClass.getInstance(context).getWikiTemplateServer(wikiName, context,
+            validate);
     }
 
+    /**
+     * Get all the templates wikis descriptors documents.
+     * <p>
+     * A template wiki is a wiki which the XWiki.XWikiServerClass "visibility" 
field is set to
+     * "template".
+     * 
+     * @param context the XWiki context.
+     * @return a list of XWikiServer.
+     * @throws XWikiException
+     */
     public List getWikiTemplateList(XWikiContext context) throws XWikiException
     {
         return 
XWikiServerClass.getInstance(context).searchItemDocumentsByField(
@@ -408,6 +575,18 @@
             "StringProperty", context);
     }
 
+    /**
+     * Create a template wiki. The new template wiki is initialized with 
provided xar package.
+     * <p>
+     * A template wiki is a wiki which the XWiki.XWikiServerClass "visibility" 
field is set to
+     * "template".
+     * 
+     * @param wikiSuperDocument a wiki descriptor document from which the new 
template wiki
+     *            descriptor document will be created.
+     * @param packageName the name of the attached XAR file to import in the 
new template wiki.
+     * @param context the XWiki context.
+     * @throws XWikiException
+     */
     public void createWikiTemplate(XWikiServer wikiSuperDocument, String 
packageName,
         XWikiContext context) throws XWikiException
     {

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
    2007-10-03 13:56:50 UTC (rev 5250)
+++ 
xwiki-platform/xwiki-plugins/trunk/wiki-manager/src/main/java/com/xpn/xwiki/plugin/wikimanager/WikiManagerException.java
    2007-10-03 14:34:45 UTC (rev 5251)
@@ -38,6 +38,8 @@
     
     public static final int ERROR_WIKIMANAGER_WIKI_NAME_FORBIDDEN = 50035;
     
+    public static final int ERROR_WIKIMANAGER_XWIKI_NOT_VIRTUAL = 50036;
+    
     ////////
     
     public WikiManagerException(int code, String message)

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

Reply via email to