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