[MCHANGES-285] SAXException parsing JIRA XML from JIRA 5.1 

Submitted by: Ton Swieb
Reviewed by: Dennis Lundberg

Add smarts to make the handling of a single version faster when using JQL.

git-svn-id: https://svn.apache.org/repos/asf/maven/plugins/trunk@1379888 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/src/main/java/org/apache/maven/plugin/jira/AbstractJiraDownloader.java b/src/main/java/org/apache/maven/plugin/jira/AbstractJiraDownloader.java
index 5dfc0ed..962da47 100644
--- a/src/main/java/org/apache/maven/plugin/jira/AbstractJiraDownloader.java
+++ b/src/main/java/org/apache/maven/plugin/jira/AbstractJiraDownloader.java
@@ -34,6 +34,7 @@
 import org.apache.commons.httpclient.params.HttpClientParams;
 import org.apache.maven.plugin.MojoExecutionException;
 import org.apache.maven.plugin.issues.Issue;
+import org.apache.maven.plugin.issues.IssueUtils;
 import org.apache.maven.plugin.logging.Log;
 import org.apache.maven.project.MavenProject;
 import org.apache.maven.settings.Proxy;
@@ -103,6 +104,10 @@
     private Settings settings;
     /** Use JQL, JIRA query language, instead of URL parameter based queries */
     private boolean useJql;
+    /** Filter the JIRA query based on the current version */
+    private boolean onlyCurrentVersion;
+    /** The versionPrefix to apply to the POM version */
+    private String versionPrefix;
     /** The pattern used to parse dates from the JIRA xml file. */
     protected String jiraDatePattern;
 
@@ -267,7 +272,27 @@
      */
     protected String getFixFor()
     {
-        return null;
+        if ( onlyCurrentVersion && useJql )
+        {
+            // Let JIRA do the filtering of the current version instead of the JIRA mojo.
+            // This way JIRA returns less issues and we do not run into the "nbEntriesMax" limit that easily.
+
+            String version = ( versionPrefix == null ? "" : versionPrefix ) + project.getVersion();
+
+            // Remove "-SNAPSHOT" from the end of the version, if it's there
+            if ( version != null && version.endsWith( IssueUtils.SNAPSHOT_SUFFIX ) )
+            {
+                return version.substring( 0, version.length() - IssueUtils.SNAPSHOT_SUFFIX.length() );
+            }
+            else
+            {
+                return version;
+            }
+        }
+        else
+        {
+            return null;
+        }
     }
 
     /**
@@ -769,4 +794,24 @@
 	{
 		this.useJql = useJql;
 	}
+
+	public boolean isOnlyCurrentVersion()
+	{
+		return onlyCurrentVersion;
+	}
+
+	public void setOnlyCurrentVersion(boolean onlyCurrentVersion)
+	{
+		this.onlyCurrentVersion = onlyCurrentVersion;
+	}
+
+	public String getVersionPrefix()
+	{
+		return versionPrefix;
+	}
+
+	public void setVersionPrefix(String versionPrefix)
+	{
+		this.versionPrefix = versionPrefix;
+	}
 }
diff --git a/src/main/java/org/apache/maven/plugin/jira/JiraMojo.java b/src/main/java/org/apache/maven/plugin/jira/JiraMojo.java
index 2cedc4e..6b82c49 100644
--- a/src/main/java/org/apache/maven/plugin/jira/JiraMojo.java
+++ b/src/main/java/org/apache/maven/plugin/jira/JiraMojo.java
@@ -435,6 +435,10 @@
         issueDownloader.setSettings( settings );
 
         issueDownloader.setUseJql( useJql );
+        
+        issueDownloader.setOnlyCurrentVersion( onlyCurrentVersion );
+        
+        issueDownloader.setVersionPrefix( versionPrefix );
     }
 
     public void setMockDownloader( AbstractJiraDownloader mockDownloader )