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 |   92 ++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 80 insertions(+), 12 deletions(-)

diff --git a/src/com/gitblit/wicket/pages/EditRepositoryPage.java b/src/com/gitblit/wicket/pages/EditRepositoryPage.java
index 1eae2c9..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.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;
@@ -82,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>();
@@ -98,6 +107,9 @@
 				Collections.sort(repositoryUsers);
 			}
 			federationSets.addAll(repositoryModel.federationSets);
+			if (!ArrayUtils.isEmpty(repositoryModel.indexedBranches)) {
+				indexedBranches.addAll(repositoryModel.indexedBranches);
+			}
 		}
 
 		final String oldName = repositoryModel.name;
@@ -109,13 +121,23 @@
 		// teams palette
 		final Palette<String> teamsPalette = new Palette<String>("teams", new ListModel<String>(
 				repositoryTeams), new CollectionModel<String>(GitBlit.self().getAllTeamnames()),
-				new StringChoiceRenderer(), 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 StringChoiceRenderer(), 5, false);
+				new StringChoiceRenderer(), 8, false);
 
 		// pre-receive palette
 		if (!ArrayUtils.isEmpty(repositoryModel.preReceiveScripts)) {
@@ -134,6 +156,26 @@
 				new ListModel<String>(postReceiveScripts), new CollectionModel<String>(GitBlit
 						.self().getPostReceiveScriptsUnused(repositoryModel)),
 				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);
@@ -146,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;
 					}
 
@@ -157,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;
 					}
 
@@ -211,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();
@@ -226,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);
 
@@ -281,7 +340,7 @@
 		if (!ArrayUtils.isEmpty(repositoryModel.availableRefs)) {
 			availableRefs.addAll(repositoryModel.availableRefs);
 		}
-		form.add(new DropDownChoice<String>("HEAD", availableRefs).setEnabled(!isCreate));
+		form.add(new DropDownChoice<String>("HEAD", availableRefs).setEnabled(availableRefs.size() > 0));
 
 		// federation strategies - remove ORIGIN choice if this repository has
 		// no origin.
@@ -293,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"));
@@ -301,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);
@@ -310,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