Dokuwiki DiscussionConverter uses email when user id is omitted in comments file
diff --git a/sampleData/dokuwiki/junit_resources/meta/SampleDokuwiki-InputDiscussion_noid.comments b/sampleData/dokuwiki/junit_resources/meta/SampleDokuwiki-InputDiscussion_noid.comments
new file mode 100644
index 0000000..07b76ef
--- /dev/null
+++ b/sampleData/dokuwiki/junit_resources/meta/SampleDokuwiki-InputDiscussion_noid.comments
@@ -0,0 +1,7 @@
+a:5:{s:5:"title";N;s:6:"status";i:1;s:8:"comments";a:1:{s:32:"4df1fa69356ef92dd48fca5f004b3dc5";a:8:{s:4:"user";a:5:{s:4:"name";s:15:"Myrna Loy";s:4:"mail";s:15:"myrnaloy@thinman.org";s:7:"address";s:0:"";s:3:"url";s:0:"";}s:4:"date";a:1:{s:7:"created";i:1333093999;}s:4:"show";b:1;s:3:"raw";s:65:"Testing 123";s:5:"xhtml";s:77:"
+<p>
+Asta!
+
+</p>
+";s:6:"parent";N;s:7:"replies";a:0:{}s:3:"cid";s:32:"4df1fa69356ef92dd48fca5f004b3dc5";}}s:6:"number";i:1;s:11:"subscribers";N;}
+
diff --git a/sampleData/dokuwiki/junit_resources/pages/SampleDokuwiki-InputDiscussion_noid.txt b/sampleData/dokuwiki/junit_resources/pages/SampleDokuwiki-InputDiscussion_noid.txt
new file mode 100644
index 0000000..2d74a4f
--- /dev/null
+++ b/sampleData/dokuwiki/junit_resources/pages/SampleDokuwiki-InputDiscussion_noid.txt
@@ -0,0 +1,4 @@
+Removing Discussion plugin
+http://www.dokuwiki.org/plugin:discussion
+
+~~DISCUSSION~~
diff --git a/sampleData/mediawiki/mediawikitests.properties b/sampleData/mediawiki/mediawikitests.properties
index 4655350..d3db9d2 100644
--- a/sampleData/mediawiki/mediawikitests.properties
+++ b/sampleData/mediawiki/mediawikitests.properties
@@ -16,10 +16,10 @@
password=admin
wikitype=mediawiki
## All pages
-pages=/Users/laura/Code/Subversion/uwc-spac/devel/sampleData/mediawiki/SampleMediawiki-Input1.txt::/Users/laura/Code/Subversion/uwc-spac/devel/sampleData/mediawiki/SampleMediawiki-Input10.txt::/Users/laura/Code/Subversion/uwc-spac/devel/sampleData/mediawiki/SampleMediawiki-Input11.txt::/Users/laura/Code/Subversion/uwc-spac/devel/sampleData/mediawiki/SampleMediawiki-Input12.txt::/Users/laura/Code/Subversion/uwc-spac/devel/sampleData/mediawiki/SampleMediawiki-Input13.txt::/Users/laura/Code/Subversion/uwc-spac/devel/sampleData/mediawiki/SampleMediawiki-Input14.txt::/Users/laura/Code/Subversion/uwc-spac/devel/sampleData/mediawiki/SampleMediawiki-Input2.txt::/Users/laura/Code/Subversion/uwc-spac/devel/sampleData/mediawiki/SampleMediawiki-Input3.txt::/Users/laura/Code/Subversion/uwc-spac/devel/sampleData/mediawiki/SampleMediawiki-Input4.txt::/Users/laura/Code/Subversion/uwc-spac/devel/sampleData/mediawiki/SampleMediawiki-Input5.txt::/Users/laura/Code/Subversion/uwc-spac/devel/sampleData/mediawiki/SampleMediawiki-Input6.txt::/Users/laura/Code/Subversion/uwc-spac/devel/sampleData/mediawiki/SampleMediawiki-Input8.txt::/Users/laura/Code/Subversion/uwc-spac/devel/sampleData/mediawiki/SampleMediawiki-Input9.txt::/Users/laura/Code/Subversion/uwc-spac/devel/sampleData/mediawiki/SampleMediawiki-InputBasicHtml.txt::/Users/laura/Code/Subversion/uwc-spac/devel/sampleData/mediawiki/SampleMediawiki-InputBild.txt::/Users/laura/Code/Subversion/uwc-spac/devel/sampleData/mediawiki/SampleMediawiki-InputCode.txt::/Users/laura/Code/Subversion/uwc-spac/devel/sampleData/mediawiki/SampleMediawiki-InputDefList.txt::/Users/laura/Code/Subversion/uwc-spac/devel/sampleData/mediawiki/SampleMediawiki-InputEncoded%C3%A5%C3%A4%C3%B6.txt::/Users/laura/Code/Subversion/uwc-spac/devel/sampleData/mediawiki/SampleMediawiki-InputEscBrace.txt::/Users/laura/Code/Subversion/uwc-spac/devel/sampleData/mediawiki/SampleMediawiki-InputEscBrace2.txt::/Users/laura/Code/Subversion/uwc-spac/devel/sampleData/mediawiki/SampleMediawiki-InputHeaderEq.txt::/Users/laura/Code/Subversion/uwc-spac/devel/sampleData/mediawiki/SampleMediawiki-InputHtml2Macro.txt::/Users/laura/Code/Subversion/uwc-spac/devel/sampleData/mediawiki/SampleMediawiki-InputHtmlHeader.txt::/Users/laura/Code/Subversion/uwc-spac/devel/sampleData/mediawiki/SampleMediawiki-InputHtmlInvalid.txt::/Users/laura/Code/Subversion/uwc-spac/devel/sampleData/mediawiki/SampleMediawiki-InputHtmlList.txt::/Users/laura/Code/Subversion/uwc-spac/devel/sampleData/mediawiki/SampleMediawiki-InputHtmlTable.txt::/Users/laura/Code/Subversion/uwc-spac/devel/sampleData/mediawiki/SampleMediawiki-InputImagePx.txt::/Users/laura/Code/Subversion/uwc-spac/devel/sampleData/mediawiki/SampleMediawiki-InputImageSize.txt::/Users/laura/Code/Subversion/uwc-spac/devel/sampleData/mediawiki/SampleMediawiki-InputLabel.txt::/Users/laura/Code/Subversion/uwc-spac/devel/sampleData/mediawiki/SampleMediawiki-InputLinkNamespaceIssue.txt::/Users/laura/Code/Subversion/uwc-spac/devel/sampleData/mediawiki/SampleMediawiki-InputLinkSpace.txt::/Users/laura/Code/Subversion/uwc-spac/devel/sampleData/mediawiki/SampleMediawiki-InputLinksWS.txt::/Users/laura/Code/Subversion/uwc-spac/devel/sampleData/mediawiki/SampleMediawiki-InputMailto.txt::/Users/laura/Code/Subversion/uwc-spac/devel/sampleData/mediawiki/SampleMediawiki-InputMath.txt::/Users/laura/Code/Subversion/uwc-spac/devel/sampleData/mediawiki/SampleMediawiki-InputMedia.txt::/Users/laura/Code/Subversion/uwc-spac/devel/sampleData/mediawiki/SampleMediawiki-InputSplist.txt::/Users/laura/Code/Subversion/uwc-spac/devel/sampleData/mediawiki/SampleMediawiki-InputTableCleanup.txt::/Users/laura/Code/Subversion/uwc-spac/devel/sampleData/mediawiki/SampleMediawiki-InputTableCurly.txt::/Users/laura/Code/Subversion/uwc-spac/devel/sampleData/mediawiki/SampleMediawiki-InputTableDollar.txt::/Users/laura/Code/Subversion/uwc-spac/devel/sampleData/mediawiki/SampleMediawiki-InputTableLines.txt::/Users/laura/Code/Subversion/uwc-spac/devel/sampleData/mediawiki/SampleMediawiki-InputTableList.txt::/Users/laura/Code/Subversion/uwc-spac/devel/sampleData/mediawiki/SampleMediawiki-InputTableSpan.txt::/Users/laura/Code/Subversion/uwc-spac/devel/sampleData/mediawiki/SampleMediawiki-InputUserDate.txt::/Users/laura/Code/Subversion/uwc-spac/devel/sampleData/mediawiki/SampleMediawiki-InputWikipedia.txt
+pages=/Users/laura/Code/Git/uwc/sampleData/mediawiki/SampleMediawiki-Input1.txt::/Users/laura/Code/Subversion/uwc-spac/devel/sampleData/mediawiki/SampleMediawiki-Input10.txt::/Users/laura/Code/Subversion/uwc-spac/devel/sampleData/mediawiki/SampleMediawiki-Input11.txt::/Users/laura/Code/Subversion/uwc-spac/devel/sampleData/mediawiki/SampleMediawiki-Input12.txt::/Users/laura/Code/Subversion/uwc-spac/devel/sampleData/mediawiki/SampleMediawiki-Input13.txt::/Users/laura/Code/Subversion/uwc-spac/devel/sampleData/mediawiki/SampleMediawiki-Input14.txt::/Users/laura/Code/Subversion/uwc-spac/devel/sampleData/mediawiki/SampleMediawiki-Input2.txt::/Users/laura/Code/Subversion/uwc-spac/devel/sampleData/mediawiki/SampleMediawiki-Input3.txt::/Users/laura/Code/Subversion/uwc-spac/devel/sampleData/mediawiki/SampleMediawiki-Input4.txt::/Users/laura/Code/Subversion/uwc-spac/devel/sampleData/mediawiki/SampleMediawiki-Input5.txt::/Users/laura/Code/Subversion/uwc-spac/devel/sampleData/mediawiki/SampleMediawiki-Input6.txt::/Users/laura/Code/Subversion/uwc-spac/devel/sampleData/mediawiki/SampleMediawiki-Input8.txt::/Users/laura/Code/Subversion/uwc-spac/devel/sampleData/mediawiki/SampleMediawiki-Input9.txt::/Users/laura/Code/Subversion/uwc-spac/devel/sampleData/mediawiki/SampleMediawiki-InputBasicHtml.txt::/Users/laura/Code/Subversion/uwc-spac/devel/sampleData/mediawiki/SampleMediawiki-InputBild.txt::/Users/laura/Code/Subversion/uwc-spac/devel/sampleData/mediawiki/SampleMediawiki-InputCode.txt::/Users/laura/Code/Subversion/uwc-spac/devel/sampleData/mediawiki/SampleMediawiki-InputDefList.txt::/Users/laura/Code/Subversion/uwc-spac/devel/sampleData/mediawiki/SampleMediawiki-InputEncoded%C3%A5%C3%A4%C3%B6.txt::/Users/laura/Code/Subversion/uwc-spac/devel/sampleData/mediawiki/SampleMediawiki-InputEscBrace.txt::/Users/laura/Code/Subversion/uwc-spac/devel/sampleData/mediawiki/SampleMediawiki-InputEscBrace2.txt::/Users/laura/Code/Subversion/uwc-spac/devel/sampleData/mediawiki/SampleMediawiki-InputHeaderEq.txt::/Users/laura/Code/Subversion/uwc-spac/devel/sampleData/mediawiki/SampleMediawiki-InputHtml2Macro.txt::/Users/laura/Code/Subversion/uwc-spac/devel/sampleData/mediawiki/SampleMediawiki-InputHtmlHeader.txt::/Users/laura/Code/Subversion/uwc-spac/devel/sampleData/mediawiki/SampleMediawiki-InputHtmlInvalid.txt::/Users/laura/Code/Subversion/uwc-spac/devel/sampleData/mediawiki/SampleMediawiki-InputHtmlList.txt::/Users/laura/Code/Subversion/uwc-spac/devel/sampleData/mediawiki/SampleMediawiki-InputHtmlTable.txt::/Users/laura/Code/Subversion/uwc-spac/devel/sampleData/mediawiki/SampleMediawiki-InputImagePx.txt::/Users/laura/Code/Subversion/uwc-spac/devel/sampleData/mediawiki/SampleMediawiki-InputImageSize.txt::/Users/laura/Code/Subversion/uwc-spac/devel/sampleData/mediawiki/SampleMediawiki-InputLabel.txt::/Users/laura/Code/Subversion/uwc-spac/devel/sampleData/mediawiki/SampleMediawiki-InputLinkNamespaceIssue.txt::/Users/laura/Code/Subversion/uwc-spac/devel/sampleData/mediawiki/SampleMediawiki-InputLinkSpace.txt::/Users/laura/Code/Subversion/uwc-spac/devel/sampleData/mediawiki/SampleMediawiki-InputLinksWS.txt::/Users/laura/Code/Subversion/uwc-spac/devel/sampleData/mediawiki/SampleMediawiki-InputMailto.txt::/Users/laura/Code/Subversion/uwc-spac/devel/sampleData/mediawiki/SampleMediawiki-InputMath.txt::/Users/laura/Code/Subversion/uwc-spac/devel/sampleData/mediawiki/SampleMediawiki-InputMedia.txt::/Users/laura/Code/Subversion/uwc-spac/devel/sampleData/mediawiki/SampleMediawiki-InputSplist.txt::/Users/laura/Code/Subversion/uwc-spac/devel/sampleData/mediawiki/SampleMediawiki-InputTableCleanup.txt::/Users/laura/Code/Subversion/uwc-spac/devel/sampleData/mediawiki/SampleMediawiki-InputTableCurly.txt::/Users/laura/Code/Subversion/uwc-spac/devel/sampleData/mediawiki/SampleMediawiki-InputTableDollar.txt::/Users/laura/Code/Subversion/uwc-spac/devel/sampleData/mediawiki/SampleMediawiki-InputTableLines.txt::/Users/laura/Code/Subversion/uwc-spac/devel/sampleData/mediawiki/SampleMediawiki-InputTableList.txt::/Users/laura/Code/Subversion/uwc-spac/devel/sampleData/mediawiki/SampleMediawiki-InputTableSpan.txt::/Users/laura/Code/Subversion/uwc-spac/devel/sampleData/mediawiki/SampleMediawiki-InputUserDate.txt::/Users/laura/Code/Subversion/uwc-spac/devel/sampleData/mediawiki/SampleMediawiki-InputWikipedia.txt
## Test UDMF
-#pages=/Users/laura/Code/Subversion/uwc-spac/devel/sampleData/mediawiki/SampleMediawiki-InputUserDate.txt
+#pages=/Users/laura/Code/Git/uwc/sampleData/mediawiki/SampleMediawiki-InputUserDate.txt
## Test Comments/Discussion properties
-#pages=/Users/laura/Code/Subversion/uwc-spac/devel/sampleData/mediawiki/Comments_Pages/Clacks.txt
+#pages=/Users/laura/Code/Git/uwc/sampleData/mediawiki/Comments_Pages/Clacks.txt
## Just one page
-#pages=/Users/laura/Code/Subversion/uwc-spac/devel/sampleData/mediawiki/SampleMediawiki-Input1.txt
+#pages=/Users/laura/Code/Git/uwc/sampleData/mediawiki/SampleMediawiki-Input1.txt
diff --git a/src/com/atlassian/uwc/converters/dokuwiki/DiscussionConverter.java b/src/com/atlassian/uwc/converters/dokuwiki/DiscussionConverter.java
index 3faf51e..5607731 100644
--- a/src/com/atlassian/uwc/converters/dokuwiki/DiscussionConverter.java
+++ b/src/com/atlassian/uwc/converters/dokuwiki/DiscussionConverter.java
@@ -99,20 +99,24 @@
}
Pattern commentP = Pattern.compile("" +
- "s:32:\"\\w{32,32}\";a:8:\\{s:4:\"user\";a:\\d:\\{s:2:\"id\";s:\\d+:\"([^\"]+)" + //username
+ "s:32:\"\\w{32,32}\";a:8:\\{s:4:\"user\";a:\\d+:\\{" +
+ "(?:s:2:(\"id\");s:\\d+:\"([^\"]+))?" + //id = username?
+ ".*?s:4:(\"mail\");s:\\d+:\"([^\"]+)" + //email = username?
".*?\\}s:4:\"date\\\";a:\\d:\\{.*?s:7:\"created\";i:(\\d+)" + //timestamp
".*?s:5:\"xhtml\";s:\\d+:\"(.*?)\";s:6:\"parent\";N;", //text
Pattern.DOTALL);
protected Comment parseComment(String input) {
Matcher commentFinder = commentP.matcher(input);
while (commentFinder.find()) {
- String creator = commentFinder.group(1);
- String timestamp = commentFinder.group(2);
- String text = commentFinder.group(3);
+ String creator = commentFinder.group(2); //username from id
+ if (creator == null) creator = commentFinder.group(4); //no id? username from mail
+ String timestamp = commentFinder.group(5);
+ String text = commentFinder.group(6);
timestamp = formatTimestamp(timestamp);
boolean isXhtml = true;
return new Comment(text, creator, timestamp, isXhtml);
}
+ addError(Feedback.CONVERTER_ERROR, "Problem finding comment for: " + input, false);
return null;
}
diff --git a/src/com/atlassian/uwc/converters/dokuwiki/DiscussionConverterTest.java b/src/com/atlassian/uwc/converters/dokuwiki/DiscussionConverterTest.java
index 61adc34..a0905d2 100644
--- a/src/com/atlassian/uwc/converters/dokuwiki/DiscussionConverterTest.java
+++ b/src/com/atlassian/uwc/converters/dokuwiki/DiscussionConverterTest.java
@@ -194,5 +194,24 @@
assertNotNull(page.getAllCommentData());
assertEquals(0, page.getAllCommentData().size());
+ }
+
+ public void testConvert_NoID() throws IOException {
+ String path = PAGESDIR+"/SampleDokuwiki-InputDiscussion_noid.txt";
+ File file = new File(path);
+ Page page = new Page(file);
+ page.setOriginalText(FileUtils.readTextFile(file));
+ tester.convert(page);
+ Vector<Comment> actual = page.getAllCommentData();
+ assertNotNull(actual);
+ for (Comment comment : actual) {
+ assertNotNull(comment);
+ assertEquals("myrnaloy@thinman.org", comment.creator);
+ assertEquals("\n" +
+ "<p>\n" +
+ "Asta!\n" +
+ "\n" +
+ "</p>\n", comment.text);
+ }
}
}
diff --git a/src/com/atlassian/uwc/converters/mediawiki/UserDateConverterTest.java b/src/com/atlassian/uwc/converters/mediawiki/UserDateConverterTest.java
index 0adb29a..a87d185 100644
--- a/src/com/atlassian/uwc/converters/mediawiki/UserDateConverterTest.java
+++ b/src/com/atlassian/uwc/converters/mediawiki/UserDateConverterTest.java
@@ -73,5 +73,29 @@
Date timestamp = page.getTimestamp();
assertNull(timestamp);
}
+
+ public void testConvert_ADdomain() {
+ String input, expected, actual;
+ input = "{user:ad\\foobar}\n" +
+ "{timestamp:20011231235959}\n" +
+ "Testing 123";
+ expected = "Testing 123";
+ Page page = new Page(null);
+ page.setOriginalText(input);
+ tester.convert(page);
+ actual = page.getConvertedText();
+ assertNotNull(actual);
+ assertEquals(expected, actual);
+
+ actual = page.getAuthor();
+ expected = "ad\\foobar";
+ assertNotNull(actual);
+ assertEquals(expected, actual);
+
+ Date timestamp = page.getTimestamp();
+ Date expTime = new Date(2001-1900, 11, 31, 23, 59, 59);
+ assertEquals(expTime.getTime(), timestamp.getTime());
+
+ }
}
diff --git a/src/com/atlassian/uwc/ui/ConverterEngine.java b/src/com/atlassian/uwc/ui/ConverterEngine.java
index 1c0bbd0..72da41a 100644
--- a/src/com/atlassian/uwc/ui/ConverterEngine.java
+++ b/src/com/atlassian/uwc/ui/ConverterEngine.java
@@ -1993,6 +1993,11 @@
log.debug("Sending comments for page: " + page.getName());
try {
for (Comment comment : page.getAllCommentData()) {
+ if (comment == null) {
+ log.error("Comment was null! SKIPPING");
+ this.errors.addError(Feedback.CONVERTER_ERROR, "Comment should not be null!", true);
+ continue;
+ }
//create page that broker can use
CommentForXmlRpc brokerComment = new CommentForXmlRpc();
brokerComment.setPageId(pageId);
@@ -2015,7 +2020,11 @@
}
} catch (Exception e) {
String errorMessage = null;
- if (e.getMessage().contains("NotPermittedException")) {
+ if (e.getMessage() == null) {
+ log.error("Problem with comments!", e);
+ return;
+ }
+ else if (e.getMessage().contains("NotPermittedException")) {
errorMessage = "User is not permitted to add comments to page: " + page.getName() + "'";
}
else if (e.getMessage().contains("does not exist")) {