From 27ae9095639bb228a1b7ff86a3ebe4264abf05be Mon Sep 17 00:00:00 2001
From: mschaefers <mschaefers@scoop-gmbh.de>
Date: Thu, 29 Nov 2012 12:33:09 -0500
Subject: [PATCH] feature: when using LdapUserService one can configure Gitblit to fetch all users from ldap that can possibly login. This allows to see newly generated LDAP users instantly in Gitblit. By now an LDAP user had to log in once to appear in GitBlit.

---
 src/com/gitblit/client/EditRepositoryDialog.java |  115 ++++++++++++++++++++++++++++++++++++++++++++++++---------
 1 files changed, 96 insertions(+), 19 deletions(-)

diff --git a/src/com/gitblit/client/EditRepositoryDialog.java b/src/com/gitblit/client/EditRepositoryDialog.java
index e15b154..a927496 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;
@@ -37,6 +39,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 +62,8 @@
 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;
 import com.gitblit.utils.StringUtils;
@@ -115,12 +120,16 @@
 	private JComboBox ownerField;
 
 	private JComboBox headRefField;
+	
+	private JComboBox gcPeriod;
+	
+	private JTextField gcThreshold;
 
-	private JPalette<String> usersPalette;
+	private RegistrantPermissionsPanel usersPalette;
 
 	private JPalette<String> setsPalette;
 
-	private JPalette<String> teamsPalette;
+	private RegistrantPermissionsPanel teamsPalette;
 	
 	private JPalette<String> indexedBranchesPalette;
 
@@ -188,6 +197,13 @@
 					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();
 
@@ -217,13 +233,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);
@@ -254,7 +298,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));
@@ -280,23 +325,28 @@
 		clonePushPanel
 		.add(newFieldPanel(Translation.get("gb.verifyCommitter"), verifyCommitter));
 
-		usersPalette = new JPalette<String>();
-		JPanel northAccessPanel = new JPanel(new BorderLayout(5, 5));
-		northAccessPanel.add(newFieldPanel(Translation.get("gb.accessRestriction"),
+		usersPalette = new RegistrantPermissionsPanel(RegistrantType.USER);
+
+		JPanel northFieldsPanel = new JPanel(new GridLayout(0, 1, 0, 5));
+		northFieldsPanel.add(newFieldPanel(Translation.get("gb.owner"), ownerField));
+		northFieldsPanel.add(newFieldPanel(Translation.get("gb.accessRestriction"),
 				accessRestriction), BorderLayout.NORTH);
+
+		JPanel northAccessPanel = new JPanel(new BorderLayout(5, 5));
+		northAccessPanel.add(northFieldsPanel, BorderLayout.NORTH);
 		northAccessPanel.add(newFieldPanel(Translation.get("gb.authorizationControl"),
 				authorizationPanel), BorderLayout.CENTER);
 		northAccessPanel.add(clonePushPanel, BorderLayout.SOUTH);
 
 		JPanel accessPanel = new JPanel(new BorderLayout(5, 5));
 		accessPanel.add(northAccessPanel, BorderLayout.NORTH);
-		accessPanel.add(newFieldPanel(Translation.get("gb.permittedUsers"),
+		accessPanel.add(newFieldPanel(Translation.get("gb.userPermissions"),
 						usersPalette), BorderLayout.CENTER);
 
-		teamsPalette = new JPalette<String>();
+		teamsPalette = new RegistrantPermissionsPanel(RegistrantType.TEAM);
 		JPanel teamsPanel = new JPanel(new BorderLayout(5, 5));
 		teamsPanel.add(
-				newFieldPanel(Translation.get("gb.permittedTeams"),
+				newFieldPanel(Translation.get("gb.teamPermissions"),
 						teamsPalette), BorderLayout.CENTER);
 
 		setsPalette = new JPalette<String>();
@@ -347,6 +397,8 @@
 		
 		panel.addTab(Translation.get("gb.customFields"), customFieldsScrollPane);
 		
+
+		setupAccessPermissions(anRepository.accessRestriction);
 
 		JButton createButton = new JButton(Translation.get("gb.save"));
 		createButton.addActionListener(new ActionListener() {
@@ -401,6 +453,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() {
@@ -480,6 +553,8 @@
 				: ownerField.getSelectedItem().toString();
 		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();
@@ -537,6 +612,7 @@
 	
 	public void setAccessRestriction(AccessRestrictionType restriction) {
 		this.accessRestriction.setSelectedItem(restriction);
+		setupAccessPermissions(restriction);
 	}
 
 	public void setAuthorizationControl(AuthorizationControl authorization) {
@@ -545,16 +621,16 @@
 		this.allowNamed.setSelected(!authenticated);
 	}
 
-	public void setUsers(String owner, List<String> all, List<String> selected) {
+	public void setUsers(String owner, List<String> all, List<RegistrantAccessPermission> permissions) {
 		ownerField.setModel(new DefaultComboBoxModel(all.toArray()));
 		if (!StringUtils.isEmpty(owner)) {
 			ownerField.setSelectedItem(owner);
 		}
-		usersPalette.setObjects(all, selected);
+		usersPalette.setObjects(all, permissions);
 	}
 
-	public void setTeams(List<String> all, List<String> selected) {
-		teamsPalette.setObjects(all, selected);
+	public void setTeams(List<String> all, List<RegistrantAccessPermission> permissions) {
+		teamsPalette.setObjects(all, permissions);
 	}
 
 	public void setRepositories(List<RepositoryModel> repositories) {
@@ -607,12 +683,12 @@
 		return repository;
 	}
 
-	public List<String> getPermittedUsers() {
-		return usersPalette.getSelections();
+	public List<RegistrantAccessPermission> getUserAccessPermissions() {
+		return usersPalette.getPermissions();
 	}
 
-	public List<String> getPermittedTeams() {
-		return teamsPalette.getSelections();
+	public List<RegistrantAccessPermission> getTeamAccessPermissions() {
+		return teamsPalette.getPermissions();
 	}
 	
 	public void setCustomFields(RepositoryModel repository, Map<String, String> customFields) {
@@ -658,14 +734,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