QChris has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/64300


Change subject: Add UI to rename projects
......................................................................

Add UI to rename projects

The screen to rename projects can be found under 'Projects'
'Rename Projects'.

Change-Id: I9f07f3aefcca6edd115cf99fc49e333cd122b8b1
---
M gerrit-common/src/main/java/com/google/gerrit/common/PageLinks.java
M gerrit-gwtui/src/main/java/com/google/gerrit/client/Dispatcher.java
M gerrit-gwtui/src/main/java/com/google/gerrit/client/Gerrit.java
M gerrit-gwtui/src/main/java/com/google/gerrit/client/GerritConstants.java
M gerrit-gwtui/src/main/java/com/google/gerrit/client/GerritConstants.properties
M gerrit-gwtui/src/main/java/com/google/gerrit/client/admin/AdminConstants.java
M 
gerrit-gwtui/src/main/java/com/google/gerrit/client/admin/AdminConstants.properties
A 
gerrit-gwtui/src/main/java/com/google/gerrit/client/admin/RenameProjectScreen.java
M gerrit-gwtui/src/main/java/com/google/gerrit/client/projects/ProjectApi.java
9 files changed, 254 insertions(+), 2 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/gerrit refs/changes/00/64300/1

diff --git 
a/gerrit-common/src/main/java/com/google/gerrit/common/PageLinks.java 
b/gerrit-common/src/main/java/com/google/gerrit/common/PageLinks.java
index beab1d9..4a1982e 100644
--- a/gerrit-common/src/main/java/com/google/gerrit/common/PageLinks.java
+++ b/gerrit-common/src/main/java/com/google/gerrit/common/PageLinks.java
@@ -44,6 +44,7 @@
   public static final String ADMIN_CREATE_GROUP = "/admin/create-group/";
   public static final String ADMIN_PROJECTS = "/admin/projects/";
   public static final String ADMIN_CREATE_PROJECT = "/admin/create-project/";
+  public static final String ADMIN_RENAME_PROJECT = "/admin/rename-project/";
   public static final String ADMIN_PLUGINS = "/admin/plugins/";
 
   public static String toChange(final ChangeInfo c) {
diff --git 
a/gerrit-gwtui/src/main/java/com/google/gerrit/client/Dispatcher.java 
b/gerrit-gwtui/src/main/java/com/google/gerrit/client/Dispatcher.java
index c8b1e48..1ddf1a6 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/Dispatcher.java
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/Dispatcher.java
@@ -19,6 +19,7 @@
 import static com.google.gerrit.common.PageLinks.ADMIN_GROUPS;
 import static com.google.gerrit.common.PageLinks.ADMIN_PLUGINS;
 import static com.google.gerrit.common.PageLinks.ADMIN_PROJECTS;
+import static com.google.gerrit.common.PageLinks.ADMIN_RENAME_PROJECT;
 import static com.google.gerrit.common.PageLinks.DASHBOARDS;
 import static com.google.gerrit.common.PageLinks.MINE;
 import static com.google.gerrit.common.PageLinks.PROJECTS;
@@ -60,6 +61,7 @@
 import com.google.gerrit.client.admin.ProjectInfoScreen;
 import com.google.gerrit.client.admin.ProjectListScreen;
 import com.google.gerrit.client.admin.ProjectScreen;
+import com.google.gerrit.client.admin.RenameProjectScreen;
 import com.google.gerrit.client.changes.AccountDashboardScreen;
 import com.google.gerrit.client.changes.ChangeScreen;
 import com.google.gerrit.client.changes.CustomDashboardScreen;
@@ -689,6 +691,10 @@
             || matchExact("/admin/create-project", token)) {
           Gerrit.display(token, new CreateProjectScreen());
 
+        } else if (matchExact(ADMIN_RENAME_PROJECT, token)
+            || matchExact("/admin/rename-project", token)) {
+          Gerrit.display(token, new RenameProjectScreen());
+
         } else if (matchExact(ADMIN_CREATE_GROUP, token)
             || matchExact("/admin/create-group", token)) {
           Gerrit.display(token, new CreateGroupScreen());
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/Gerrit.java 
b/gerrit-gwtui/src/main/java/com/google/gerrit/client/Gerrit.java
index c8f40b2..fffeff1 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/Gerrit.java
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/Gerrit.java
@@ -670,6 +670,9 @@
           if (result.canPerform(CREATE_PROJECT)) {
             addLink(projectsBar, C.menuProjectsCreate(), 
PageLinks.ADMIN_CREATE_PROJECT);
           }
+          if (result.canPerform(ADMINISTRATE_SERVER)) {
+            addLink(projectsBar, C.menuProjectsRename(), 
PageLinks.ADMIN_RENAME_PROJECT);
+          }
           if (result.canPerform(CREATE_GROUP)) {
             addLink(peopleBar, C.menuPeopleGroupsCreate(), 
PageLinks.ADMIN_CREATE_GROUP);
           }
diff --git 
a/gerrit-gwtui/src/main/java/com/google/gerrit/client/GerritConstants.java 
b/gerrit-gwtui/src/main/java/com/google/gerrit/client/GerritConstants.java
index 683f058..9f19e6d 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/GerritConstants.java
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/GerritConstants.java
@@ -75,6 +75,7 @@
   String menuProjectsAccess();
   String menuProjectsDashboards();
   String menuProjectsCreate();
+  String menuProjectsRename();
 
   String menuPeople();
   String menuPeopleGroupsList();
diff --git 
a/gerrit-gwtui/src/main/java/com/google/gerrit/client/GerritConstants.properties
 
b/gerrit-gwtui/src/main/java/com/google/gerrit/client/GerritConstants.properties
index defc7e4..f034644 100644
--- 
a/gerrit-gwtui/src/main/java/com/google/gerrit/client/GerritConstants.properties
+++ 
b/gerrit-gwtui/src/main/java/com/google/gerrit/client/GerritConstants.properties
@@ -58,6 +58,7 @@
 menuProjectsAccess = Access
 menuProjectsDashboards = Dashboards
 menuProjectsCreate = Create New Project
+menuProjectsRename = Rename Project
 
 menuPeople = People
 menuPeopleGroupsList = List Groups
diff --git 
a/gerrit-gwtui/src/main/java/com/google/gerrit/client/admin/AdminConstants.java 
b/gerrit-gwtui/src/main/java/com/google/gerrit/client/admin/AdminConstants.java
index f4c0b55..9756ac2 100644
--- 
a/gerrit-gwtui/src/main/java/com/google/gerrit/client/admin/AdminConstants.java
+++ 
b/gerrit-gwtui/src/main/java/com/google/gerrit/client/admin/AdminConstants.java
@@ -34,6 +34,7 @@
   String buttonCreateProject();
   String buttonChangeGroupOwner();
   String buttonChangeGroupType();
+  String buttonRenameProject();
   String buttonSelectGroup();
   String buttonSaveChanges();
   String checkBoxEmptyCommit();
@@ -62,6 +63,7 @@
   String headingCreateGroup();
   String headingParentProjectName();
   String columnProjectName();
+  String newNameLabel();
   String headingAgreements();
 
   String headingProjectSubmitType();
@@ -101,6 +103,7 @@
   String projectListTitle();
   String projectFilter();
   String createProjectTitle();
+  String renameProjectTitle();
   String projectListQueryLink();
 
   String plugins();
diff --git 
a/gerrit-gwtui/src/main/java/com/google/gerrit/client/admin/AdminConstants.properties
 
b/gerrit-gwtui/src/main/java/com/google/gerrit/client/admin/AdminConstants.properties
index ce27780..c68c663 100644
--- 
a/gerrit-gwtui/src/main/java/com/google/gerrit/client/admin/AdminConstants.properties
+++ 
b/gerrit-gwtui/src/main/java/com/google/gerrit/client/admin/AdminConstants.properties
@@ -13,6 +13,7 @@
 buttonCreateProject = Create Project
 buttonChangeGroupOwner = Change Owner
 buttonChangeGroupType = Change Type
+buttonRenameProject = Rename Project
 buttonSelectGroup = Select
 buttonSaveChanges = Save Changes
 checkBoxEmptyCommit = Create initial empty commit
@@ -31,6 +32,7 @@
 headingParentProjectName = Rights Inherit From
 parentSuggestions = Parent Suggestion
 columnProjectName = Project Name
+newNameLabel = New Name
 
 headingGroupUUID = Group UUID
 headingOwner = Owners
@@ -81,6 +83,7 @@
 projectListTitle = Projects
 projectFilter = Filter
 createProjectTitle = Create Project
+renameProjectTitle = Rename Project
 projectListQueryLink = Search for changes on this project
 
 plugins = Plugins
diff --git 
a/gerrit-gwtui/src/main/java/com/google/gerrit/client/admin/RenameProjectScreen.java
 
b/gerrit-gwtui/src/main/java/com/google/gerrit/client/admin/RenameProjectScreen.java
new file mode 100644
index 0000000..e288ab0
--- /dev/null
+++ 
b/gerrit-gwtui/src/main/java/com/google/gerrit/client/admin/RenameProjectScreen.java
@@ -0,0 +1,223 @@
+// Copyright (C) 2013 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.google.gerrit.client.admin;
+
+import static 
com.google.gerrit.common.data.GlobalCapability.ADMINISTRATE_SERVER;
+
+import com.google.gerrit.client.Dispatcher;
+import com.google.gerrit.client.ErrorDialog;
+import com.google.gerrit.client.Gerrit;
+import com.google.gerrit.client.NotFoundScreen;
+import com.google.gerrit.client.account.AccountCapabilities;
+import com.google.gerrit.client.projects.ProjectApi;
+import com.google.gerrit.client.rpc.GerritCallback;
+import com.google.gerrit.client.ui.HintTextBox;
+import com.google.gerrit.client.ui.ProjectListPopup;
+import com.google.gerrit.client.ui.ProjectNameSuggestOracle;
+import com.google.gerrit.client.ui.Screen;
+import com.google.gerrit.common.PageLinks;
+import com.google.gerrit.reviewdb.client.Project;
+import com.google.gwt.event.dom.client.ClickEvent;
+import com.google.gwt.event.dom.client.ClickHandler;
+import com.google.gwt.event.dom.client.KeyCodes;
+import com.google.gwt.event.dom.client.KeyPressEvent;
+import com.google.gwt.event.dom.client.KeyPressHandler;
+import com.google.gwt.user.client.History;
+import com.google.gwt.user.client.ui.Button;
+import com.google.gwt.user.client.ui.Grid;
+import com.google.gwt.user.client.ui.SuggestBox;
+import com.google.gwt.user.client.ui.VerticalPanel;
+import com.google.gwtexpui.globalkey.client.NpTextBox;
+import com.google.gerrit.client.VoidResult;
+
+import org.eclipse.jgit.lib.Constants;
+
+public class RenameProjectScreen extends Screen {
+  private Grid grid;
+  private NpTextBox destination;
+  private Button rename;
+  private Button browse;
+  private HintTextBox sourceHints;
+  private SuggestBox source;
+  private ProjectListPopup projectsPopup;
+
+  public RenameProjectScreen() {
+    super();
+    setRequiresSignIn(true);
+  }
+
+  @Override
+  protected void onLoad() {
+    super.onLoad();
+    AccountCapabilities.all(new GerritCallback<AccountCapabilities>() {
+      @Override
+      public void onSuccess(AccountCapabilities ac) {
+        if (ac.canPerform(ADMINISTRATE_SERVER)) {
+          display();
+        } else {
+          Gerrit.display(PageLinks.ADMIN_RENAME_PROJECT, new NotFoundScreen());
+        }
+      }
+    }, ADMINISTRATE_SERVER);
+  }
+
+  @Override
+  protected void onUnload() {
+    super.onUnload();
+    projectsPopup.closePopup();
+  }
+
+  @Override
+  protected void onInitUI() {
+    super.onInitUI();
+    setPageTitle(Util.C.renameProjectTitle());
+    addRenameProjectPanel();
+
+    /* popup */
+    projectsPopup = new ProjectListPopup() {
+      @Override
+      protected void onMovePointerTo(String projectName) {
+        // prevent user input from being overwritten by simply poping up
+        if (!projectsPopup.isPoppingUp() || "".equals(source.getText())) {
+          source.setText(projectName);
+        }
+      }
+    };
+    projectsPopup.initPopup(Util.C.projects(), PageLinks.ADMIN_PROJECTS);
+  }
+
+  private void addRenameProjectPanel() {
+    final VerticalPanel fp = new VerticalPanel();
+    fp.setStyleName(Gerrit.RESOURCES.css().createProjectPanel());
+
+    initTextBoxes();
+    initButtons();
+
+    addGrid(fp);
+
+    fp.add(rename);
+
+    add(fp);
+  }
+
+  private void initTextBoxes() {
+    KeyPressHandler enterPressHandler = new KeyPressHandler() {
+      @Override
+      public void onKeyPress(KeyPressEvent event) {
+        if (event.getNativeEvent().getKeyCode() == KeyCodes.KEY_ENTER) {
+          doRenameProject();
+        }
+      }
+    };
+
+    sourceHints = new HintTextBox();
+    sourceHints.setVisibleLength(50);
+    source = new SuggestBox(new ProjectNameSuggestOracle(), sourceHints);
+    source.addKeyPressHandler(enterPressHandler);
+
+    destination = new NpTextBox();
+    destination.setVisibleLength(50);
+    destination.addKeyPressHandler(enterPressHandler);
+  }
+
+  private void initButtons() {
+    rename = new Button(Util.C.buttonRenameProject());
+    rename.addClickHandler(new ClickHandler() {
+      @Override
+      public void onClick(final ClickEvent event) {
+        doRenameProject();
+      }
+    });
+
+    browse = new Button(Util.C.buttonBrowseProjects());
+    browse.addClickHandler(new ClickHandler() {
+      @Override
+      public void onClick(final ClickEvent event) {
+        int top = grid.getAbsoluteTop() - 50; // under page header
+        int left = 5 + grid.getAbsoluteLeft() + grid.getOffsetWidth();
+        projectsPopup.setPreferredCoordinates(top, left);
+        projectsPopup.displayPopup();
+      }
+    });
+  }
+
+  private void addGrid(final VerticalPanel fp) {
+    grid = new Grid(2, 3);
+    grid.setStyleName(Gerrit.RESOURCES.css().infoBlock());
+    grid.setText(0, 0, Util.C.columnProjectName() + ":");
+    grid.setWidget(0, 1, source);
+    grid.setWidget(0, 2, browse);
+    grid.setText(1, 0, Util.C.newNameLabel() + ":");
+    grid.setWidget(1, 1, destination);
+    fp.add(grid);
+  }
+
+  private void doRenameProject() {
+    final String sourceName = source.getText().trim();
+    final String destinationName = destination.getText().trim();
+
+    if ("".equals(sourceName)) {
+      source.setFocus(true);
+      return;
+    }
+
+    if ("".equals(destinationName)) {
+      destination.setFocus(true);
+      return;
+    }
+
+    enableForm(false);
+
+    ProjectApi.renameProject(sourceName, destinationName,
+        new GerritCallback<VoidResult>() {
+          @Override
+          public void onSuccess(final VoidResult result) {
+            String nameWithoutSuffix = destinationName;
+            if (nameWithoutSuffix.endsWith(Constants.DOT_GIT_EXT)) {
+              // Be nice and drop the trailing ".git" suffix, which we never
+              // keep in our database, but clients might mistakenly provide
+              // anyway.
+              nameWithoutSuffix = nameWithoutSuffix.substring(0, //
+                  nameWithoutSuffix.length() - Constants.DOT_GIT_EXT.length());
+              while (nameWithoutSuffix.endsWith("/")) {
+                nameWithoutSuffix =
+                    nameWithoutSuffix.substring(0,
+                        nameWithoutSuffix.length() - 1);
+              }
+            }
+
+            History.newItem(Dispatcher.toProjectAdmin(new Project.NameKey(
+                nameWithoutSuffix), ProjectScreen.INFO));
+          }
+
+          @Override
+          public void onFailure(final Throwable caught) {
+            new ErrorDialog(caught.getMessage()).center();
+            enableForm(true);
+          }
+        });
+  }
+
+  private void enableForm(final boolean enabled) {
+    source.setEnabled(enabled);
+    sourceHints.setEnabled(enabled);
+    browse.setEnabled(enabled);
+    destination.setEnabled(enabled);
+    rename.setEnabled(enabled);
+    if (!enabled) {
+      projectsPopup.closePopup();
+    }
+  }
+}
diff --git 
a/gerrit-gwtui/src/main/java/com/google/gerrit/client/projects/ProjectApi.java 
b/gerrit-gwtui/src/main/java/com/google/gerrit/client/projects/ProjectApi.java
index 63bcd64..acf581a 100644
--- 
a/gerrit-gwtui/src/main/java/com/google/gerrit/client/projects/ProjectApi.java
+++ 
b/gerrit-gwtui/src/main/java/com/google/gerrit/client/projects/ProjectApi.java
@@ -29,8 +29,19 @@
     input.setParent(parent);
     input.setPermissionsOnly(permissionsOnly);
     input.setCreateEmptyCommit(createEmptyCcommit);
-    new RestApi("/projects/").id(projectName).ifNoneMatch()
-        .put(input, asyncCallback);
+    project(projectName).ifNoneMatch().put(input, asyncCallback);
+  }
+
+  /** Rename a project*/
+  public static void renameProject(String sourceName,
+      String destinationName, AsyncCallback<VoidResult> cb) {
+    ProjectInput in = ProjectInput.create();
+    in.setName(destinationName);
+    project(sourceName).view("name").put(in, cb);
+  }
+
+  private static RestApi project(String project) {
+    return new RestApi("/projects/").id(project);
   }
 
   /** Create a new branch */

-- 
To view, visit https://gerrit.wikimedia.org/r/64300
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I9f07f3aefcca6edd115cf99fc49e333cd122b8b1
Gerrit-PatchSet: 1
Gerrit-Project: gerrit
Gerrit-Branch: wmf
Gerrit-Owner: QChris <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to