From 0e44acbb2fec928a1606dc60f427a148fff405c9 Mon Sep 17 00:00:00 2001
From: Mohamed Ragab <moragab@gmail.com>
Date: Wed, 02 May 2012 11:15:01 -0400
Subject: [PATCH] Added a script to facilitate setting the proxy host and port and no proxy hosts, and then it concatenates all the java system properties for setting the java proxy configurations and puts the resulting string in an environment variable JAVA_PROXY_CONFIG, modified the scirpts gitblit,  gitblit-ubuntu, and gitblit-centos to source the java-proxy-config.sh script and then include the resulting java proxy configuration in the java command

---
 src/com/gitblit/client/SearchDialog.java |  164 ++++++++++++++++++++++++++++++++++++++++--------------
 1 files changed, 120 insertions(+), 44 deletions(-)

diff --git a/src/com/gitblit/client/SearchDialog.java b/src/com/gitblit/client/SearchDialog.java
index 2f45611..628a209 100644
--- a/src/com/gitblit/client/SearchDialog.java
+++ b/src/com/gitblit/client/SearchDialog.java
@@ -16,8 +16,10 @@
 package com.gitblit.client;
 
 import java.awt.BorderLayout;
+import java.awt.Cursor;
 import java.awt.FlowLayout;
 import java.awt.Insets;
+import java.awt.Rectangle;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
 import java.awt.event.MouseAdapter;
@@ -42,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;
 
 /**
@@ -57,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;
 
@@ -77,21 +81,46 @@
 
 	private JComboBox maxHitsSelector;
 
-	public SearchDialog(GitblitClient gitblit) {
+	private int page;
+
+	private JButton prev;
+
+	private JButton next;
+
+	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() {
 
-		final JButton search = new JButton(Translation.get("gb.search"));
+		prev = new JButton("<");
+		prev.setToolTipText(Translation.get("gb.pagePrevious"));
+		prev.setEnabled(false);
+		prev.addActionListener(new ActionListener() {
+			public void actionPerformed(ActionEvent e) {
+				search(--page);
+			}
+		});
+
+		next = new JButton(">");
+		next.setToolTipText(Translation.get("gb.pageNext"));
+		next.setEnabled(false);
+		next.addActionListener(new ActionListener() {
+			public void actionPerformed(ActionEvent e) {
+				search(++page);
+			}
+		});
+
+		final JButton search = new JButton(Translation.get(isSearch ? "gb.search" : "gb.refresh"));
 		search.addActionListener(new ActionListener() {
 			public void actionPerformed(ActionEvent e) {
-				search();
+				search(0);
 			}
 		});
 
@@ -125,20 +154,21 @@
 		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());
+		String name = table.getColumnName(FeedEntryTableModel.Columns.Author.ordinal());
 		table.setRowHeight(nameRenderer.getFont().getSize() + 8);
 		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() {
@@ -178,9 +208,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);
 					}
 				}
 			}
@@ -194,26 +231,38 @@
 		searchTypeSelector.setSelectedItem(Constants.SearchType.COMMIT);
 
 		maxHitsSelector = new JComboBox(new Integer[] { 25, 50, 75, 100 });
-		maxHitsSelector.setSelectedIndex(-1);
+		maxHitsSelector.setSelectedIndex(0);
 
 		searchFragment = new JTextField(25);
 		searchFragment.addActionListener(new ActionListener() {
 			public void actionPerformed(ActionEvent event) {
-				search();
+				search(0);
 			}
 		});
 
-		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);
+		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);
@@ -237,12 +286,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();
+				}
 			}
 		});
 	}
@@ -263,29 +318,42 @@
 		}
 	}
 
-	protected void search() {
+	protected void search(final int page) {
+		this.page = page;
 		final String repository = repositorySelector.getSelectedItem().toString();
 		final String branch = branchSelector.getSelectedIndex() > -1 ? branchSelector
 				.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);
+			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);
 				}
@@ -294,36 +362,44 @@
 		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) {
 			Utils.packColumns(table, Utils.MARGIN);
 		}
+		table.scrollRectToVisible(new Rectangle(table.getCellRect(0, 0, true)));
+
+		// update pagination buttons
+		int maxHits = (Integer) maxHitsSelector.getSelectedItem();
+		next.setEnabled(entries.size() == maxHits);
+		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