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")) {