diff --git a/pom.xml b/pom.xml
index b603090..5f5d0c1 100644
--- a/pom.xml
+++ b/pom.xml
@@ -29,13 +29,13 @@
classes
provided
-
+
diff --git a/src/main/java/de/jwi/jspwiki/migrate/Migrator.java b/src/main/java/de/jwi/jspwiki/migrate/Migrator.java
index 0c6e9a0..a35a0d9 100644
--- a/src/main/java/de/jwi/jspwiki/migrate/Migrator.java
+++ b/src/main/java/de/jwi/jspwiki/migrate/Migrator.java
@@ -18,15 +18,15 @@
package de.jwi.jspwiki.migrate;
+import java.io.Closeable;
+import java.io.IOException;
+import java.io.InputStream;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
-import java.util.List;
import java.util.Map;
import java.util.Properties;
-import javax.management.RuntimeErrorException;
-
import org.apache.wiki.PageManager;
import org.apache.wiki.WikiContext;
import org.apache.wiki.WikiEngine;
@@ -34,13 +34,19 @@
import org.apache.wiki.api.exceptions.PluginException;
import org.apache.wiki.api.plugin.InitializablePlugin;
import org.apache.wiki.api.plugin.WikiPlugin;
+import org.apache.wiki.attachment.Attachment;
+import org.apache.wiki.attachment.AttachmentManager;
import org.apache.wiki.event.WikiEngineEvent;
import org.apache.wiki.event.WikiEvent;
import org.apache.wiki.event.WikiEventListener;
import org.apache.wiki.event.WikiEventUtils;
+import org.apache.wiki.providers.BasicAttachmentProvider;
+import org.apache.wiki.providers.VersioningFileProvider;
+import org.apache.wiki.providers.WikiAttachmentProvider;
import org.apache.wiki.providers.WikiPageProvider;
-import de.jwi.jspwiki.git.GitFileProvider;
+
+
public class Migrator implements WikiPlugin,InitializablePlugin,WikiEventListener
{
@@ -67,7 +73,7 @@ public void initialize(WikiEngine engine) throws PluginException
}
- public String execute(WikiContext context, Map params) throws PluginException
+ public String execute(WikiContext context, @SuppressWarnings("rawtypes") Map map) throws PluginException
{
if (true)
{
@@ -81,7 +87,7 @@ public void actionPerformed(WikiEvent event)
System.out.println("Migrator.actionPerformed()");
Properties p = new Properties(wikiProperties);
- p.put(GitFileProvider.PROP_PAGEDIR, wikiProperties.getProperty("de.jwi.jspwiki.git.migrate.Migrator.pageDir"));
+ //p.put(GitFileProvider.PROP_PAGEDIR, wikiProperties.getProperty("de.jwi.jspwiki.git.migrate.Migrator.pageDir"));
try
{
@@ -95,16 +101,20 @@ public void actionPerformed(WikiEvent event)
private void migrate(Properties properties) throws Exception
{
- GitFileProvider gitFileProvider = new GitFileProvider();
- gitFileProvider.initialize(engine, properties);
+ VersioningFileProvider versioningFileProvider = new VersioningFileProvider();
+ versioningFileProvider.initialize(engine, properties);
+
+ BasicAttachmentProvider basicAttachmentProvider = new BasicAttachmentProvider();
+ basicAttachmentProvider.initialize(engine, properties);
PageManager pageManager = engine.getPageManager();
- Collection allPages = pageManager.getAllPages();
+ @SuppressWarnings("unchecked")
+ Collection allPages = pageManager.getAllPages();
- Iterator it = allPages.iterator();
+ Iterator it = allPages.iterator();
while (it.hasNext())
{
- WikiPage p = (WikiPage)it.next();
+ WikiPage p = it.next();
String pageName = p.getName();
@@ -114,17 +124,76 @@ private void migrate(Properties properties) throws Exception
int v = 1;
+ // migrate the versions of the page
while (v <= cv)
{
WikiPage pvi = pageManager.getPageInfo(pageName, v);
- String content = pageManager.getPageText(pageName, v);
+ String content = pageManager.getPageText(pageName, v); // here
+
+ try {
+ Thread.sleep(100); // too many open connections: sleep a bit
+ } catch (InterruptedException e) {
+ // nothing
+ }
System.out.println(String.format("%04d/%d %s", v, cv, pageName));
- gitFileProvider.putPageText(pvi, content);
+ versioningFileProvider.putPageText(pvi, content);
v++;
}
+
+ }
+
+ // migrate attachments
+ AttachmentManager attachmentManager = engine.getAttachmentManager();
+ WikiAttachmentProvider attProvider = attachmentManager.getCurrentProvider();
+ @SuppressWarnings("unchecked")
+ Collection allAttachments = attachmentManager.getAllAttachments();
+
+ Iterator attIt = allAttachments.iterator();
+ while (attIt.hasNext()) {
+ Attachment att = (Attachment) attIt.next();
+
+ String attName = att.getName();
+
+ int latestVersion = att.getVersion();
+ int currentVersion = 1;
+
+ while (currentVersion <= latestVersion) {
+ Attachment attV = attachmentManager.getAttachmentInfo(
+ attName, currentVersion);
+
+ InputStream attachmentData = null;
+ try {
+ attachmentData = attProvider.getAttachmentData(attV);
+
+ System.out.println(String.format("%04d/%d %s", currentVersion, latestVersion, attName));
+
+ basicAttachmentProvider.putAttachmentData(att, attachmentData);
+ } finally {
+ close(attachmentData);
+ }
+
+ try {
+ Thread.sleep(100); // too many open connections: sleep a bit
+ } catch (InterruptedException e) {
+ // nothing
+ }
+
+
+ ++currentVersion;
+ }
+ }
+ }
+
+ private void close(Closeable cl) {
+ if (cl != null) {
+ try {
+ cl.close();
+ } catch (IOException e) {
+ // ignore
+ }
}
}
}