diff options
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.java | 207 |
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); + } + + } } |