From 13417cf9c6eec555b51da49742e47939d2f5715b Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Fri, 19 Oct 2012 22:47:33 -0400
Subject: [PATCH] Exclude submodules from zip downloads (issue 151)

---
 src/com/gitblit/client/GitblitPanel.java |  248 ++++++++++++++++++++++++++++++++++++-------------
 1 files changed, 182 insertions(+), 66 deletions(-)

diff --git a/src/com/gitblit/client/GitblitPanel.java b/src/com/gitblit/client/GitblitPanel.java
index 911ec0c..f14ce79 100644
--- a/src/com/gitblit/client/GitblitPanel.java
+++ b/src/com/gitblit/client/GitblitPanel.java
@@ -17,96 +17,212 @@
 
 import java.awt.BorderLayout;
 import java.awt.Component;
+import java.awt.Insets;
 import java.io.IOException;
-import java.util.Date;
-import java.util.Map;
+import java.util.List;
 
 import javax.swing.JPanel;
-import javax.swing.JScrollPane;
 import javax.swing.JTabbedPane;
-import javax.swing.JTable;
-import javax.swing.table.DefaultTableColumnModel;
-import javax.swing.table.TableCellRenderer;
-import javax.swing.table.TableColumn;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
 
-import com.gitblit.models.RepositoryModel;
-import com.gitblit.utils.RpcUtils;
+import com.gitblit.client.ClosableTabComponent.CloseTabListener;
+import com.gitblit.models.FeedModel;
 
-public class GitblitPanel extends JPanel {
+/**
+ * GitblitPanel is a container for the repository, users, settings, etc panels.
+ * 
+ * @author James Moger
+ * 
+ */
+public class GitblitPanel extends JPanel implements CloseTabListener {
 
 	private static final long serialVersionUID = 1L;
 
-	String url;
-	String account;
-	char[] password;
+	private final RegistrationsDialog.RegistrationListener listener;
 
-	JTabbedPane tabs;
+	private GitblitClient gitblit;
 
-	private JTable repositoriesTable;
+	private JTabbedPane tabs;
 
-	public GitblitPanel(String url, String account, char[] password) {
-		this.url = url;
-		this.account = account;
-		this.password = password;
+	private RepositoriesPanel repositoriesPanel;
 
-		tabs = new JTabbedPane(JTabbedPane.TOP);
-		repositoriesTable = new JTable();
-		repositoriesTable.setDefaultRenderer(Date.class, new DateCellRenderer(null));
+	private FeedsPanel feedsPanel;
 
-		tabs.addTab("Repositories", new JScrollPane(repositoriesTable));
+	private UsersPanel usersPanel;
+	
+	private TeamsPanel teamsPanel;
+
+	private SettingsPanel settingsPanel;
+
+	private StatusPanel statusPanel;
+
+	public GitblitPanel(GitblitRegistration reg, RegistrationsDialog.RegistrationListener listener) {
+		this.gitblit = new GitblitClient(reg);
+		this.listener = listener;
+
+		tabs = new JTabbedPane(JTabbedPane.BOTTOM);
+		tabs.addTab(Translation.get("gb.repositories"), createRepositoriesPanel());
+		tabs.addTab(Translation.get("gb.activity"), createFeedsPanel());
+		tabs.addTab(Translation.get("gb.teams"), createTeamsPanel());
+		tabs.addTab(Translation.get("gb.users"), createUsersPanel());
+		tabs.addTab(Translation.get("gb.settings"), createSettingsPanel());
+		tabs.addTab(Translation.get("gb.status"), createStatusPanel());
+		tabs.addChangeListener(new ChangeListener() {
+			public void stateChanged(ChangeEvent e) {
+				tabs.getSelectedComponent().requestFocus();
+			}
+		});
 
 		setLayout(new BorderLayout());
 		add(tabs, BorderLayout.CENTER);
 	}
 
+	private JPanel createRepositoriesPanel() {
+		repositoriesPanel = new RepositoriesPanel(gitblit) {
+
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void subscribeFeeds(List<FeedModel> feeds) {
+				GitblitPanel.this.subscribeFeeds(feeds);
+			}
+
+			@Override
+			protected void updateUsersTable() {
+				usersPanel.updateTable(false);
+			}
+			
+			@Override
+			protected void updateTeamsTable() {
+				teamsPanel.updateTable(false);
+			}
+
+		};
+		return repositoriesPanel;
+	}
+
+	private JPanel createFeedsPanel() {
+		feedsPanel = new FeedsPanel(gitblit) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void subscribeFeeds(List<FeedModel> feeds) {
+				GitblitPanel.this.subscribeFeeds(feeds);
+			}
+		};
+		return feedsPanel;
+	}
+
+	private JPanel createUsersPanel() {
+		usersPanel = new UsersPanel(gitblit) {
+			
+			private static final long serialVersionUID = 1L;
+			
+			@Override
+			protected void updateTeamsTable() {
+				teamsPanel.updateTable(false);
+			}
+		};
+		return usersPanel;
+	}
+	
+	private JPanel createTeamsPanel() {
+		teamsPanel = new TeamsPanel(gitblit) {
+			
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void updateUsersTable() {
+				usersPanel.updateTable(false);
+			}
+		};
+		return teamsPanel;
+	}	
+
+	private JPanel createSettingsPanel() {
+		settingsPanel = new SettingsPanel(gitblit);
+		return settingsPanel;
+	}
+
+	private JPanel createStatusPanel() {
+		statusPanel = new StatusPanel(gitblit);
+		return statusPanel;
+	}
+
 	public void login() throws IOException {
-		refreshRepositoriesTable();
-	}
+		gitblit.login();
 
-	private void refreshRepositoriesTable() throws IOException {
-		Map<String, RepositoryModel> repositories = RpcUtils
-				.getRepositories(url, account, password);
-		repositoriesTable.setModel(new RepositoriesModel(repositories));
+		repositoriesPanel.updateTable(true);
+		feedsPanel.updateTable(true);
 
-		packColumns(repositoriesTable, 2);
-	}
+		if (gitblit.allowManagement()) {
+			if (gitblit.getProtocolVersion() >= 2) {
+				// refresh teams panel
+				teamsPanel.updateTable(false);
+			} else {
+				// remove teams panel
+				String teams = Translation.get("gb.teams");
+				for (int i = 0; i < tabs.getTabCount(); i++) {
+					if (teams.equals(tabs.getTitleAt(i))) {
+						tabs.removeTabAt(i);
+						break;
+					}
+				}
+			}
+			usersPanel.updateTable(false);
+		} else {
+			// user does not have administrator privileges
+			// hide admin repository buttons
+			repositoriesPanel.disableManagement();
 
-	private void packColumns(JTable table, int margin) {
-		for (int c = 0; c < table.getColumnCount(); c++) {
-			packColumn(table, c, 4);
+			while (tabs.getTabCount() > 2) {
+				// remove all management/administration tabs
+				tabs.removeTabAt(2);
+			}
+		}
+
+		if (gitblit.allowAdministration()) {
+			settingsPanel.updateTable(true);
+			statusPanel.updateTable(false);
+		} else {
+			// remove the settings and status tab
+			String[] titles = { Translation.get("gb.settings"), Translation.get("gb.status") };
+			for (String title : titles) {
+				for (int i = 0; i < tabs.getTabCount(); i++) {
+					if (tabs.getTitleAt(i).equals(title)) {
+						tabs.removeTabAt(i);
+						break;
+					}
+				}
+			}
 		}
 	}
 
-	// Sets the preferred width of the visible column specified by vColIndex.
-	// The column will be just wide enough to show the column head and the
-	// widest cell in the column. margin pixels are added to the left and right
-	// (resulting in an additional width of 2*margin pixels).
-	private void packColumn(JTable table, int vColIndex, int margin) {
-		DefaultTableColumnModel colModel = (DefaultTableColumnModel) table.getColumnModel();
-		TableColumn col = colModel.getColumn(vColIndex);
-		int width = 0;
-
-		// Get width of column header
-		TableCellRenderer renderer = col.getHeaderRenderer();
-		if (renderer == null) {
-			renderer = table.getTableHeader().getDefaultRenderer();
-		}
-		Component comp = renderer.getTableCellRendererComponent(table, col.getHeaderValue(), false,
-				false, 0, 0);
-		width = comp.getPreferredSize().width;
-
-		// Get maximum width of column data
-		for (int r = 0; r < table.getRowCount(); r++) {
-			renderer = table.getCellRenderer(r, vColIndex);
-			comp = renderer.getTableCellRendererComponent(table, table.getValueAt(r, vColIndex),
-					false, false, r, vColIndex);
-			width = Math.max(width, comp.getPreferredSize().width);
-		}
-
-		// Add margin
-		width += 2 * margin;
-
-		// Set the width
-		col.setPreferredWidth(width);
+	@Override
+	public Insets getInsets() {
+		return Utils.INSETS;
 	}
-}
+
+	@Override
+	public void closeTab(Component c) {
+		gitblit = null;
+	}
+
+	protected void subscribeFeeds(final List<FeedModel> feeds) {
+		SubscriptionsDialog dialog = new SubscriptionsDialog(feeds) {
+
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			public void save() {
+				gitblit.updateSubscribedFeeds(feeds);
+				listener.saveRegistration(gitblit.reg.name, gitblit.reg);
+				setVisible(false);
+				repositoriesPanel.updateTable(false);
+			}
+		};
+		dialog.setLocationRelativeTo(GitblitPanel.this);
+		dialog.setVisible(true);
+	}
+}
\ No newline at end of file

--
Gitblit v1.9.1