]> source.dussan.org Git - gitblit.git/commitdiff
Live repository and user filters.
authorJames Moger <james.moger@gitblit.com>
Tue, 18 Oct 2011 01:15:36 +0000 (21:15 -0400)
committerJames Moger <james.moger@gitblit.com>
Tue, 18 Oct 2011 01:15:36 +0000 (21:15 -0400)
src/com/gitblit/client/GitblitPanel.java

index 2c1c5a694010bc0345a90d7ce07cdfa1e3a51218..3e2cb7af46de1ae2d8395f34053fdd05003d58da 100644 (file)
@@ -22,6 +22,8 @@ import java.awt.Desktop;
 import java.awt.Insets;\r
 import java.awt.event.ActionEvent;\r
 import java.awt.event.ActionListener;\r
+import java.awt.event.KeyAdapter;\r
+import java.awt.event.KeyEvent;\r
 import java.io.IOException;\r
 import java.net.URI;\r
 import java.text.MessageFormat;\r
@@ -77,8 +79,6 @@ public class GitblitPanel extends JPanel implements CloseTabListener {
 \r
        private UsersModel usersModel;\r
 \r
-       private JPanel usersPanel;\r
-\r
        private JButton createRepository;\r
 \r
        private JButton delRepository;\r
@@ -201,14 +201,19 @@ public class GitblitPanel extends JPanel implements CloseTabListener {
                                filterRepositories(repositoryFilter.getText());\r
                        }\r
                });\r
+               repositoryFilter.addKeyListener(new KeyAdapter() {\r
+                       public void keyReleased(KeyEvent e) {\r
+                               filterRepositories(repositoryFilter.getText());\r
+                       }\r
+               });\r
 \r
-               JPanel filterPanel = new JPanel(new BorderLayout(margin, margin));\r
-               filterPanel.add(new JLabel(Translation.get("gb.filter")), BorderLayout.WEST);\r
-               filterPanel.add(repositoryFilter, BorderLayout.CENTER);\r
+               JPanel repositoryFilterPanel = new JPanel(new BorderLayout(margin, margin));\r
+               repositoryFilterPanel.add(new JLabel(Translation.get("gb.filter")), BorderLayout.WEST);\r
+               repositoryFilterPanel.add(repositoryFilter, BorderLayout.CENTER);\r
 \r
-               JPanel tablePanel = new JPanel(new BorderLayout(margin, margin));\r
-               tablePanel.add(filterPanel, BorderLayout.NORTH);\r
-               tablePanel.add(new JScrollPane(repositoriesTable), BorderLayout.CENTER);\r
+               JPanel repositoryTablePanel = new JPanel(new BorderLayout(margin, margin));\r
+               repositoryTablePanel.add(repositoryFilterPanel, BorderLayout.NORTH);\r
+               repositoryTablePanel.add(new JScrollPane(repositoriesTable), BorderLayout.CENTER);\r
 \r
                JPanel repositoryControls = new JPanel();\r
                repositoryControls.add(refreshRepositories);\r
@@ -220,7 +225,7 @@ public class GitblitPanel extends JPanel implements CloseTabListener {
                JPanel repositoriesPanel = new JPanel(new BorderLayout(margin, margin));\r
                repositoriesPanel.add(newHeaderLabel(Translation.get("gb.repositories")),\r
                                BorderLayout.NORTH);\r
-               repositoriesPanel.add(tablePanel, BorderLayout.CENTER);\r
+               repositoriesPanel.add(repositoryTablePanel, BorderLayout.CENTER);\r
                repositoriesPanel.add(repositoryControls, BorderLayout.SOUTH);\r
 \r
                JButton refreshUsers = new JButton(Translation.get("gb.refresh"));\r
@@ -275,15 +280,35 @@ public class GitblitPanel extends JPanel implements CloseTabListener {
                        }\r
                });\r
 \r
+               final JTextField userFilter = new JTextField();\r
+               userFilter.addActionListener(new ActionListener() {\r
+                       public void actionPerformed(ActionEvent e) {\r
+                               filterUsers(userFilter.getText());\r
+                       }\r
+               });\r
+               userFilter.addKeyListener(new KeyAdapter() {\r
+                       public void keyReleased(KeyEvent e) {\r
+                               filterUsers(userFilter.getText());\r
+                       }\r
+               });\r
+\r
+               JPanel userFilterPanel = new JPanel(new BorderLayout(margin, margin));\r
+               userFilterPanel.add(new JLabel(Translation.get("gb.filter")), BorderLayout.WEST);\r
+               userFilterPanel.add(userFilter, BorderLayout.CENTER);\r
+\r
+               JPanel userTablePanel = new JPanel(new BorderLayout(margin, margin));\r
+               userTablePanel.add(userFilterPanel, BorderLayout.NORTH);\r
+               userTablePanel.add(new JScrollPane(usersTable), BorderLayout.CENTER);\r
+\r
                JPanel userControls = new JPanel();\r
                userControls.add(refreshUsers);\r
                userControls.add(createUser);\r
                userControls.add(editUser);\r
                userControls.add(delUser);\r
 \r
-               usersPanel = new JPanel(new BorderLayout(margin, margin));\r
+               JPanel usersPanel = new JPanel(new BorderLayout(margin, margin));\r
                usersPanel.add(newHeaderLabel(Translation.get("gb.users")), BorderLayout.NORTH);\r
-               usersPanel.add(new JScrollPane(usersTable), BorderLayout.CENTER);\r
+               usersPanel.add(userTablePanel, BorderLayout.CENTER);\r
                usersPanel.add(userControls, BorderLayout.SOUTH);\r
 \r
                tabs = new JTabbedPane(JTabbedPane.BOTTOM);\r
@@ -324,9 +349,6 @@ public class GitblitPanel extends JPanel implements CloseTabListener {
                        editRepository.setVisible(false);\r
                        delRepository.setVisible(false);\r
 \r
-                       // hide users panel\r
-                       usersPanel.setVisible(false);\r
-\r
                        while (tabs.getTabCount() > 1) {\r
                                // remove admin tabs\r
                                tabs.removeTabAt(1);\r
@@ -361,12 +383,32 @@ public class GitblitPanel extends JPanel implements CloseTabListener {
                                return false;\r
                        }\r
                };\r
-               RepositoriesModel model = (RepositoriesModel) repositoriesTable.getModel();\r
-               TableRowSorter<RepositoriesModel> sorter = new TableRowSorter<RepositoriesModel>(model);\r
+               TableRowSorter<RepositoriesModel> sorter = new TableRowSorter<RepositoriesModel>(\r
+                               repositoriesModel);\r
                sorter.setRowFilter(containsFilter);\r
                repositoriesTable.setRowSorter(sorter);\r
        }\r
 \r
+       private void filterUsers(final String fragment) {\r
+               if (StringUtils.isEmpty(fragment)) {\r
+                       usersTable.setRowSorter(defaultUsersSorter);\r
+                       return;\r
+               }\r
+               RowFilter<UsersModel, Object> containsFilter = new RowFilter<UsersModel, Object>() {\r
+                       public boolean include(Entry<? extends UsersModel, ? extends Object> entry) {\r
+                               for (int i = entry.getValueCount() - 1; i >= 0; i--) {\r
+                                       if (entry.getStringValue(i).toLowerCase().contains(fragment.toLowerCase())) {\r
+                                               return true;\r
+                                       }\r
+                               }\r
+                               return false;\r
+                       }\r
+               };\r
+               TableRowSorter<UsersModel> sorter = new TableRowSorter<UsersModel>(usersModel);\r
+               sorter.setRowFilter(containsFilter);\r
+               usersTable.setRowSorter(sorter);\r
+       }\r
+\r
        private List<RepositoryModel> getSelectedRepositories() {\r
                List<RepositoryModel> repositories = new ArrayList<RepositoryModel>();\r
                for (int viewRow : repositoriesTable.getSelectedRows()) {\r