ProjectApi: Add method to set the default dashboard

Change-Id: I8e4b36b456b3c34b8fcd4347d1fe546095c875c2
diff --git a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/api/project/DashboardIT.java b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/api/project/DashboardIT.java
index 5cdb583..3843a31 100644
--- a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/api/project/DashboardIT.java
+++ b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/api/project/DashboardIT.java
@@ -75,6 +75,15 @@
   }
 
   @Test
+  public void setDefaultDashboardByProject() throws Exception {
+    DashboardInfo info = createDashboard(DashboardsCollection.DEFAULT_DASHBOARD_NAME, "test");
+    assertThat(info.isDefault).isNull();
+    gApi.projects().name(project.get()).defaultDashboard(info.id);
+    assertThat(gApi.projects().name(project.get()).dashboard(info.id).get().isDefault).isTrue();
+    assertThat(gApi.projects().name(project.get()).defaultDashboard().get().id).isEqualTo(info.id);
+  }
+
+  @Test
   public void replaceDefaultDashboard() throws Exception {
     DashboardInfo d1 = createDashboard(DashboardsCollection.DEFAULT_DASHBOARD_NAME, "test1");
     DashboardInfo d2 = createDashboard(DashboardsCollection.DEFAULT_DASHBOARD_NAME, "test2");
diff --git a/gerrit-extension-api/src/main/java/com/google/gerrit/extensions/api/projects/ProjectApi.java b/gerrit-extension-api/src/main/java/com/google/gerrit/extensions/api/projects/ProjectApi.java
index 3379edc..9391d16 100644
--- a/gerrit-extension-api/src/main/java/com/google/gerrit/extensions/api/projects/ProjectApi.java
+++ b/gerrit-extension-api/src/main/java/com/google/gerrit/extensions/api/projects/ProjectApi.java
@@ -154,6 +154,13 @@
    */
   DashboardApi defaultDashboard() throws RestApiException;
 
+  /**
+   * Set the project's default dashboard.
+   *
+   * @param name the dashboard to set as default.
+   */
+  void defaultDashboard(String name) throws RestApiException;
+
   abstract class ListDashboardsRequest {
     public abstract List<DashboardInfo> get() throws RestApiException;
   }
@@ -284,5 +291,10 @@
     public ListDashboardsRequest dashboards() throws RestApiException {
       throw new NotImplementedException();
     }
+
+    @Override
+    public void defaultDashboard(String name) throws RestApiException {
+      throw new NotImplementedException();
+    }
   }
 }
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/api/projects/ProjectApiImpl.java b/gerrit-server/src/main/java/com/google/gerrit/server/api/projects/ProjectApiImpl.java
index 89c92d0..d3e989d 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/api/projects/ProjectApiImpl.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/api/projects/ProjectApiImpl.java
@@ -486,6 +486,15 @@
   }
 
   @Override
+  public void defaultDashboard(String name) throws RestApiException {
+    try {
+      dashboardApi.create(checkExists(), name).setDefault();
+    } catch (Exception e) {
+      throw asRestApiException("Cannot set default dashboard", e);
+    }
+  }
+
+  @Override
   public ListDashboardsRequest dashboards() throws RestApiException {
     return new ListDashboardsRequest() {
       @Override