From 022ebb4010ecf91ef5049f0386ef398f1d7fb32b Mon Sep 17 00:00:00 2001 From: John Crygier <john.crygier@aon.com> Date: Mon, 07 May 2012 11:49:24 -0400 Subject: [PATCH] Change layout to BoxLayout (assuming window won't be resized) --- src/com/gitblit/wicket/pages/EditRepositoryPage.java | 110 +++++++++++++++++++++++++++++++++++++++++++++--------- 1 files changed, 91 insertions(+), 19 deletions(-) diff --git a/src/com/gitblit/wicket/pages/EditRepositoryPage.java b/src/com/gitblit/wicket/pages/EditRepositoryPage.java index ec52aaf..f3e2c38 100644 --- a/src/com/gitblit/wicket/pages/EditRepositoryPage.java +++ b/src/com/gitblit/wicket/pages/EditRepositoryPage.java @@ -16,6 +16,7 @@ package com.gitblit.wicket.pages; import java.text.MessageFormat; +import java.util.AbstractMap; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; @@ -23,23 +24,30 @@ import java.util.Iterator; import java.util.List; import java.util.Map; +import java.util.Map.Entry; import java.util.Set; import org.apache.wicket.PageParameters; +import org.apache.wicket.behavior.SimpleAttributeModifier; import org.apache.wicket.extensions.markup.html.form.palette.Palette; +import org.apache.wicket.markup.html.WebMarkupContainer; +import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.form.Button; import org.apache.wicket.markup.html.form.CheckBox; -import org.apache.wicket.markup.html.form.ChoiceRenderer; import org.apache.wicket.markup.html.form.DropDownChoice; import org.apache.wicket.markup.html.form.Form; import org.apache.wicket.markup.html.form.IChoiceRenderer; import org.apache.wicket.markup.html.form.TextField; +import org.apache.wicket.markup.html.list.ListItem; +import org.apache.wicket.markup.html.list.ListItemModel; +import org.apache.wicket.markup.html.list.ListView; import org.apache.wicket.model.CompoundPropertyModel; import org.apache.wicket.model.IModel; import org.apache.wicket.model.Model; import org.apache.wicket.model.util.CollectionModel; import org.apache.wicket.model.util.ListModel; +import com.gitblit.Constants; import com.gitblit.Constants.AccessRestrictionType; import com.gitblit.Constants.FederationStrategy; import com.gitblit.GitBlit; @@ -50,6 +58,7 @@ import com.gitblit.utils.ArrayUtils; import com.gitblit.utils.StringUtils; import com.gitblit.wicket.GitBlitWebSession; +import com.gitblit.wicket.StringChoiceRenderer; import com.gitblit.wicket.WicketUtils; import com.gitblit.wicket.panels.BulletListPanel; @@ -81,6 +90,7 @@ // ensure this user can create or edit this repository checkPermissions(repositoryModel); + List<String> indexedBranches = new ArrayList<String>(); List<String> federationSets = new ArrayList<String>(); List<String> repositoryUsers = new ArrayList<String>(); List<String> repositoryTeams = new ArrayList<String>(); @@ -97,24 +107,37 @@ Collections.sort(repositoryUsers); } federationSets.addAll(repositoryModel.federationSets); + if (!ArrayUtils.isEmpty(repositoryModel.indexedBranches)) { + indexedBranches.addAll(repositoryModel.indexedBranches); + } } final String oldName = repositoryModel.name; // users palette final Palette<String> usersPalette = new Palette<String>("users", new ListModel<String>( repositoryUsers), new CollectionModel<String>(GitBlit.self().getAllUsernames()), - new ChoiceRenderer<String>("", ""), 10, false); + new StringChoiceRenderer(), 10, false); // teams palette final Palette<String> teamsPalette = new Palette<String>("teams", new ListModel<String>( repositoryTeams), new CollectionModel<String>(GitBlit.self().getAllTeamnames()), - new ChoiceRenderer<String>("", ""), 5, false); + new StringChoiceRenderer(), 8, false); + // indexed local branches palette + List<String> allLocalBranches = new ArrayList<String>(); + allLocalBranches.add(Constants.DEFAULT_BRANCH); + allLocalBranches.addAll(repositoryModel.getLocalBranches()); + boolean luceneEnabled = GitBlit.getBoolean(Keys.web.allowLuceneIndexing, true); + final Palette<String> indexedBranchesPalette = new Palette<String>("indexedBranches", new ListModel<String>( + indexedBranches), new CollectionModel<String>(allLocalBranches), + new StringChoiceRenderer(), 8, false); + indexedBranchesPalette.setEnabled(luceneEnabled); + // federation sets palette List<String> sets = GitBlit.getStrings(Keys.federation.sets); final Palette<String> federationSetsPalette = new Palette<String>("federationSets", new ListModel<String>(federationSets), new CollectionModel<String>(sets), - new ChoiceRenderer<String>("", ""), 5, false); + new StringChoiceRenderer(), 8, false); // pre-receive palette if (!ArrayUtils.isEmpty(repositoryModel.preReceiveScripts)) { @@ -123,7 +146,7 @@ final Palette<String> preReceivePalette = new Palette<String>("preReceiveScripts", new ListModel<String>(preReceiveScripts), new CollectionModel<String>(GitBlit .self().getPreReceiveScriptsUnused(repositoryModel)), - new ChoiceRenderer<String>("", ""), 12, true); + new StringChoiceRenderer(), 12, true); // post-receive palette if (!ArrayUtils.isEmpty(repositoryModel.postReceiveScripts)) { @@ -132,7 +155,27 @@ final Palette<String> postReceivePalette = new Palette<String>("postReceiveScripts", new ListModel<String>(postReceiveScripts), new CollectionModel<String>(GitBlit .self().getPostReceiveScriptsUnused(repositoryModel)), - new ChoiceRenderer<String>("", ""), 12, true); + new StringChoiceRenderer(), 12, true); + + // Dynamic Custom Defined Properties Properties + final List<Entry<String, String>> definedProperties = new ArrayList<Entry<String, String>>(); + List<String> customFields = GitBlit.getStrings(Keys.repository.customFields); + for (String customFieldDef : customFields) { + String[] customFieldProperty = customFieldDef.split("="); + definedProperties.add(new AbstractMap.SimpleEntry<String, String>(customFieldProperty[0], customFieldProperty[1])); + } + + final ListView<Entry<String, String>> customFieldsListView = new ListView<Entry<String, String>>("customFieldsListView", definedProperties) { + @Override + protected void populateItem(ListItem<Entry<String, String>> item) { + String value = repositoryModel.customFields.get(item.getModelObject().getKey()); + + item.add(new Label(item.getModelObject().getKey(), item.getModelObject().getValue())); // Used to get the key later + item.add(new Label("customFieldLabel", item.getModelObject().getValue())); + item.add(new TextField<String>("customFieldValue", new Model<String>(value))); + } + }; + customFieldsListView.setReuseItems(true); CompoundPropertyModel<RepositoryModel> model = new CompoundPropertyModel<RepositoryModel>( repositoryModel); @@ -145,7 +188,7 @@ try { // confirm a repository name was entered if (StringUtils.isEmpty(repositoryModel.name)) { - error("Please set repository name!"); + error(getString("gb.pleaseSetRepositoryName")); return; } @@ -156,35 +199,35 @@ // prohibit folder paths if (repositoryModel.name.startsWith("/")) { - error("Leading root folder references (/) are prohibited."); + error(getString("gb.illegalLeadingSlash")); return; } if (repositoryModel.name.startsWith("../")) { - error("Relative folder references (../) are prohibited."); + error(getString("gb.illegalRelativeSlash")); return; } if (repositoryModel.name.contains("/../")) { - error("Relative folder references (../) are prohibited."); + error(getString("gb.illegalRelativeSlash")); return; } // confirm valid characters in repository name Character c = StringUtils.findInvalidCharacter(repositoryModel.name); if (c != null) { - error(MessageFormat.format("Illegal character ''{0}'' in repository name!", + error(MessageFormat.format(getString("gb.illegalCharacterRepositoryName"), c)); return; } // confirm access restriction selection if (repositoryModel.accessRestriction == null) { - error("Please select access restriction!"); + error(getString("gb.selectAccessRestriction")); return; } // confirm federation strategy selection if (repositoryModel.federationStrategy == null) { - error("Please select federation strategy!"); + error(getString("gb.selectFederationStrategy")); return; } @@ -210,6 +253,14 @@ repositoryModel.mailingLists = new ArrayList<String>(list); } + // indexed branches + List<String> indexedBranches = new ArrayList<String>(); + Iterator<String> branches = indexedBranchesPalette.getSelectedChoices(); + while (branches.hasNext()) { + indexedBranches.add(branches.next()); + } + repositoryModel.indexedBranches = indexedBranches; + // pre-receive scripts List<String> preReceiveScripts = new ArrayList<String>(); Iterator<String> pres = preReceivePalette.getSelectedChoices(); @@ -225,7 +276,16 @@ postReceiveScripts.add(post.next()); } repositoryModel.postReceiveScripts = postReceiveScripts; - + + // Loop over each of the user defined properties + for (int i = 0; i < customFieldsListView.size(); i++) { + ListItem<ListItemModel<String>> item = (ListItem<ListItemModel<String>>) customFieldsListView.get(i); + String key = item.get(0).getId(); // Item 0 is our 'fake' label + String value = ((TextField<String>)item.get(2)).getValue(); // Item 2 is out text box + + repositoryModel.customFields.put(key, value); + } + // save the repository GitBlit.self().updateRepositoryModel(oldName, repositoryModel, isCreate); @@ -261,6 +321,9 @@ } }; + // do not let the browser pre-populate these fields + form.add(new SimpleAttributeModifier("autocomplete", "off")); + // field names reflective match RepositoryModel fields form.add(new TextField<String>("name").setEnabled(isCreate || isAdmin)); form.add(new TextField<String>("description")); @@ -273,11 +336,11 @@ form.add(new TextField<String>("origin").setEnabled(false/* isCreate */)); // allow relinking HEAD to a branch or tag other than master on edit repository - List<String> availableHeads = new ArrayList<String>(); - if (!ArrayUtils.isEmpty(repositoryModel.availableHeads)) { - availableHeads.addAll(repositoryModel.availableHeads); + List<String> availableRefs = new ArrayList<String>(); + if (!ArrayUtils.isEmpty(repositoryModel.availableRefs)) { + availableRefs.addAll(repositoryModel.availableRefs); } - form.add(new DropDownChoice<String>("defaultHead", availableHeads).setEnabled(!isCreate)); + form.add(new DropDownChoice<String>("HEAD", availableRefs).setEnabled(availableRefs.size() > 0)); // federation strategies - remove ORIGIN choice if this repository has // no origin. @@ -289,7 +352,7 @@ form.add(new DropDownChoice<FederationStrategy>("federationStrategy", federationStrategies, new FederationTypeRenderer())); form.add(new CheckBox("useTickets")); - form.add(new CheckBox("useDocs")); + form.add(new CheckBox("useDocs")); form.add(new CheckBox("showRemoteBranches")); form.add(new CheckBox("showReadme")); form.add(new CheckBox("skipSizeCalculation")); @@ -297,6 +360,7 @@ mailingLists = new Model<String>(ArrayUtils.isEmpty(repositoryModel.mailingLists) ? "" : StringUtils.flattenStrings(repositoryModel.mailingLists, " ")); form.add(new TextField<String>("mailingLists", mailingLists)); + form.add(indexedBranchesPalette); form.add(usersPalette); form.add(teamsPalette); form.add(federationSetsPalette); @@ -306,6 +370,14 @@ form.add(postReceivePalette); form.add(new BulletListPanel("inheritedPostReceive", "inherited", GitBlit.self() .getPostReceiveScriptsInherited(repositoryModel))); + + WebMarkupContainer customFiledsSection = new WebMarkupContainer("customFiledsSection") { + public boolean isVisible() { + return GitBlit.getString(Keys.repository.customFields, "").isEmpty() == false; + }; + }; + customFiledsSection.add(customFieldsListView); + form.add(customFiledsSection); form.add(new Button("save")); Button cancel = new Button("cancel") { -- Gitblit v1.9.1