summaryrefslogtreecommitdiffstats
path: root/gerrit-gwtui/src/main/java/com/google/gerrit/client/admin/ProjectInfoScreen.java
diff options
context:
space:
mode:
Diffstat (limited to 'gerrit-gwtui/src/main/java/com/google/gerrit/client/admin/ProjectInfoScreen.java')
-rw-r--r--gerrit-gwtui/src/main/java/com/google/gerrit/client/admin/ProjectInfoScreen.java207
1 files changed, 156 insertions, 51 deletions
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/admin/ProjectInfoScreen.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/admin/ProjectInfoScreen.java
index 944a169321..40921309c0 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/admin/ProjectInfoScreen.java
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/admin/ProjectInfoScreen.java
@@ -15,36 +15,43 @@
package com.google.gerrit.client.admin;
import com.google.gerrit.client.Gerrit;
+import com.google.gerrit.client.download.DownloadPanel;
import com.google.gerrit.client.rpc.GerritCallback;
import com.google.gerrit.client.rpc.ScreenLoadCallback;
import com.google.gerrit.client.ui.OnEditEnabler;
import com.google.gerrit.client.ui.SmallHeading;
import com.google.gerrit.common.data.ProjectDetail;
+import com.google.gerrit.reviewdb.client.AccountGeneralPreferences.DownloadCommand;
+import com.google.gerrit.reviewdb.client.InheritedBoolean;
import com.google.gerrit.reviewdb.client.Project;
+import com.google.gerrit.reviewdb.client.Project.InheritableBoolean;
import com.google.gerrit.reviewdb.client.Project.SubmitType;
import com.google.gwt.event.dom.client.ChangeEvent;
import com.google.gwt.event.dom.client.ChangeHandler;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.ui.Button;
-import com.google.gwt.user.client.ui.CheckBox;
+import com.google.gwt.user.client.ui.FlexTable;
import com.google.gwt.user.client.ui.ListBox;
-import com.google.gwt.user.client.ui.Panel;
import com.google.gwt.user.client.ui.VerticalPanel;
+import com.google.gwt.user.client.ui.Widget;
import com.google.gwtexpui.globalkey.client.NpTextArea;
public class ProjectInfoScreen extends ProjectScreen {
+ private String projectName;
private Project project;
- private Panel projectOptionsPanel;
- private CheckBox requireChangeID;
+ private LabeledWidgetsGrid grid;
+
+ // Section: Project Options
+ private ListBox requireChangeID;
private ListBox submitType;
private ListBox state;
- private CheckBox useContentMerge;
+ private ListBox contentMerge;
- private Panel agreementsPanel;
- private CheckBox useContributorAgreements;
- private CheckBox useSignedOffBy;
+ // Section: Contributor Agreements
+ private ListBox contributorAgreements;
+ private ListBox signedOffBy;
private NpTextArea descTxt;
private Button saveProject;
@@ -53,6 +60,7 @@ public class ProjectInfoScreen extends ProjectScreen {
public ProjectInfoScreen(final Project.NameKey toShow) {
super(toShow);
+ projectName = toShow.get();
}
@Override
@@ -67,9 +75,13 @@ public class ProjectInfoScreen extends ProjectScreen {
}
});
+ add(new ProjectDownloadPanel(projectName, true));
+
initDescription();
+ grid = new LabeledWidgetsGrid();
initProjectOptions();
initAgreements();
+ add(grid);
add(saveProject);
}
@@ -89,6 +101,7 @@ public class ProjectInfoScreen extends ProjectScreen {
display(result);
}
});
+ savedPanel = INFO;
}
private void enableForm(final boolean canModifyAgreements,
@@ -96,10 +109,10 @@ public class ProjectInfoScreen extends ProjectScreen {
final boolean canModifyState) {
submitType.setEnabled(canModifyMergeType);
state.setEnabled(canModifyState);
- useContentMerge.setEnabled(canModifyMergeType);
+ contentMerge.setEnabled(canModifyMergeType);
descTxt.setEnabled(canModifyDescription);
- useContributorAgreements.setEnabled(canModifyAgreements);
- useSignedOffBy.setEnabled(canModifyAgreements);
+ contributorAgreements.setEnabled(canModifyAgreements);
+ signedOffBy.setEnabled(canModifyAgreements);
requireChangeID.setEnabled(canModifyMergeType);
}
@@ -118,8 +131,7 @@ public class ProjectInfoScreen extends ProjectScreen {
}
private void initProjectOptions() {
- projectOptionsPanel = new VerticalPanel();
- projectOptionsPanel.add(new SmallHeading(Util.C.headingProjectOptions()));
+ grid.addHeader(new SmallHeading(Util.C.headingProjectOptions()));
submitType = new ListBox();
for (final Project.SubmitType type : Project.SubmitType.values()) {
@@ -132,29 +144,34 @@ public class ProjectInfoScreen extends ProjectScreen {
}
});
saveEnabler.listenTo(submitType);
- projectOptionsPanel.add(submitType);
+ grid.add(Util.C.headingProjectSubmitType(), submitType);
state = new ListBox();
for (final Project.State stateValue : Project.State.values()) {
state.addItem(Util.toLongString(stateValue), stateValue.name());
}
-
saveEnabler.listenTo(state);
- projectOptionsPanel.add(state);
+ grid.add(Util.C.headingProjectState(), state);
- useContentMerge = new CheckBox(Util.C.useContentMerge(), true);
- saveEnabler.listenTo(useContentMerge);
- projectOptionsPanel.add(useContentMerge);
+ contentMerge = newInheritedBooleanBox();
+ saveEnabler.listenTo(contentMerge);
+ grid.add(Util.C.useContentMerge(), contentMerge);
- requireChangeID = new CheckBox(Util.C.requireChangeID(), true);
+ requireChangeID = newInheritedBooleanBox();
saveEnabler.listenTo(requireChangeID);
- projectOptionsPanel.add(requireChangeID);
+ grid.addHtml(Util.C.requireChangeID(), requireChangeID);
+ }
- add(projectOptionsPanel);
+ private static ListBox newInheritedBooleanBox() {
+ ListBox box = new ListBox();
+ for (InheritableBoolean b : InheritableBoolean.values()) {
+ box.addItem(b.name(), b.name());
+ }
+ return box;
}
/**
- * Enables the {@link #useContentMerge} checkbox if the selected submit type
+ * Enables the {@link #contentMerge} checkbox if the selected submit type
* allows the usage of content merge.
* If the submit type (currently only 'Fast Forward Only') does not allow
* content merge the useContentMerge checkbox gets disabled.
@@ -162,26 +179,27 @@ public class ProjectInfoScreen extends ProjectScreen {
private void setEnabledForUseContentMerge() {
if (SubmitType.FAST_FORWARD_ONLY.equals(Project.SubmitType
.valueOf(submitType.getValue(submitType.getSelectedIndex())))) {
- useContentMerge.setEnabled(false);
- useContentMerge.setValue(false);
+ contentMerge.setEnabled(false);
+ final InheritedBoolean inheritedBoolean = new InheritedBoolean();
+ inheritedBoolean.setValue(InheritableBoolean.FALSE);
+ setBool(contentMerge, inheritedBoolean);
} else {
- useContentMerge.setEnabled(submitType.isEnabled());
+ contentMerge.setEnabled(submitType.isEnabled());
}
}
private void initAgreements() {
- agreementsPanel = new VerticalPanel();
- agreementsPanel.add(new SmallHeading(Util.C.headingAgreements()));
-
- useContributorAgreements = new CheckBox(Util.C.useContributorAgreements());
- saveEnabler.listenTo(useContributorAgreements);
- agreementsPanel.add(useContributorAgreements);
+ grid.addHeader(new SmallHeading(Util.C.headingAgreements()));
- useSignedOffBy = new CheckBox(Util.C.useSignedOffBy(), true);
- saveEnabler.listenTo(useSignedOffBy);
- agreementsPanel.add(useSignedOffBy);
+ contributorAgreements = newInheritedBooleanBox();
+ if (Gerrit.getConfig().isUseContributorAgreements()) {
+ saveEnabler.listenTo(contributorAgreements);
+ grid.add(Util.C.useContributorAgreements(), contributorAgreements);
+ }
- add(agreementsPanel);
+ signedOffBy = newInheritedBooleanBox();
+ saveEnabler.listenTo(signedOffBy);
+ grid.addHtml(Util.C.useSignedOffBy(), signedOffBy);
}
private void setSubmitType(final Project.SubmitType newSubmitType) {
@@ -209,21 +227,54 @@ public class ProjectInfoScreen extends ProjectScreen {
}
}
+ private void setBool(ListBox box, InheritedBoolean inheritedBoolean) {
+ int inheritedIndex = -1;
+ for (int i = 0; i < box.getItemCount(); i++) {
+ if (box.getValue(i).startsWith(InheritableBoolean.INHERIT.name())) {
+ inheritedIndex = i;
+ }
+ if (box.getValue(i).startsWith(inheritedBoolean.value.name())) {
+ box.setSelectedIndex(i);
+ }
+ }
+ if (inheritedIndex >= 0) {
+ if (project.getParent(Gerrit.getConfig().getWildProject()) == null) {
+ if (box.getSelectedIndex() == inheritedIndex) {
+ for (int i = 0; i < box.getItemCount(); i++) {
+ if (box.getValue(i).equals(InheritableBoolean.FALSE.name())) {
+ box.setSelectedIndex(i);
+ break;
+ }
+ }
+ }
+ box.removeItem(inheritedIndex);
+ } else {
+ box.setItemText(inheritedIndex, InheritableBoolean.INHERIT.name() + " ("
+ + inheritedBoolean.inheritedValue + ")");
+ }
+ }
+ }
+
+ private static InheritableBoolean getBool(ListBox box) {
+ int i = box.getSelectedIndex();
+ if (i >= 0) {
+ final String selectedValue = box.getValue(i);
+ if (selectedValue.startsWith(InheritableBoolean.INHERIT.name())) {
+ return InheritableBoolean.INHERIT;
+ }
+ return InheritableBoolean.valueOf(selectedValue);
+ }
+ return InheritableBoolean.INHERIT;
+ }
+
void display(final ProjectDetail result) {
project = result.project;
- final boolean isall =
- Gerrit.getConfig().getWildProject().equals(project.getNameKey());
- projectOptionsPanel.setVisible(!isall);
- agreementsPanel.setVisible(!isall);
- useContributorAgreements.setVisible(Gerrit.getConfig()
- .isUseContributorAgreements());
-
descTxt.setText(project.getDescription());
- useContributorAgreements.setValue(project.isUseContributorAgreements());
- useSignedOffBy.setValue(project.isUseSignedOffBy());
- useContentMerge.setValue(project.isUseContentMerge());
- requireChangeID.setValue(project.isRequireChangeID());
+ setBool(contributorAgreements, result.useContributorAgreements);
+ setBool(signedOffBy, result.useSignedOffBy);
+ setBool(contentMerge, result.useContentMerge);
+ setBool(requireChangeID, result.requireChangeID);
setSubmitType(project.getSubmitType());
setState(project.getState());
@@ -232,10 +283,10 @@ public class ProjectInfoScreen extends ProjectScreen {
private void doSave() {
project.setDescription(descTxt.getText().trim());
- project.setUseContributorAgreements(useContributorAgreements.getValue());
- project.setUseSignedOffBy(useSignedOffBy.getValue());
- project.setUseContentMerge(useContentMerge.getValue());
- project.setRequireChangeID(requireChangeID.getValue());
+ project.setUseContributorAgreements(getBool(contributorAgreements));
+ project.setUseSignedOffBy(getBool(signedOffBy));
+ project.setUseContentMerge(getBool(contentMerge));
+ project.setRequireChangeID(getBool(requireChangeID));
if (submitType.getSelectedIndex() >= 0) {
project.setSubmitType(Project.SubmitType.valueOf(submitType
.getValue(submitType.getSelectedIndex())));
@@ -256,4 +307,58 @@ public class ProjectInfoScreen extends ProjectScreen {
}
});
}
+
+ public class ProjectDownloadPanel extends DownloadPanel {
+ public ProjectDownloadPanel(String project, boolean isAllowsAnonymous) {
+ super(project, null, isAllowsAnonymous);
+ }
+
+ @Override
+ public void populateDownloadCommandLinks() {
+ if (!urls.isEmpty()) {
+ if (allowedCommands.contains(DownloadCommand.CHECKOUT)
+ || allowedCommands.contains(DownloadCommand.DEFAULT_DOWNLOADS)) {
+ commands.add(cmdLinkfactory.new CloneCommandLink());
+ }
+ }
+ }
+ }
+
+ private class LabeledWidgetsGrid extends FlexTable {
+ private String labelSuffix;
+
+ public LabeledWidgetsGrid() {
+ super();
+ labelSuffix = ":";
+ }
+
+ private void addHeader(Widget widget) {
+ int row = getRowCount();
+ insertRow(row);
+ setWidget(row, 0, widget);
+ getCellFormatter().getElement(row, 0).setAttribute("colSpan", "2");
+ }
+
+ private void add(String label, boolean labelIsHtml, Widget widget) {
+ int row = getRowCount();
+ insertRow(row);
+ if (label != null) {
+ if (labelIsHtml) {
+ setHTML(row, 0, label + labelSuffix);
+ } else {
+ setText(row, 0, label + labelSuffix);
+ }
+ }
+ setWidget(row, 1, widget);
+ }
+
+ public void add(String label, Widget widget) {
+ add(label, false, widget);
+ }
+
+ public void addHtml(String label, Widget widget) {
+ add(label, true, widget);
+ }
+
+ }
}