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/SearchDialog.java |  126 +++++++++++++++++++++++++++--------------
 1 files changed, 82 insertions(+), 44 deletions(-)

diff --git a/src/com/gitblit/client/SearchDialog.java b/src/com/gitblit/client/SearchDialog.java
index 5dbea78..829bc52 100644
--- a/src/com/gitblit/client/SearchDialog.java
+++ b/src/com/gitblit/client/SearchDialog.java
@@ -16,6 +16,7 @@
 package com.gitblit.client;
 
 import java.awt.BorderLayout;
+import java.awt.Cursor;
 import java.awt.FlowLayout;
 import java.awt.Insets;
 import java.awt.Rectangle;
@@ -43,8 +44,8 @@
 import javax.swing.event.ListSelectionListener;
 
 import com.gitblit.Constants;
+import com.gitblit.models.FeedEntryModel;
 import com.gitblit.models.RepositoryModel;
-import com.gitblit.models.SyndicatedEntryModel;
 import com.gitblit.utils.StringUtils;
 
 /**
@@ -58,9 +59,11 @@
 
 	private static final long serialVersionUID = 1L;
 
+	private final boolean isSearch;
+
 	private final GitblitClient gitblit;
 
-	private SyndicatedEntryTableModel tableModel;
+	private FeedEntryTableModel tableModel;
 
 	private HeaderPanel header;
 
@@ -84,13 +87,14 @@
 
 	private JButton next;
 
-	public SearchDialog(GitblitClient gitblit) {
+	public SearchDialog(GitblitClient gitblit, boolean isSearch) {
 		super();
 		this.gitblit = gitblit;
-		setTitle(Translation.get("gb.search"));
+		this.isSearch = isSearch;
+		setTitle(Translation.get(isSearch ? "gb.search" : "gb.log"));
 		setIconImage(new ImageIcon(getClass().getResource("/gitblt-favicon.png")).getImage());
 		initialize();
-		setSize(900, 400);
+		setSize(900, 550);
 	}
 
 	private void initialize() {
@@ -113,7 +117,7 @@
 			}
 		});
 
-		final JButton search = new JButton(Translation.get("gb.search"));
+		final JButton search = new JButton(Translation.get(isSearch ? "gb.search" : "gb.refresh"));
 		search.addActionListener(new ActionListener() {
 			public void actionPerformed(ActionEvent e) {
 				search(0);
@@ -150,20 +154,20 @@
 		controls.add(viewTree);
 
 		NameRenderer nameRenderer = new NameRenderer();
-		tableModel = new SyndicatedEntryTableModel();
-		header = new HeaderPanel(Translation.get("gb.search"), "search-icon.png");
+		tableModel = new FeedEntryTableModel();
+		header = new HeaderPanel(Translation.get(isSearch ? "gb.search" : "gb.log"),
+				isSearch ? "search-icon.png" : "commit_changes_16x16.png");
 		table = Utils.newTable(tableModel, Utils.DATE_FORMAT);
 
-		String name = table.getColumnName(SyndicatedEntryTableModel.Columns.Author.ordinal());
-		table.setRowHeight(nameRenderer.getFont().getSize() + 8);
+		String name = table.getColumnName(FeedEntryTableModel.Columns.Author.ordinal());
 		table.getColumn(name).setCellRenderer(nameRenderer);
-		name = table.getColumnName(SyndicatedEntryTableModel.Columns.Repository.ordinal());
+		name = table.getColumnName(FeedEntryTableModel.Columns.Repository.ordinal());
 		table.getColumn(name).setCellRenderer(nameRenderer);
 
-		name = table.getColumnName(SyndicatedEntryTableModel.Columns.Branch.ordinal());
+		name = table.getColumnName(FeedEntryTableModel.Columns.Branch.ordinal());
 		table.getColumn(name).setCellRenderer(new BranchRenderer());
 
-		name = table.getColumnName(SyndicatedEntryTableModel.Columns.Message.ordinal());
+		name = table.getColumnName(FeedEntryTableModel.Columns.Message.ordinal());
 		table.getColumn(name).setCellRenderer(new MessageRenderer());
 
 		table.addMouseListener(new MouseAdapter() {
@@ -203,9 +207,16 @@
 					selectedBranch = branchSelector.getSelectedItem().toString();
 				}
 				updateBranches();
-				if (selectedBranch != null) {
+				if (StringUtils.isEmpty(selectedBranch)) {
+					// do not select branch
+					branchSelector.setSelectedIndex(-1);
+				} else {
 					if (branchChoices.getIndexOf(selectedBranch) > -1) {
+						// select branch
 						branchChoices.setSelectedItem(selectedBranch);
+					} else {
+						// branch does not exist, do not select branch
+						branchSelector.setSelectedIndex(-1);
 					}
 				}
 			}
@@ -228,19 +239,29 @@
 			}
 		});
 
-		JPanel northControls = new JPanel(new FlowLayout(FlowLayout.LEFT, Utils.MARGIN, 0));
-		northControls.add(new JLabel(Translation.get("gb.repository")));
-		northControls.add(repositorySelector);
-		northControls.add(new JLabel(Translation.get("gb.branch")));
-		northControls.add(branchSelector);
-		northControls.add(new JLabel(Translation.get("gb.type")));
-		northControls.add(searchTypeSelector);
-		northControls.add(new JLabel(Translation.get("gb.maxHits")));
-		northControls.add(maxHitsSelector);
-		northControls.add(searchFragment);
-		northControls.add(search);
-		northControls.add(prev);
-		northControls.add(next);
+		JPanel queryPanel = new JPanel(new FlowLayout(FlowLayout.LEFT, Utils.MARGIN, 0));
+		queryPanel.add(new JLabel(Translation.get("gb.repository")));
+		queryPanel.add(repositorySelector);
+		queryPanel.add(new JLabel(Translation.get("gb.branch")));
+		queryPanel.add(branchSelector);
+		if (isSearch) {
+			queryPanel.add(new JLabel(Translation.get("gb.type")));
+			queryPanel.add(searchTypeSelector);
+		}
+		queryPanel.add(new JLabel(Translation.get("gb.maxHits")));
+		queryPanel.add(maxHitsSelector);
+
+		JPanel actionsPanel = new JPanel(new FlowLayout(FlowLayout.LEFT, Utils.MARGIN, 0));
+		actionsPanel.add(search);
+		actionsPanel.add(prev);
+		actionsPanel.add(next);
+
+		JPanel northControls = new JPanel(new BorderLayout(Utils.MARGIN, Utils.MARGIN));
+		northControls.add(queryPanel, BorderLayout.WEST);
+		if (isSearch) {
+			northControls.add(searchFragment, BorderLayout.CENTER);
+		}
+		northControls.add(actionsPanel, BorderLayout.EAST);
 
 		JPanel northPanel = new JPanel(new BorderLayout(0, Utils.MARGIN));
 		northPanel.add(header, BorderLayout.NORTH);
@@ -264,12 +285,18 @@
 		addWindowListener(new WindowAdapter() {
 			@Override
 			public void windowOpened(WindowEvent event) {
-				searchFragment.requestFocus();
+				if (isSearch) {
+					searchFragment.requestFocus();
+				} else {
+					search(0);
+				}
 			}
 
 			@Override
 			public void windowActivated(WindowEvent event) {
-				searchFragment.requestFocus();
+				if (isSearch) {
+					searchFragment.requestFocus();
+				}
 			}
 		});
 	}
@@ -297,25 +324,35 @@
 				.getSelectedItem().toString() : null;
 		final Constants.SearchType searchType = (Constants.SearchType) searchTypeSelector
 				.getSelectedItem();
-		final String fragment = searchFragment.getText();
+		final String fragment = isSearch ? searchFragment.getText() : null;
 		final int maxEntryCount = maxHitsSelector.getSelectedIndex() > -1 ? ((Integer) maxHitsSelector
 				.getSelectedItem()) : -1;
 
-		if (StringUtils.isEmpty(fragment)) {
+		if (isSearch && StringUtils.isEmpty(fragment)) {
 			return;
 		}
-		SwingWorker<List<SyndicatedEntryModel>, Void> worker = new SwingWorker<List<SyndicatedEntryModel>, Void>() {
+		setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
+		SwingWorker<List<FeedEntryModel>, Void> worker = new SwingWorker<List<FeedEntryModel>, Void>() {
 			@Override
-			protected List<SyndicatedEntryModel> doInBackground() throws IOException {
-				return gitblit
-						.search(repository, branch, fragment, searchType, maxEntryCount, page);
+			protected List<FeedEntryModel> doInBackground() throws IOException {
+				if (isSearch) {
+					return gitblit.search(repository, branch, fragment, searchType, maxEntryCount,
+							page);
+				} else {
+					return gitblit.log(repository, branch, maxEntryCount, page);
+				}
 			}
 
 			@Override
 			protected void done() {
+				setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
 				try {
-					List<SyndicatedEntryModel> results = get();
-					updateTable(true, fragment, results);
+					List<FeedEntryModel> results = get();
+					if (isSearch) {
+						updateTable(true, fragment, results);
+					} else {
+						updateTable(true, branch == null ? "" : branch, results);
+					}
 				} catch (Throwable t) {
 					Utils.showException(SearchDialog.this, t);
 				}
@@ -324,11 +361,12 @@
 		worker.execute();
 	}
 
-	protected void updateTable(boolean pack, String fragment, List<SyndicatedEntryModel> entries) {
+	protected void updateTable(boolean pack, String text, List<FeedEntryModel> entries) {
 		tableModel.entries.clear();
 		tableModel.entries.addAll(entries);
 		tableModel.fireTableDataChanged();
-		setTitle(Translation.get("gb.search") + ": " + fragment + " (" + entries.size()
+		setTitle(Translation.get(isSearch ? "gb.search" : "gb.log")
+				+ (StringUtils.isEmpty(text) ? "" : (": " + text)) + " (" + entries.size()
 				+ (page > 0 ? (", pg " + (page + 1)) : "") + ")");
 		header.setText(getTitle());
 		if (pack) {
@@ -342,25 +380,25 @@
 		prev.setEnabled(page > 0);
 	}
 
-	protected SyndicatedEntryModel getSelectedSyndicatedEntry() {
+	protected FeedEntryModel getSelectedSyndicatedEntry() {
 		int viewRow = table.getSelectedRow();
 		int modelRow = table.convertRowIndexToModel(viewRow);
-		SyndicatedEntryModel entry = tableModel.get(modelRow);
+		FeedEntryModel entry = tableModel.get(modelRow);
 		return entry;
 	}
 
 	protected void viewCommit() {
-		SyndicatedEntryModel entry = getSelectedSyndicatedEntry();
+		FeedEntryModel entry = getSelectedSyndicatedEntry();
 		Utils.browse(entry.link);
 	}
 
 	protected void viewCommitDiff() {
-		SyndicatedEntryModel entry = getSelectedSyndicatedEntry();
+		FeedEntryModel entry = getSelectedSyndicatedEntry();
 		Utils.browse(entry.link.replace("/commit/", "/commitdiff/"));
 	}
 
 	protected void viewTree() {
-		SyndicatedEntryModel entry = getSelectedSyndicatedEntry();
+		FeedEntryModel entry = getSelectedSyndicatedEntry();
 		Utils.browse(entry.link.replace("/commit/", "/tree/"));
 	}
 }

--
Gitblit v1.9.1