r1031 - in xwiki/trunk/src: main/java/com/xpn/xwiki/plugin/packaging test/java/com/xpn/xwiki/test
Jeremi Joslin
jeremi at users.forge.objectweb.org
Fri Apr 7 07:51:58 CEST 2006
Author: jeremi
Date: 2006-04-07 07:51:57 +0200 (Fri, 07 Apr 2006)
New Revision: 1031
Added:
xwiki/trunk/src/main/java/com/xpn/xwiki/plugin/packaging/DocumentFilter.java
xwiki/trunk/src/main/java/com/xpn/xwiki/plugin/packaging/ExcludeDocumentException.java
Modified:
xwiki/trunk/src/main/java/com/xpn/xwiki/plugin/packaging/Package.java
xwiki/trunk/src/main/java/com/xpn/xwiki/plugin/packaging/PackageAPI.java
xwiki/trunk/src/main/java/com/xpn/xwiki/plugin/packaging/PackageException.java
xwiki/trunk/src/test/java/com/xpn/xwiki/test/PackageTest.java
Log:
XWA-49 Implement Filter in Package System
Added: xwiki/trunk/src/main/java/com/xpn/xwiki/plugin/packaging/DocumentFilter.java
===================================================================
--- xwiki/trunk/src/main/java/com/xpn/xwiki/plugin/packaging/DocumentFilter.java 2006-04-07 05:47:33 UTC (rev 1030)
+++ xwiki/trunk/src/main/java/com/xpn/xwiki/plugin/packaging/DocumentFilter.java 2006-04-07 05:51:57 UTC (rev 1031)
@@ -0,0 +1,38 @@
+/*
+ * Copyright 2006, XpertNet SARL, and individual contributors as indicated
+ * by the contributors.txt.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ *
+ * @author jeremi
+ */
+
+package com.xpn.xwiki.plugin.packaging;
+
+import com.xpn.xwiki.doc.XWikiDocument;
+import com.xpn.xwiki.XWikiContext;
+
+public interface DocumentFilter {
+
+ /**
+ * Do actions at the import or export on a document. For example, remove
+ * comments or attachments, do some security check.
+ *
+ * @param doc document you want to filter
+ * @param context xwiki context
+ */
+ public void filter(XWikiDocument doc, XWikiContext context) throws ExcludeDocumentException;
+}
Added: xwiki/trunk/src/main/java/com/xpn/xwiki/plugin/packaging/ExcludeDocumentException.java
===================================================================
--- xwiki/trunk/src/main/java/com/xpn/xwiki/plugin/packaging/ExcludeDocumentException.java 2006-04-07 05:47:33 UTC (rev 1030)
+++ xwiki/trunk/src/main/java/com/xpn/xwiki/plugin/packaging/ExcludeDocumentException.java 2006-04-07 05:51:57 UTC (rev 1031)
@@ -0,0 +1,26 @@
+/*
+ * Copyright 2006, XpertNet SARL, and individual contributors as indicated
+ * by the contributors.txt.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ *
+ * @author jeremi
+ */
+package com.xpn.xwiki.plugin.packaging;
+
+public class ExcludeDocumentException extends Exception{
+
+}
Modified: xwiki/trunk/src/main/java/com/xpn/xwiki/plugin/packaging/Package.java
===================================================================
--- xwiki/trunk/src/main/java/com/xpn/xwiki/plugin/packaging/Package.java 2006-04-07 05:47:33 UTC (rev 1030)
+++ xwiki/trunk/src/main/java/com/xpn/xwiki/plugin/packaging/Package.java 2006-04-07 05:51:57 UTC (rev 1031)
@@ -69,6 +69,7 @@
private List customMappingFiles = null;
private boolean backupPack = false;
private boolean withVersions = true;
+ private List documentFilters = new ArrayList();
public static final int OK = 0;
public static final int Right = 1;
@@ -139,6 +140,13 @@
this.withVersions = withVersions;
}
+ public void addDocumentFilter(Object filter) throws PackageException {
+ if (filter instanceof DocumentFilter)
+ this.documentFilters.add(filter);
+ else
+ throw new PackageException(PackageException.ERROR_PACKAGE_INVALID_FILTER, "Invalid Document Filter");
+ }
+
public Package()
{
files = new ArrayList();
@@ -160,13 +168,23 @@
return true;
}
}
- DocumentInfo docinfo = new DocumentInfo(doc);
- docinfo.setAction(defaultAction);
- files.add(docinfo);
- BaseClass bclass = doc.getxWikiClass();
- if (bclass.getCustomMapping()!=null)
- customMappingFiles.add(docinfo);
- return true;
+
+ doc = (XWikiDocument) doc.clone();
+
+ try {
+ filter(doc, context);
+
+ DocumentInfo docinfo = new DocumentInfo(doc);
+ docinfo.setAction(defaultAction);
+ files.add(docinfo);
+ BaseClass bclass = doc.getxWikiClass();
+ if (bclass.getCustomMapping()!=null)
+ customMappingFiles.add(docinfo);
+ return true;
+ } catch (ExcludeDocumentException e) {
+ log.info("Skip the document " + doc.getFullName());
+ return false;
+ }
}
public boolean add(XWikiDocument doc, XWikiContext context) throws XWikiException {
@@ -209,6 +227,11 @@
return add(docFullName, language, DocumentInfo.ACTION_NOT_DEFINED, context);
}
+ public void filter(XWikiDocument doc, XWikiContext context) throws ExcludeDocumentException {
+ for (int i = 0; i < documentFilters.size(); i++)
+ ((DocumentFilter)documentFilters.get(i)).filter(doc, context);
+ }
+
public String export(OutputStream os, XWikiContext context) throws IOException, XWikiException {
if (files.size() == 0)
{
@@ -219,7 +242,8 @@
for (int i = 0; i < files.size(); i++)
{
DocumentInfo docinfo = (DocumentInfo) files.get(i);
- addToZip(docinfo.getDoc(), zos, withVersions, context);
+ XWikiDocument doc = docinfo.getDoc();
+ addToZip(doc, zos, withVersions, context);
}
addInfosToZip(zos);
zos.finish();
@@ -239,7 +263,8 @@
for (int i = 0; i < files.size(); i++)
{
DocumentInfo docinfo = (DocumentInfo) files.get(i);
- addToDir(docinfo.getDoc(), dir, withVersions, context);
+ XWikiDocument doc = docinfo.getDoc();
+ addToDir(doc, dir, withVersions, context);
}
addInfosToDir(dir);
return "";
@@ -264,10 +289,15 @@
continue;
else {
XWikiDocument doc = readFromXML(readFromInputStream(zis));
- if (documentExistInPackageFile(doc.getFullName(), doc.getLanguage(), description))
- this.add(doc, context);
- else
- throw new PackageException(PackageException.ERROR_XWIKI_UNKNOWN, "document does not exist in package definition");
+ try {
+ filter(doc, context);
+ if (documentExistInPackageFile(doc.getFullName(), doc.getLanguage(), description))
+ this.add(doc, context);
+ else
+ throw new PackageException(PackageException.ERROR_XWIKI_UNKNOWN, "document " + doc.getFullName() + " does not exist in package definition");
+ } catch (ExcludeDocumentException e) {
+ log.info("Skip the document '" + doc.getFullName() + "'");
+ }
}
}
updateFileInfos(description);
@@ -632,10 +662,16 @@
authorName = getElementText(infosEl, "author");
version = getElementText(infosEl, "version");
backupPack = new Boolean(getElementText(infosEl, "backupPack")).booleanValue();
+
+
return domdoc;
}
+ protected void readDependencies()
+ {
+ }
+
public void addAllWikiDocuments(XWikiContext context) throws XWikiException {
XWiki wiki = context.getWiki();
List spaces = wiki.getSpaces(context);
Modified: xwiki/trunk/src/main/java/com/xpn/xwiki/plugin/packaging/PackageAPI.java
===================================================================
--- xwiki/trunk/src/main/java/com/xpn/xwiki/plugin/packaging/PackageAPI.java 2006-04-07 05:47:33 UTC (rev 1030)
+++ xwiki/trunk/src/main/java/com/xpn/xwiki/plugin/packaging/PackageAPI.java 2006-04-07 05:51:57 UTC (rev 1031)
@@ -111,6 +111,10 @@
plugin.setWithVersions(withVersions);
}
+ public void addDocumentFilter(Object filter) throws PackageException {
+ plugin.addDocumentFilter(filter);
+ }
+
public List getFiles() {
List files = plugin.getFiles();
ArrayList APIfiles = new ArrayList(files.size());
Modified: xwiki/trunk/src/main/java/com/xpn/xwiki/plugin/packaging/PackageException.java
===================================================================
--- xwiki/trunk/src/main/java/com/xpn/xwiki/plugin/packaging/PackageException.java 2006-04-07 05:47:33 UTC (rev 1030)
+++ xwiki/trunk/src/main/java/com/xpn/xwiki/plugin/packaging/PackageException.java 2006-04-07 05:51:57 UTC (rev 1031)
@@ -30,6 +30,7 @@
static String plugName = "Package";
public static final int ERROR_PACKAGE_UNKNOWN = 1;
public static final int ERROR_PACKAGE_NODESCRIPTION = 2;
+ public static final int ERROR_PACKAGE_INVALID_FILTER = 3;
public PackageException(int code, String message, Throwable e, Object[] args)
{
Modified: xwiki/trunk/src/test/java/com/xpn/xwiki/test/PackageTest.java
===================================================================
--- xwiki/trunk/src/test/java/com/xpn/xwiki/test/PackageTest.java 2006-04-07 05:47:33 UTC (rev 1030)
+++ xwiki/trunk/src/test/java/com/xpn/xwiki/test/PackageTest.java 2006-04-07 05:51:57 UTC (rev 1031)
@@ -34,9 +34,10 @@
import org.apache.velocity.VelocityContext;
import com.xpn.xwiki.XWikiException;
+import com.xpn.xwiki.XWikiContext;
import com.xpn.xwiki.doc.XWikiAttachment;
import com.xpn.xwiki.doc.XWikiDocument;
-import com.xpn.xwiki.plugin.packaging.DocumentInfo;
+import com.xpn.xwiki.plugin.packaging.*;
import com.xpn.xwiki.plugin.packaging.Package;
@@ -143,6 +144,29 @@
testOverwrite(myOtherPackage);
}
+ public void testFilter() throws XWikiException, IOException {
+ Package myPackage = new Package();
+ ByteArrayOutputStream os = new ByteArrayOutputStream();
+
+ try {
+ myPackage.addDocumentFilter(new testFilter());
+ } catch (PackageException e) {
+ fail("the filter should be added without exception");
+ }
+ myPackage.add("Test.first", getXWikiContext());
+ myPackage.add("Test.third", getXWikiContext());
+ myPackage.export(os, getXWikiContext());
+
+ //check if the filter does not impact the wiki
+ XWikiDocument doc = getXWikiContext().getWiki().getDocument("Test.first_filtered", getXWikiContext());
+ assertTrue(doc.isNew());
+
+ Package myOtherPackage = new Package();
+ myOtherPackage.Import(os.toByteArray(), getXWikiContext());
+ testDocName("Test.first_filtered", myOtherPackage.getFiles());
+ testDocName("Test.third_filtered", myOtherPackage.getFiles());
+ }
+
public void testImportPackage(Package pack) throws XWikiException {
// Setup database xwikitest2
getXWikiContext().setDatabase("xwikitest2");
@@ -158,7 +182,6 @@
doc = getXWikiContext().getWiki().getDocument("Test.third", getXWikiContext());
assertFalse(doc.isNew());
-
}
public void testOverwrite(Package pack) throws XWikiException {
@@ -473,4 +496,16 @@
assertEquals(myPackage.isBackupPack(), true);
}
+
+
+
+
+ private class testFilter implements DocumentFilter {
+
+ public void filter(XWikiDocument doc, XWikiContext context) throws ExcludeDocumentException {
+ doc.setName(doc.getName() + "_filtered");
+ }
+ }
+
+
}
More information about the Xwiki-notifications
mailing list