| | |
| | | import javax.swing.event.ListSelectionListener;
|
| | | import javax.swing.table.TableRowSorter;
|
| | |
|
| | | import com.gitblit.Constants.RpcRequest;
|
| | | import com.gitblit.models.FeedModel;
|
| | | import com.gitblit.models.SyndicatedEntryModel;
|
| | | import com.gitblit.utils.StringUtils;
|
| | |
| | |
|
| | | NameRenderer nameRenderer = new NameRenderer();
|
| | | tableModel = new SyndicatedEntryTableModel();
|
| | | header = new HeaderPanel(Translation.get("gb.timeline"), "feed_16x16.png");
|
| | | 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());
|
| | |
| | |
|
| | | name = table.getColumnName(SyndicatedEntryTableModel.Columns.Branch.ordinal());
|
| | | table.getColumn(name).setCellRenderer(new BranchRenderer());
|
| | |
|
| | | name = table.getColumnName(SyndicatedEntryTableModel.Columns.Message.ordinal());
|
| | | table.getColumn(name).setCellRenderer(new MessageRenderer(gitblit));
|
| | |
|
| | | table.addMouseListener(new MouseAdapter() {
|
| | | public void mouseClicked(MouseEvent e) {
|
| | |
| | | repositorySelector.setForeground(nameRenderer.getForeground());
|
| | | repositorySelector.addActionListener(new ActionListener() {
|
| | | public void actionPerformed(ActionEvent event) {
|
| | | // repopulate the author list based on repository selection
|
| | | // preserve author selection, if possible
|
| | | String selectedAuthor = null;
|
| | | if (authorSelector.getSelectedIndex() > -1) {
|
| | | selectedAuthor = authorSelector.getSelectedItem().toString();
|
| | | }
|
| | | updateAuthors();
|
| | | if (selectedAuthor != null) {
|
| | | if (authorChoices.getIndexOf(selectedAuthor) > -1) {
|
| | | authorChoices.setSelectedItem(selectedAuthor);
|
| | | }
|
| | | }
|
| | | filterFeeds();
|
| | | }
|
| | | });
|
| | |
| | | }
|
| | |
|
| | | protected void refreshFeeds() {
|
| | | // TODO change request type here
|
| | | GitblitWorker worker = new GitblitWorker(FeedsPanel.this, RpcRequest.LIST_USERS) {
|
| | | GitblitWorker worker = new GitblitWorker(FeedsPanel.this, null) {
|
| | | @Override
|
| | | protected Boolean doRequest() throws IOException {
|
| | | gitblit.refreshSubscribedFeeds();
|
| | |
| | | tableModel.entries.clear();
|
| | | tableModel.entries.addAll(gitblit.getSyndicatedEntries());
|
| | | tableModel.fireTableDataChanged();
|
| | | header.setText(Translation.get("gb.timeline") + " ("
|
| | | header.setText(Translation.get("gb.activity") + " ("
|
| | | + gitblit.getSyndicatedEntries().size() + ")");
|
| | | if (pack) {
|
| | | Utils.packColumns(table, Utils.MARGIN);
|
| | | }
|
| | | // determine unique repositories and authors
|
| | | // determine unique repositories
|
| | | Set<String> uniqueRepositories = new HashSet<String>();
|
| | | Set<String> uniqueAuthors = new HashSet<String>();
|
| | | for (SyndicatedEntryModel entry : tableModel.entries) {
|
| | | uniqueRepositories.add(entry.repository);
|
| | | uniqueAuthors.add(entry.author);
|
| | | }
|
| | |
|
| | | // repositories
|
| | |
| | | for (String repo : sortedRespositories) {
|
| | | repositoryChoices.addElement(repo);
|
| | | }
|
| | | }
|
| | |
|
| | | private void updateAuthors() {
|
| | | String repository = ALL;
|
| | | if (repositorySelector.getSelectedIndex() > -1) {
|
| | | repository = repositorySelector.getSelectedItem().toString();
|
| | | }
|
| | |
|
| | | // determine unique repositories and authors
|
| | | Set<String> uniqueAuthors = new HashSet<String>();
|
| | | for (SyndicatedEntryModel entry : tableModel.entries) {
|
| | | if (repository.equals(ALL) || entry.repository.equalsIgnoreCase(repository)) {
|
| | | uniqueAuthors.add(entry.author);
|
| | | }
|
| | | }
|
| | | // authors
|
| | | List<String> sortedAuthors = new ArrayList<String>(uniqueAuthors);
|
| | | Collections.sort(sortedAuthors);
|