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
[email protected]
http://lists.xwiki.org/mailman/listinfo/notifications