[MCHANGES-419] Make IssueAdapter#getReleases return releases in a sensible order

Closes #29
diff --git a/src/main/java/org/apache/maven/plugins/changes/IssueAdapter.java b/src/main/java/org/apache/maven/plugins/changes/IssueAdapter.java
index 5443e21..34923a9 100644
--- a/src/main/java/org/apache/maven/plugins/changes/IssueAdapter.java
+++ b/src/main/java/org/apache/maven/plugins/changes/IssueAdapter.java
@@ -23,6 +23,7 @@
 import java.util.List;
 import java.util.Map;
 
+import org.apache.maven.artifact.versioning.ComparableVersion;
 import org.apache.maven.plugins.changes.model.Action;
 import org.apache.maven.plugins.changes.model.Release;
 import org.apache.maven.plugins.issues.Issue;
@@ -85,8 +86,15 @@
             }
         }
 
-        // Extract the releases from the Map to a List
-        return new ArrayList<>(releasesMap.values());
+        // Extract the releases from the Map to a sorted List. Releases are sorted by descending order of version.
+        List<Release> allReleases = new ArrayList<>(releasesMap.values());
+        allReleases.sort((release1, release2) -> {
+            ComparableVersion version1 = new ComparableVersion(release1.getVersion());
+            ComparableVersion version2 = new ComparableVersion(release2.getVersion());
+            return version2.compareTo(version1);
+        });
+
+        return allReleases;
     }
 
     /**
diff --git a/src/test/java/org/apache/maven/plugins/changes/IssueAdapterTest.java b/src/test/java/org/apache/maven/plugins/changes/IssueAdapterTest.java
index 0126a77..f421475 100644
--- a/src/test/java/org/apache/maven/plugins/changes/IssueAdapterTest.java
+++ b/src/test/java/org/apache/maven/plugins/changes/IssueAdapterTest.java
@@ -18,8 +18,12 @@
  */
 package org.apache.maven.plugins.changes;
 
+import java.util.Arrays;
+import java.util.List;
+
 import junit.framework.TestCase;
 import org.apache.maven.plugins.changes.model.Action;
+import org.apache.maven.plugins.changes.model.Release;
 import org.apache.maven.plugins.issues.Issue;
 import org.apache.maven.plugins.issues.IssueManagementSystem;
 import org.apache.maven.plugins.jira.JIRAIssueManagmentSystem;
@@ -105,11 +109,45 @@
     }
 
     private Issue createIssue(String key, String type) {
+        return createIssue(key, type, null);
+    }
+
+    private Issue createIssue(String key, String type, String version) {
         Issue issue = new Issue();
         issue.setKey(key);
         issue.setType(type);
+        if (version != null) {
+            issue.addFixVersion(version);
+        }
+
         issue.setAssignee("A User");
         issue.setSummary("The title of this issue");
         return issue;
     }
+
+    public void testReleaseOrder() {
+        IssueManagementSystem ims = new JIRAIssueManagmentSystem();
+        ims.getIssueTypeMap().put("Story", IssueType.ADD);
+        ims.getIssueTypeMap().put("Epic", IssueType.ADD);
+        ims.getIssueTypeMap().put("Defect", IssueType.FIX);
+        ims.getIssueTypeMap().put("Error", IssueType.FIX);
+        IssueAdapter adapter = new IssueAdapter(ims);
+
+        List<Issue> issues = Arrays.asList(
+                createIssue("TST-1", "Story", "1.0.0-alpha"),
+                createIssue("TST-2", "Epic", "1.2.1"),
+                createIssue("TST-3", "Error", "0.1.1"),
+                createIssue("TST-4", "Defect", "3.0"),
+                createIssue("TST-5", "Improvement", "4"),
+                createIssue("TST-6", "Epic", "0.1.1"));
+
+        List<Release> releases = adapter.getReleases(issues);
+
+        assertEquals(releases.size(), 5);
+        assertEquals(releases.get(0).getVersion(), "4");
+        assertEquals(releases.get(1).getVersion(), "3.0");
+        assertEquals(releases.get(2).getVersion(), "1.2.1");
+        assertEquals(releases.get(3).getVersion(), "1.0.0-alpha");
+        assertEquals(releases.get(4).getVersion(), "0.1.1");
+    }
 }