Allow to complete project imports from import list screen

For each import listed on the import list screen there is now a button
to complete the project import.

Change-Id: I9369aa6532c319381fe10dd7b82f59d0895a4ba7
Signed-off-by: Edwin Kempin <edwin.kempin@sap.com>
diff --git a/src/main/java/com/googlesource/gerrit/plugins/importer/client/CompleteImportDialog.java b/src/main/java/com/googlesource/gerrit/plugins/importer/client/CompleteImportDialog.java
new file mode 100644
index 0000000..5874d8a
--- /dev/null
+++ b/src/main/java/com/googlesource/gerrit/plugins/importer/client/CompleteImportDialog.java
@@ -0,0 +1,115 @@
+// Copyright (C) 2015 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package com.googlesource.gerrit.plugins.importer.client;
+
+import com.google.gerrit.plugin.client.Plugin;
+import com.google.gerrit.plugin.client.rpc.NoContent;
+import com.google.gerrit.plugin.client.rpc.RestApi;
+import com.google.gwt.event.dom.client.ClickEvent;
+import com.google.gwt.event.dom.client.ClickHandler;
+import com.google.gwt.user.client.rpc.AsyncCallback;
+import com.google.gwt.user.client.ui.Button;
+import com.google.gwt.user.client.ui.DialogBox;
+import com.google.gwt.user.client.ui.FlowPanel;
+import com.google.gwt.user.client.ui.Label;
+import com.google.gwt.user.client.ui.Panel;
+import com.google.gwt.user.client.ui.VerticalPanel;
+import com.google.gwtexpui.globalkey.client.GlobalKey;
+import com.google.gwtexpui.user.client.AutoCenterDialogBox;
+
+public class CompleteImportDialog extends AutoCenterDialogBox {
+
+  private final Button cancelButton;
+  private final Button completeButton;
+
+  public CompleteImportDialog(final String project) {
+    super(/* auto hide */false, /* modal */true);
+    setGlassEnabled(true);
+    setText("Complete Project Import");
+
+    FlowPanel buttons = new FlowPanel();
+
+    completeButton = new Button();
+    completeButton.setText("Complete");
+    completeButton.addClickHandler(new ClickHandler() {
+      @Override
+      public void onClick(ClickEvent event) {
+        hide();
+
+        new RestApi("config").id("server")
+            .view(Plugin.get().getName(), "projects").id(project)
+            .delete(new AsyncCallback<NoContent>() {
+              @Override
+              public void onSuccess(NoContent result) {
+                Plugin.get().go("/x/" + Plugin.get().getName() + "/list");
+
+                final DialogBox successDialog = new DialogBox();
+                successDialog.setText("Project Import Completed");
+                successDialog.setAnimationEnabled(true);
+
+                Panel p = new VerticalPanel();
+                p.setStyleName("importer-message-panel");
+                p.add(new Label("The project import was completed."));
+                Button okButton = new Button("OK");
+                okButton.addClickHandler(new ClickHandler() {
+                  public void onClick(ClickEvent event) {
+                    successDialog.hide();
+                  }
+                });
+
+                p.add(okButton);
+                successDialog.add(p);
+
+                successDialog.center();
+                successDialog.show();
+              }
+
+              @Override
+              public void onFailure(Throwable caught) {
+              }
+            });
+      }
+    });
+    buttons.add(completeButton);
+
+    cancelButton = new Button();
+    cancelButton.addStyleName("importer-cancel-button");
+    cancelButton.setText("Cancel");
+    cancelButton.addClickHandler(new ClickHandler() {
+      @Override
+      public void onClick(ClickEvent event) {
+        hide();
+      }
+    });
+    buttons.add(cancelButton);
+
+    FlowPanel center = new FlowPanel();
+    Label msg = new Label("Complete import of project '" + project + "'");
+    msg.addStyleName("importer-complete-message");
+    center.add(msg);
+
+    center.add(buttons);
+    add(center);
+
+    setWidget(center);
+  }
+
+  @Override
+  public void center() {
+    super.center();
+    GlobalKey.dialog(this);
+    cancelButton.setFocus(true);
+  }
+}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/importer/client/ImportProjectListScreen.java b/src/main/java/com/googlesource/gerrit/plugins/importer/client/ImportProjectListScreen.java
index 56b152d..acdbd4d 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/importer/client/ImportProjectListScreen.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/importer/client/ImportProjectListScreen.java
@@ -26,6 +26,7 @@
 import com.google.gwt.user.client.ui.Button;
 import com.google.gwt.user.client.ui.FlexTable;
 import com.google.gwt.user.client.ui.FlexTable.FlexCellFormatter;
+import com.google.gwt.user.client.ui.FlowPanel;
 import com.google.gwt.user.client.ui.VerticalPanel;
 
 import java.util.List;
@@ -100,12 +101,21 @@
         t.setText(row, 3, "N/A");
       }
 
-      t.setWidget(row, 4, new Button("Resume...", new ClickHandler() {
+      FlowPanel p = new FlowPanel();
+      p.setStyleName("importer-action-panel");
+      p.add(new Button("Resume...", new ClickHandler() {
         @Override
         public void onClick(ClickEvent event) {
           (new ResumeImportDialog(project)).center();
         }
       }));
+      p.add(new Button("Complete...", new ClickHandler() {
+        @Override
+        public void onClick(ClickEvent event) {
+          (new CompleteImportDialog(project)).center();
+        }
+      }));
+      t.setWidget(row, 4, p);
 
       row++;
     }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/importer/public/importer.css b/src/main/java/com/googlesource/gerrit/plugins/importer/public/importer.css
index 9ec691e..770081a 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/importer/public/importer.css
+++ b/src/main/java/com/googlesource/gerrit/plugins/importer/public/importer.css
@@ -58,6 +58,11 @@
   margin-left: 150px;
 }
 
-.importer-resume-message {
+.importer-resume-message,
+.importer-complete-message {
   margin-bottom: 10px;
 }
+
+.importer-action-panel .gwt-Button {
+  margin: 2px;
+}