From cb285cbfddfc0b633d6b8cdb4dc0d2bd2b8b51ef Mon Sep 17 00:00:00 2001 From: James Moger <james.moger@gitblit.com> Date: Thu, 05 Jan 2012 17:34:05 -0500 Subject: [PATCH] Fixed bug in receive hook for repositories in subfolders --- src/com/gitblit/client/FeedsPanel.java | 120 +++++++++++++++++++++++++++++++++++++++-------------------- 1 files changed, 79 insertions(+), 41 deletions(-) diff --git a/src/com/gitblit/client/FeedsPanel.java b/src/com/gitblit/client/FeedsPanel.java index a8094f8..97f37c0 100644 --- a/src/com/gitblit/client/FeedsPanel.java +++ b/src/com/gitblit/client/FeedsPanel.java @@ -18,6 +18,7 @@ import java.awt.BorderLayout; 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; @@ -41,8 +42,8 @@ import javax.swing.event.ListSelectionListener; import javax.swing.table.TableRowSorter; +import com.gitblit.models.FeedEntryModel; import com.gitblit.models.FeedModel; -import com.gitblit.models.SyndicatedEntryModel; import com.gitblit.utils.StringUtils; /** @@ -60,9 +61,9 @@ private final String ALL = "*"; - private SyndicatedEntryTableModel tableModel; + private FeedEntryTableModel tableModel; - private TableRowSorter<SyndicatedEntryTableModel> defaultSorter; + private TableRowSorter<FeedEntryTableModel> defaultSorter; private HeaderPanel header; @@ -76,6 +77,12 @@ private JComboBox authorSelector; + private int page; + + private JButton prev; + + private JButton next; + public FeedsPanel(GitblitClient gitblit) { super(); this.gitblit = gitblit; @@ -83,10 +90,29 @@ } private void initialize() { + + prev = new JButton("<"); + prev.setToolTipText(Translation.get("gb.pagePrevious")); + prev.setEnabled(false); + prev.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + refreshFeeds(--page); + } + }); + + next = new JButton(">"); + next.setToolTipText(Translation.get("gb.pageNext")); + next.setEnabled(false); + next.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + refreshFeeds(++page); + } + }); + JButton refreshFeeds = new JButton(Translation.get("gb.refresh")); refreshFeeds.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { - refreshFeeds(); + refreshFeeds(0); } }); @@ -129,20 +155,20 @@ controls.add(viewTree); NameRenderer nameRenderer = new NameRenderer(); - tableModel = new SyndicatedEntryTableModel(); + tableModel = new FeedEntryTableModel(); header = new HeaderPanel(Translation.get("gb.activity"), "feed_16x16.png"); table = Utils.newTable(tableModel, Utils.DATE_FORMAT); - defaultSorter = new TableRowSorter<SyndicatedEntryTableModel>(tableModel); - String name = table.getColumnName(SyndicatedEntryTableModel.Columns.Author.ordinal()); + defaultSorter = new TableRowSorter<FeedEntryTableModel>(tableModel); + 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(gitblit)); table.addMouseListener(new MouseAdapter() { @@ -205,6 +231,8 @@ northControls.add(repositorySelector); northControls.add(new JLabel(Translation.get("gb.author"))); northControls.add(authorSelector); +// northControls.add(prev); +// northControls.add(next); JPanel northPanel = new JPanel(new BorderLayout(0, Utils.MARGIN)); northPanel.add(header, BorderLayout.NORTH); @@ -221,11 +249,12 @@ return Utils.INSETS; } - protected void refreshFeeds() { + protected void refreshFeeds(final int page) { + this.page = page; GitblitWorker worker = new GitblitWorker(FeedsPanel.this, null) { @Override protected Boolean doRequest() throws IOException { - gitblit.refreshSubscribedFeeds(); + gitblit.refreshSubscribedFeeds(page); return true; } @@ -244,24 +273,33 @@ tableModel.entries.addAll(gitblit.getSyndicatedEntries()); tableModel.fireTableDataChanged(); header.setText(Translation.get("gb.activity") + " (" - + gitblit.getSyndicatedEntries().size() + ")"); + + gitblit.getSyndicatedEntries().size() + (page > 0 ? (", pg " + (page + 1)) : "") + + ")"); if (pack) { Utils.packColumns(table, Utils.MARGIN); } - // determine unique repositories - Set<String> uniqueRepositories = new HashSet<String>(); - for (SyndicatedEntryModel entry : tableModel.entries) { - uniqueRepositories.add(entry.repository); + table.scrollRectToVisible(new Rectangle(table.getCellRect(0, 0, true))); + + if (page == 0) { + // determine unique repositories + Set<String> uniqueRepositories = new HashSet<String>(); + for (FeedEntryModel entry : tableModel.entries) { + uniqueRepositories.add(entry.repository); + } + + // repositories + List<String> sortedRespositories = new ArrayList<String>(uniqueRepositories); + StringUtils.sortRepositorynames(sortedRespositories); + repositoryChoices.removeAllElements(); + repositoryChoices.addElement(ALL); + for (String repo : sortedRespositories) { + repositoryChoices.addElement(repo); + } } - // repositories - List<String> sortedRespositories = new ArrayList<String>(uniqueRepositories); - StringUtils.sortRepositorynames(sortedRespositories); - repositoryChoices.removeAllElements(); - repositoryChoices.addElement(ALL); - for (String repo : sortedRespositories) { - repositoryChoices.addElement(repo); - } + // update pagination buttons + next.setEnabled(tableModel.entries.size() > 0); + prev.setEnabled(page > 0); } private void updateAuthors() { @@ -272,7 +310,7 @@ // determine unique repositories and authors Set<String> uniqueAuthors = new HashSet<String>(); - for (SyndicatedEntryModel entry : tableModel.entries) { + for (FeedEntryModel entry : tableModel.entries) { if (repository.equals(ALL) || entry.repository.equalsIgnoreCase(repository)) { uniqueAuthors.add(entry.author); } @@ -287,25 +325,25 @@ } } - 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/")); } @@ -328,30 +366,30 @@ table.setRowSorter(defaultSorter); return; } - final int repositoryIndex = SyndicatedEntryTableModel.Columns.Repository.ordinal(); - final int authorIndex = SyndicatedEntryTableModel.Columns.Author.ordinal(); - RowFilter<SyndicatedEntryTableModel, Object> containsFilter; + final int repositoryIndex = FeedEntryTableModel.Columns.Repository.ordinal(); + final int authorIndex = FeedEntryTableModel.Columns.Author.ordinal(); + RowFilter<FeedEntryTableModel, Object> containsFilter; if (repository.equals(ALL)) { // author filter - containsFilter = new RowFilter<SyndicatedEntryTableModel, Object>() { + containsFilter = new RowFilter<FeedEntryTableModel, Object>() { public boolean include( - Entry<? extends SyndicatedEntryTableModel, ? extends Object> entry) { + Entry<? extends FeedEntryTableModel, ? extends Object> entry) { return entry.getStringValue(authorIndex).equalsIgnoreCase(author); } }; } else if (author.equals(ALL)) { // repository filter - containsFilter = new RowFilter<SyndicatedEntryTableModel, Object>() { + containsFilter = new RowFilter<FeedEntryTableModel, Object>() { public boolean include( - Entry<? extends SyndicatedEntryTableModel, ? extends Object> entry) { + Entry<? extends FeedEntryTableModel, ? extends Object> entry) { return entry.getStringValue(repositoryIndex).equalsIgnoreCase(repository); } }; } else { // repository-author filter - containsFilter = new RowFilter<SyndicatedEntryTableModel, Object>() { + containsFilter = new RowFilter<FeedEntryTableModel, Object>() { public boolean include( - Entry<? extends SyndicatedEntryTableModel, ? extends Object> entry) { + Entry<? extends FeedEntryTableModel, ? extends Object> entry) { boolean authorMatch = entry.getStringValue(authorIndex) .equalsIgnoreCase(author); boolean repositoryMatch = entry.getStringValue(repositoryIndex) @@ -360,7 +398,7 @@ } }; } - TableRowSorter<SyndicatedEntryTableModel> sorter = new TableRowSorter<SyndicatedEntryTableModel>( + TableRowSorter<FeedEntryTableModel> sorter = new TableRowSorter<FeedEntryTableModel>( tableModel); sorter.setRowFilter(containsFilter); table.setRowSorter(sorter); -- Gitblit v1.9.1