From 9effe1630d97039b3e01cd9b58ed07e75be1d63c Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Mon, 25 Feb 2013 08:40:30 -0500
Subject: [PATCH] Merge pull request #75 from thefake/master

---
 src/com/gitblit/client/EditRepositoryDialog.java |  116 +++++++++++++++++++++++++++++++++++++++++++++++++---------
 1 files changed, 98 insertions(+), 18 deletions(-)

diff --git a/src/com/gitblit/client/EditRepositoryDialog.java b/src/com/gitblit/client/EditRepositoryDialog.java
index 0adf8a8..8851de4 100644
--- a/src/com/gitblit/client/EditRepositoryDialog.java
+++ b/src/com/gitblit/client/EditRepositoryDialog.java
@@ -24,6 +24,8 @@
 import java.awt.Insets;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
+import java.awt.event.ItemEvent;
+import java.awt.event.ItemListener;
 import java.awt.event.KeyEvent;
 import java.text.MessageFormat;
 import java.util.ArrayList;
@@ -36,7 +38,7 @@
 
 import javax.swing.BoxLayout;
 import javax.swing.ButtonGroup;
-import javax.swing.DefaultComboBoxModel;
+import javax.swing.DefaultListCellRenderer;
 import javax.swing.ImageIcon;
 import javax.swing.JButton;
 import javax.swing.JCheckBox;
@@ -59,6 +61,7 @@
 import com.gitblit.Constants.AccessRestrictionType;
 import com.gitblit.Constants.AuthorizationControl;
 import com.gitblit.Constants.FederationStrategy;
+import com.gitblit.Constants.RegistrantType;
 import com.gitblit.models.RegistrantAccessPermission;
 import com.gitblit.models.RepositoryModel;
 import com.gitblit.utils.ArrayUtils;
@@ -113,10 +116,16 @@
 
 	private JComboBox federationStrategy;
 
-	private JComboBox ownerField;
+	private JPalette<String> ownersPalette;
 
 	private JComboBox headRefField;
-
+	
+	private JComboBox gcPeriod;
+	
+	private JTextField gcThreshold;
+	
+	private JComboBox maxActivityCommits;
+	
 	private RegistrantPermissionsPanel usersPalette;
 
 	private JPalette<String> setsPalette;
@@ -189,8 +198,15 @@
 					anRepository.availableRefs.toArray());
 			headRefField.setSelectedItem(anRepository.HEAD);
 		}
+		
+		Integer []  gcPeriods =  { 1, 2, 3, 4, 5, 7, 10, 14 };
+		gcPeriod = new JComboBox(gcPeriods);
+		gcPeriod.setSelectedItem(anRepository.gcPeriod);
+		
+		gcThreshold = new JTextField(8);
+		gcThreshold.setText(anRepository.gcThreshold);
 
-		ownerField = new JComboBox();
+		ownersPalette = new JPalette<String>(true);
 
 		useTickets = new JCheckBox(Translation.get("gb.useTicketsDescription"),
 				anRepository.useTickets);
@@ -210,6 +226,9 @@
 		isFrozen = new JCheckBox(Translation.get("gb.isFrozenDescription"),
 				anRepository.isFrozen);
 
+		maxActivityCommits = new JComboBox(new Integer [] { -1, 0, 25, 50, 75, 100, 150, 250, 500 });
+		maxActivityCommits.setSelectedItem(anRepository.maxActivityCommits);
+
 		mailingListsField = new JTextField(
 				ArrayUtils.isEmpty(anRepository.mailingLists) ? ""
 						: StringUtils.flattenStrings(anRepository.mailingLists,
@@ -218,13 +237,41 @@
 		accessRestriction = new JComboBox(AccessRestrictionType.values());
 		accessRestriction.setRenderer(new AccessRestrictionRenderer());
 		accessRestriction.setSelectedItem(anRepository.accessRestriction);
+		accessRestriction.addItemListener(new ItemListener() {
+			@Override
+			public void itemStateChanged(ItemEvent e) {
+				if (e.getStateChange() == ItemEvent.SELECTED) {
+					AccessRestrictionType art = (AccessRestrictionType) accessRestriction.getSelectedItem();
+					EditRepositoryDialog.this.setupAccessPermissions(art);
+				}
+			}
+		});
 		
 		boolean authenticated = anRepository.authorizationControl != null 
 				&& AuthorizationControl.AUTHENTICATED.equals(anRepository.authorizationControl);
 		allowAuthenticated = new JRadioButton(Translation.get("gb.allowAuthenticatedDescription"));
 		allowAuthenticated.setSelected(authenticated);
+		allowAuthenticated.addItemListener(new ItemListener() {
+			@Override
+			public void itemStateChanged(ItemEvent e) {
+				if (e.getStateChange() == ItemEvent.SELECTED) {					
+					usersPalette.setEnabled(false);
+					teamsPalette.setEnabled(false);
+				}
+			}
+		});
+		
 		allowNamed = new JRadioButton(Translation.get("gb.allowNamedDescription"));
 		allowNamed.setSelected(!authenticated);
+		allowNamed.addItemListener(new ItemListener() {
+			@Override
+			public void itemStateChanged(ItemEvent e) {
+				if (e.getStateChange() == ItemEvent.SELECTED) {
+					usersPalette.setEnabled(true);
+					teamsPalette.setEnabled(true);
+				}
+			}
+		});
 		
 		ButtonGroup group = new ButtonGroup();
 		group.add(allowAuthenticated);
@@ -255,7 +302,8 @@
 		fieldsPanel
 				.add(newFieldPanel(Translation.get("gb.origin"), originField));
 		fieldsPanel.add(newFieldPanel(Translation.get("gb.headRef"), headRefField));
-		fieldsPanel.add(newFieldPanel(Translation.get("gb.owner"), ownerField));
+		fieldsPanel.add(newFieldPanel(Translation.get("gb.gcPeriod"), gcPeriod));
+		fieldsPanel.add(newFieldPanel(Translation.get("gb.gcThreshold"), gcThreshold));
 
 		fieldsPanel.add(newFieldPanel(Translation.get("gb.enableTickets"),
 				useTickets));
@@ -270,6 +318,8 @@
 						skipSizeCalculation));
 		fieldsPanel.add(newFieldPanel(Translation.get("gb.skipSummaryMetrics"),
 				skipSummaryMetrics));
+		fieldsPanel.add(newFieldPanel(Translation.get("gb.maxActivityCommits"),
+				maxActivityCommits));
 		fieldsPanel.add(newFieldPanel(Translation.get("gb.mailingLists"),
 				mailingListsField));
 
@@ -281,10 +331,15 @@
 		clonePushPanel
 		.add(newFieldPanel(Translation.get("gb.verifyCommitter"), verifyCommitter));
 
-		usersPalette = new RegistrantPermissionsPanel();
+		usersPalette = new RegistrantPermissionsPanel(RegistrantType.USER);
+
+		JPanel northFieldsPanel = new JPanel(new BorderLayout(0, 5));
+		northFieldsPanel.add(newFieldPanel(Translation.get("gb.owners"), ownersPalette), BorderLayout.NORTH);
+		northFieldsPanel.add(newFieldPanel(Translation.get("gb.accessRestriction"),
+				accessRestriction), BorderLayout.CENTER);
+
 		JPanel northAccessPanel = new JPanel(new BorderLayout(5, 5));
-		northAccessPanel.add(newFieldPanel(Translation.get("gb.accessRestriction"),
-				accessRestriction), BorderLayout.NORTH);
+		northAccessPanel.add(northFieldsPanel, BorderLayout.NORTH);
 		northAccessPanel.add(newFieldPanel(Translation.get("gb.authorizationControl"),
 				authorizationPanel), BorderLayout.CENTER);
 		northAccessPanel.add(clonePushPanel, BorderLayout.SOUTH);
@@ -294,7 +349,7 @@
 		accessPanel.add(newFieldPanel(Translation.get("gb.userPermissions"),
 						usersPalette), BorderLayout.CENTER);
 
-		teamsPalette = new RegistrantPermissionsPanel();
+		teamsPalette = new RegistrantPermissionsPanel(RegistrantType.TEAM);
 		JPanel teamsPanel = new JPanel(new BorderLayout(5, 5));
 		teamsPanel.add(
 				newFieldPanel(Translation.get("gb.teamPermissions"),
@@ -349,6 +404,8 @@
 		panel.addTab(Translation.get("gb.customFields"), customFieldsScrollPane);
 		
 
+		setupAccessPermissions(anRepository.accessRestriction);
+
 		JButton createButton = new JButton(Translation.get("gb.save"));
 		createButton.addActionListener(new ActionListener() {
 			public void actionPerformed(ActionEvent event) {
@@ -402,6 +459,27 @@
 		panel.add(fieldLabel);
 		panel.add(comp);
 		return panel;
+	}
+	
+	private void setupAccessPermissions(AccessRestrictionType art) {
+		if (AccessRestrictionType.NONE.equals(art)) {
+			usersPalette.setEnabled(false);
+			teamsPalette.setEnabled(false);
+			
+			allowAuthenticated.setEnabled(false);
+			allowNamed.setEnabled(false);
+			verifyCommitter.setEnabled(false);
+		} else {
+			allowAuthenticated.setEnabled(true);
+			allowNamed.setEnabled(true);
+			verifyCommitter.setEnabled(true);
+			
+			if (allowNamed.isSelected()) {
+				usersPalette.setEnabled(true);
+				teamsPalette.setEnabled(true);
+			}
+		}
+
 	}
 
 	private boolean validateFields() {
@@ -477,16 +555,19 @@
 
 		repository.name = rname;
 		repository.description = descriptionField.getText();
-		repository.owner = ownerField.getSelectedItem() == null ? null
-				: ownerField.getSelectedItem().toString();
+		repository.owners.clear();
+		repository.owners.addAll(ownersPalette.getSelections());
 		repository.HEAD = headRefField.getSelectedItem() == null ? null
 				: headRefField.getSelectedItem().toString();
+		repository.gcPeriod = (Integer) gcPeriod.getSelectedItem();
+		repository.gcThreshold = gcThreshold.getText();
 		repository.useTickets = useTickets.isSelected();
 		repository.useDocs = useDocs.isSelected();
 		repository.showRemoteBranches = showRemoteBranches.isSelected();
 		repository.showReadme = showReadme.isSelected();
 		repository.skipSizeCalculation = skipSizeCalculation.isSelected();
 		repository.skipSummaryMetrics = skipSummaryMetrics.isSelected();
+		repository.maxActivityCommits = (Integer) maxActivityCommits.getSelectedItem();
 		
 		repository.isFrozen = isFrozen.isSelected();
 		repository.allowForks = allowForks.isSelected();
@@ -538,6 +619,7 @@
 	
 	public void setAccessRestriction(AccessRestrictionType restriction) {
 		this.accessRestriction.setSelectedItem(restriction);
+		setupAccessPermissions(restriction);
 	}
 
 	public void setAuthorizationControl(AuthorizationControl authorization) {
@@ -546,11 +628,8 @@
 		this.allowNamed.setSelected(!authenticated);
 	}
 
-	public void setUsers(String owner, List<String> all, List<RegistrantAccessPermission> permissions) {
-		ownerField.setModel(new DefaultComboBoxModel(all.toArray()));
-		if (!StringUtils.isEmpty(owner)) {
-			ownerField.setSelectedItem(owner);
-		}
+	public void setUsers(List<String> owners, List<String> all, List<RegistrantAccessPermission> permissions) {
+		ownersPalette.setObjects(all, owners);
 		usersPalette.setObjects(all, permissions);
 	}
 
@@ -659,14 +738,15 @@
 	 * restriction.
 	 * 
 	 */
-	private class AccessRestrictionRenderer extends JLabel implements
-			ListCellRenderer {
+	private class AccessRestrictionRenderer extends DefaultListCellRenderer {
 
 		private static final long serialVersionUID = 1L;
 
 		@Override
 		public Component getListCellRendererComponent(JList list, Object value,
 				int index, boolean isSelected, boolean cellHasFocus) {
+			super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
+			
 			if (value instanceof AccessRestrictionType) {
 				AccessRestrictionType restriction = (AccessRestrictionType) value;
 				switch (restriction) {

--
Gitblit v1.9.1