From f08aab5c5e632431635e73b47b6096dc47243755 Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Tue, 13 Dec 2011 08:37:02 -0500
Subject: [PATCH] Teams JSON-RPC support

---
 src/com/gitblit/client/EditUserDialog.java |   66 +++++++++++++++++++++++++++-----
 1 files changed, 55 insertions(+), 11 deletions(-)

diff --git a/src/com/gitblit/client/EditUserDialog.java b/src/com/gitblit/client/EditUserDialog.java
index 246a077..3f1b929 100644
--- a/src/com/gitblit/client/EditUserDialog.java
+++ b/src/com/gitblit/client/EditUserDialog.java
@@ -26,6 +26,7 @@
 import java.awt.event.KeyEvent;
 import java.text.MessageFormat;
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
@@ -40,6 +41,7 @@
 import javax.swing.JPanel;
 import javax.swing.JPasswordField;
 import javax.swing.JRootPane;
+import javax.swing.JTabbedPane;
 import javax.swing.JTextField;
 import javax.swing.KeyStroke;
 
@@ -47,6 +49,7 @@
 import com.gitblit.Keys;
 import com.gitblit.models.RepositoryModel;
 import com.gitblit.models.ServerSettings;
+import com.gitblit.models.TeamModel;
 import com.gitblit.models.UserModel;
 import com.gitblit.utils.StringUtils;
 
@@ -75,23 +78,25 @@
 	private JCheckBox notFederatedCheckbox;
 
 	private JPalette<String> repositoryPalette;
+	
+	private JPalette<TeamModel> teamsPalette;
 
 	private Set<String> usernames;
 
-	public EditUserDialog(ServerSettings settings) {
-		this(new UserModel(""), settings);
+	public EditUserDialog(int protocolVersion, ServerSettings settings) {
+		this(protocolVersion, new UserModel(""), settings);
 		this.isCreate = true;
 		setTitle(Translation.get("gb.newUser"));
 	}
 
-	public EditUserDialog(UserModel anUser, ServerSettings settings) {
+	public EditUserDialog(int protocolVersion, UserModel anUser, ServerSettings settings) {
 		super();
 		this.username = anUser.username;
 		this.user = new UserModel("");
 		this.settings = settings;
 		this.usernames = new HashSet<String>();
 		this.isCreate = false;
-		initialize(anUser);
+		initialize(protocolVersion, anUser);
 		setModal(true);
 		setTitle(Translation.get("gb.edit") + ": " + anUser.username);
 		setIconImage(new ImageIcon(getClass().getResource("/gitblt-favicon.png")).getImage());
@@ -109,7 +114,7 @@
 		return rootPane;
 	}
 
-	private void initialize(UserModel anUser) {
+	private void initialize(int protocolVersion, UserModel anUser) {
 		usernameField = new JTextField(anUser.username == null ? "" : anUser.username, 25);
 		passwordField = new JPasswordField(anUser.password == null ? "" : anUser.password, 25);
 		confirmPasswordField = new JPasswordField(anUser.password == null ? "" : anUser.password,
@@ -127,11 +132,40 @@
 		fieldsPanel.add(newFieldPanel(Translation.get("gb.excludeFromFederation"),
 				notFederatedCheckbox));
 
+		final Insets _insets = new Insets(5, 5, 5, 5);
 		repositoryPalette = new JPalette<String>();
-		JPanel panel = new JPanel(new BorderLayout());
-		panel.add(fieldsPanel, BorderLayout.NORTH);
-		panel.add(newFieldPanel(Translation.get("gb.restrictedRepositories"), repositoryPalette),
-				BorderLayout.CENTER);
+		teamsPalette = new JPalette<TeamModel>();
+		
+		JPanel fieldsPanelTop = new JPanel(new BorderLayout());
+		fieldsPanelTop.add(fieldsPanel, BorderLayout.NORTH);
+		
+		JPanel repositoriesPanel = new JPanel(new BorderLayout()) {
+
+			private static final long serialVersionUID = 1L;
+
+			public Insets getInsets() {
+				return _insets;
+			}
+		};
+		repositoriesPanel.add(repositoryPalette, BorderLayout.CENTER);
+
+		JPanel teamsPanel = new JPanel(new BorderLayout()) {
+
+			private static final long serialVersionUID = 1L;
+
+			public Insets getInsets() {
+				return _insets;
+			}
+		};
+		teamsPanel.add(teamsPalette, BorderLayout.CENTER);
+
+		JTabbedPane panel = new JTabbedPane(JTabbedPane.TOP);
+		panel.addTab(Translation.get("gb.general"), fieldsPanelTop);
+		if (protocolVersion > 1) {
+			panel.addTab(Translation.get("gb.teamMemberships"), teamsPanel);
+		}
+		panel.addTab(Translation.get("gb.restrictedRepositories"), repositoriesPanel);
+
 
 		JButton createButton = new JButton(Translation.get("gb.save"));
 		createButton.addActionListener(new ActionListener() {
@@ -154,8 +188,7 @@
 		JPanel controls = new JPanel();
 		controls.add(cancelButton);
 		controls.add(createButton);
-
-		final Insets _insets = new Insets(5, 5, 5, 5);
+		
 		JPanel centerPanel = new JPanel(new BorderLayout(5, 5)) {
 
 			private static final long serialVersionUID = 1L;
@@ -259,6 +292,9 @@
 
 		user.repositories.clear();
 		user.repositories.addAll(repositoryPalette.getSelections());
+		
+		user.teams.clear();
+		user.teams.addAll(teamsPalette.getSelections());
 		return true;
 	}
 
@@ -287,6 +323,14 @@
 		}
 		repositoryPalette.setObjects(restricted, selected);
 	}
+	
+	public void setTeams(List<TeamModel> teams, List<TeamModel> selected) {
+		Collections.sort(teams);
+		if (selected != null) {
+			Collections.sort(selected);
+		}
+		teamsPalette.setObjects(teams, selected);
+	}
 
 	public UserModel getUser() {
 		if (canceled) {

--
Gitblit v1.9.1