James Moger
2012-01-05 cb285cbfddfc0b633d6b8cdb4dc0d2bd2b8b51ef
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);