Add change number to task output

Add change number to task output for tasks created by names-factory of
type change. This change makes it possible for Task UI to eventually
show change numbers as hyperlinks.

Change-Id: I349df88105ed012a072ba989dc7775b8fefeb497
diff --git a/src/main/java/com/googlesource/gerrit/plugins/task/TaskAttributeFactory.java b/src/main/java/com/googlesource/gerrit/plugins/task/TaskAttributeFactory.java
index d9ee1d4..41f87d2 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/task/TaskAttributeFactory.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/task/TaskAttributeFactory.java
@@ -51,6 +51,7 @@
     public String hint;
     public Boolean inProgress;
     public String name;
+    public Integer change;
     public Status status;
     public List<TaskAttribute> subTasks;
     public Long evaluationMilliSeconds;
@@ -138,6 +139,9 @@
         }
 
         if (applicable || !options.onlyApplicable) {
+          if (node.isChange()) {
+            attribute.change = node.getChangeData().getId().get();
+          }
           attribute.hasPass = task.pass != null || task.fail != null;
           attribute.subTasks = getSubTasks();
           attribute.status = getStatus();
diff --git a/src/main/java/com/googlesource/gerrit/plugins/task/TaskTree.java b/src/main/java/com/googlesource/gerrit/plugins/task/TaskTree.java
index cb92805..5746c10 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/task/TaskTree.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/task/TaskTree.java
@@ -315,6 +315,11 @@
                       public ChangeData getChangeData() {
                         return changeData;
                       }
+
+                      @Override
+                      public boolean isChange() {
+                        return true;
+                      }
                     });
           }
           return;
@@ -341,6 +346,10 @@
     protected Properties getProperties() {
       return properties;
     }
+
+    public boolean isChange() {
+      return false;
+    }
   }
 
   protected String resolveTaskFileName(String file) throws ConfigInvalidException {
diff --git a/src/main/resources/Documentation/test/preview.md b/src/main/resources/Documentation/test/preview.md
index 65f1285..1aeb649 100644
--- a/src/main/resources/Documentation/test/preview.md
+++ b/src/main/resources/Documentation/test/preview.md
@@ -235,6 +235,7 @@
          "subTasks" : [
             {
                "applicable" : true,
+               "change" : _change1_number,
                "hasPass" : true,
                "name" : "_change1_number",
                "status" : "FAIL",
@@ -251,6 +252,7 @@
                         },
                         {
                            "applicable" : true,
+                           "change" : _change2_number,
                            "hasPass" : true,
                            "name" : "_change2_number",
                            "status" : "FAIL",
@@ -279,6 +281,7 @@
             },
             {
                "applicable" : true,
+               "change" : _change2_number,
                "hasPass" : true,
                "name" : "_change2_number",
                "status" : "FAIL",
@@ -291,6 +294,7 @@
                      "subTasks" : [
                         {
                            "applicable" : true,
+                           "change" : _change1_number,
                            "hasPass" : true,
                            "name" : "_change1_number",
                            "status" : "FAIL",
@@ -645,6 +649,7 @@
          "subTasks" : [
             {
                "applicable" : true,
+               "change" : _change1_number,
                "hasPass" : true,
                "name" : "_change1_number",
                "status" : "FAIL",
@@ -661,6 +666,7 @@
                         },
                         {
                            "applicable" : true,
+                           "change" : _change2_number,
                            "hasPass" : true,
                            "name" : "_change2_number",
                            "status" : "FAIL",
@@ -689,6 +695,7 @@
             },
             {
                "applicable" : true,
+               "change" : _change2_number,
                "hasPass" : true,
                "name" : "_change2_number",
                "status" : "FAIL",
@@ -701,6 +708,7 @@
                      "subTasks" : [
                         {
                            "applicable" : true,
+                           "change" : _change1_number,
                            "hasPass" : true,
                            "name" : "_change1_number",
                            "status" : "FAIL",
diff --git a/src/main/resources/Documentation/test/task_states.md b/src/main/resources/Documentation/test/task_states.md
index 0290835..e9cc8b6 100644
--- a/src/main/resources/Documentation/test/task_states.md
+++ b/src/main/resources/Documentation/test/task_states.md
@@ -748,12 +748,14 @@
    "subTasks" : [
       {
          "applicable" : true,
+         "change" : _change1_number,
          "hasPass" : true,
          "name" : "_change1_number",
          "status" : "FAIL"
       },
       {
          "applicable" : true,
+         "change" : _change2_number,
          "hasPass" : true,
          "name" : "_change2_number",
          "status" : "FAIL"
@@ -866,6 +868,7 @@
    "subTasks" : [
       {
          "applicable" : true,
+         "change" : _change2_number,
          "hasPass" : false,
          "name" : "_change2_number",
          "status" : "WAITING",
@@ -878,6 +881,7 @@
                "subTasks" : [
                   {
                      "applicable" : true,
+                     "change" : _change1_number,
                      "hasPass" : false,
                      "name" : "_change1_number",
                      "status" : "WAITING",
@@ -1239,6 +1243,7 @@
    "subTasks" : [
       {
          "applicable" : true,
+         "change" : _change1_number,
          "hasPass" : true,
          "hint" : "Welcome to the pleasuredome Name(_change1_number) Change Number(_change1_number) Change Id(_change1_id) Change Project(_change1_project) Change Branch(_change1_branch) Change Status(_change1_status) Change Topic(_change1_topic)",
          "name" : "_change1_number",
@@ -1246,6 +1251,7 @@
       },
       {
          "applicable" : true,
+         "change" : _change2_number,
          "hasPass" : true,
          "name" : "_change2_number",
          "status" : "PASS"
@@ -1372,12 +1378,14 @@
    "subTasks" : [
       {
          "applicable" : true,
+         "change" : _change_number,
          "hasPass" : true,
          "name" : "_change_number",
          "status" : "FAIL"
       },
       {
          "applicable" : true,
+         "change" : _change1_number,
          "hasPass" : true,
          "name" : "_change1_number",
          "status" : "FAIL"
@@ -1435,12 +1443,14 @@
    "subTasks" : [
       {
          "applicable" : true,
+         "change" : _change_number,
          "hasPass" : true,
          "name" : "_change_number",
          "status" : "FAIL"
       },
       {
          "applicable" : true,
+         "change" : _change1_number,
          "hasPass" : true,
          "name" : "_change1_number",
          "status" : "FAIL"
@@ -1469,12 +1479,14 @@
    "subTasks" : [
       {
          "applicable" : true,
+         "change" : _change_number,
          "hasPass" : true,
          "name" : "_change_number",
          "status" : "FAIL"
       },
       {
          "applicable" : true,
+         "change" : _change1_number,
          "hasPass" : true,
          "name" : "_change1_number",
          "status" : "FAIL"
@@ -1502,12 +1514,14 @@
    "subTasks" : [
       {
          "applicable" : true,
+         "change" : _change_number,
          "hasPass" : true,
          "name" : "_change_number",
          "status" : "FAIL"
       },
       {
          "applicable" : true,
+         "change" : _change1_number,
          "hasPass" : true,
          "name" : "_change1_number",
          "status" : "FAIL"
@@ -1544,12 +1558,14 @@
          "subTasks" : [
             {
                "applicable" : true,
+               "change" : _change_number,
                "hasPass" : true,
                "name" : "_change_number",
                "status" : "FAIL"
             },
             {
                "applicable" : true,
+               "change" : _change1_number,
                "hasPass" : true,
                "name" : "_change1_number",
                "status" : "FAIL"
@@ -2043,6 +2059,7 @@
          "subTasks" : [
             {
                "applicable" : true,
+               "change" : _change1_number,
                "hasPass" : true,
                "name" : "_change1_number",
                "status" : "FAIL",
@@ -2059,6 +2076,7 @@
                         },
                         {
                            "applicable" : true,
+                           "change" : _change2_number,
                            "hasPass" : true,
                            "name" : "_change2_number",
                            "status" : "FAIL",
@@ -2087,6 +2105,7 @@
             },
             {
                "applicable" : true,
+               "change" : _change2_number,
                "hasPass" : true,
                "name" : "_change2_number",
                "status" : "FAIL",
@@ -2099,6 +2118,7 @@
                      "subTasks" : [
                         {
                            "applicable" : true,
+                           "change" : _change1_number,
                            "hasPass" : true,
                            "name" : "_change1_number",
                            "status" : "FAIL",
@@ -2394,6 +2414,7 @@
          "subTasks" : [
             {
                "applicable" : true,
+               "change" : _change1_number,
                "hasPass" : true,
                "name" : "_change1_number",
                "status" : "FAIL",
@@ -2410,6 +2431,7 @@
                         },
                         {
                            "applicable" : true,
+                           "change" : _change2_number,
                            "hasPass" : true,
                            "name" : "_change2_number",
                            "status" : "FAIL",
@@ -2438,6 +2460,7 @@
             },
             {
                "applicable" : true,
+               "change" : _change2_number,
                "hasPass" : true,
                "name" : "_change2_number",
                "status" : "FAIL",
@@ -2450,6 +2473,7 @@
                      "subTasks" : [
                         {
                            "applicable" : true,
+                           "change" : _change1_number,
                            "hasPass" : true,
                            "name" : "_change1_number",
                            "status" : "FAIL",