James Moger
2011-10-17 e15f9571998d247df3715202abb84cd54a0d46bc
src/com/gitblit/client/GitblitPanel.java
@@ -19,21 +19,19 @@
import java.awt.Color;
import java.awt.Component;
import java.awt.Desktop;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.io.IOException;
import java.net.URI;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
@@ -77,9 +75,9 @@
   private RepositoriesModel repositoriesModel;
   private JList usersList;
   private JTable usersTable;
   private JPanel usersPanel;
   private UsersModel usersModel;
   private JButton createRepository;
@@ -93,7 +91,11 @@
   private DefaultTableCellRenderer sizeRenderer;
   private TableRowSorter<RepositoriesModel> defaultSorter;
   private TableRowSorter<RepositoriesModel> defaultRepositoriesSorter;
   private TableRowSorter<UsersModel> defaultUsersSorter;
   private JButton editRepository;
   public GitblitPanel(GitblitRegistration reg) {
      this(reg.url, reg.account, reg.password);
@@ -131,7 +133,7 @@
         }
      });
      final JButton editRepository = new JButton(Translation.get("gb.edit"));
      editRepository = new JButton(Translation.get("gb.edit"));
      editRepository.setEnabled(false);
      editRepository.addActionListener(new ActionListener() {
         public void actionPerformed(ActionEvent e) {
@@ -147,16 +149,6 @@
         }
      });
      final JButton cloneRepository = new JButton(Translation.get("gb.clone"));
      cloneRepository.setEnabled(false);
      cloneRepository.addActionListener(new ActionListener() {
         public void actionPerformed(ActionEvent e) {
            for (RepositoryModel model : getSelectedRepositories()) {
               System.out.println("TODO Clone " + model);
            }
         }
      });
      nameRenderer = new NameRenderer();
      typeRenderer = new IndicatorsRenderer();
@@ -169,23 +161,16 @@
      ownerRenderer.setHorizontalAlignment(SwingConstants.CENTER);
      repositoriesModel = new RepositoriesModel();
      defaultSorter = new TableRowSorter<RepositoriesModel>(repositoriesModel);
      repositoriesTable = new JTable(repositoriesModel);
      repositoriesTable.setRowSorter(defaultSorter);
      defaultRepositoriesSorter = new TableRowSorter<RepositoriesModel>(repositoriesModel);
      repositoriesTable = Utils.newTable(repositoriesModel);
      repositoriesTable.setRowHeight(nameRenderer.getFont().getSize() + 8);
      repositoriesTable.setRowSorter(defaultRepositoriesSorter);
      repositoriesTable.getRowSorter().toggleSortOrder(RepositoriesModel.Columns.Name.ordinal());
      repositoriesTable.setCellSelectionEnabled(false);
      repositoriesTable.setRowSelectionAllowed(true);
      repositoriesTable.setRowHeight(nameRenderer.getFont().getSize() + 8);
      repositoriesTable.getTableHeader().setReorderingAllowed(false);
      repositoriesTable.setGridColor(new Color(0xd9d9d9));
      repositoriesTable.setBackground(Color.white);
      repositoriesTable.setDefaultRenderer(Date.class,
            new DateCellRenderer(null, Color.orange.darker()));
      setRenderer(RepositoriesModel.Columns.Name, nameRenderer);
      setRenderer(RepositoriesModel.Columns.Indicators, typeRenderer);
      setRenderer(RepositoriesModel.Columns.Owner, ownerRenderer);
      setRenderer(RepositoriesModel.Columns.Size, sizeRenderer);
      setRepositoryRenderer(RepositoriesModel.Columns.Name, nameRenderer);
      setRepositoryRenderer(RepositoriesModel.Columns.Indicators, typeRenderer);
      setRepositoryRenderer(RepositoriesModel.Columns.Owner, ownerRenderer);
      setRepositoryRenderer(RepositoriesModel.Columns.Size, sizeRenderer);
      repositoriesTable.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
         @Override
@@ -197,7 +182,6 @@
            boolean selected = repositoriesTable.getSelectedRow() > -1;
            browseRepository.setEnabled(singleSelection);
            delRepository.setEnabled(selected);
            cloneRepository.setEnabled(selected);
            if (selected) {
               int viewRow = repositoriesTable.getSelectedRow();
               int modelRow = repositoriesTable.convertRowIndexToModel(viewRow);
@@ -217,19 +201,23 @@
            filterRepositories(repositoryFilter.getText());
         }
      });
      repositoryFilter.addKeyListener(new KeyAdapter() {
         public void keyReleased(KeyEvent e) {
            filterRepositories(repositoryFilter.getText());
         }
      });
      JPanel filterPanel = new JPanel(new BorderLayout(margin, margin));
      filterPanel.add(new JLabel(Translation.get("gb.filter")), BorderLayout.WEST);
      filterPanel.add(repositoryFilter, BorderLayout.CENTER);
      JPanel repositoryFilterPanel = new JPanel(new BorderLayout(margin, margin));
      repositoryFilterPanel.add(new JLabel(Translation.get("gb.filter")), BorderLayout.WEST);
      repositoryFilterPanel.add(repositoryFilter, BorderLayout.CENTER);
      JPanel tablePanel = new JPanel(new BorderLayout(margin, margin));
      tablePanel.add(filterPanel, BorderLayout.NORTH);
      tablePanel.add(new JScrollPane(repositoriesTable), BorderLayout.CENTER);
      JPanel repositoryTablePanel = new JPanel(new BorderLayout(margin, margin));
      repositoryTablePanel.add(repositoryFilterPanel, BorderLayout.NORTH);
      repositoryTablePanel.add(new JScrollPane(repositoriesTable), BorderLayout.CENTER);
      JPanel repositoryControls = new JPanel();
      repositoryControls.add(refreshRepositories);
      repositoryControls.add(browseRepository);
      repositoryControls.add(cloneRepository);
      repositoryControls.add(createRepository);
      repositoryControls.add(editRepository);
      repositoryControls.add(delRepository);
@@ -237,7 +225,7 @@
      JPanel repositoriesPanel = new JPanel(new BorderLayout(margin, margin));
      repositoriesPanel.add(newHeaderLabel(Translation.get("gb.repositories")),
            BorderLayout.NORTH);
      repositoriesPanel.add(tablePanel, BorderLayout.CENTER);
      repositoriesPanel.add(repositoryTablePanel, BorderLayout.CENTER);
      repositoriesPanel.add(repositoryControls, BorderLayout.SOUTH);
      JButton refreshUsers = new JButton(Translation.get("gb.refresh"));
@@ -270,41 +258,62 @@
         }
      });
      usersList = new JList();
      usersList.addListSelectionListener(new ListSelectionListener() {
      usersModel = new UsersModel();
      defaultUsersSorter = new TableRowSorter<UsersModel>(usersModel);
      usersTable = Utils.newTable(usersModel);
      String name = usersTable.getColumnName(UsersModel.Columns.Name.ordinal());
      usersTable.setRowHeight(nameRenderer.getFont().getSize() + 8);
      usersTable.getColumn(name).setCellRenderer(nameRenderer);
      usersTable.setRowSorter(defaultUsersSorter);
      usersTable.getRowSorter().toggleSortOrder(UsersModel.Columns.Name.ordinal());
      usersTable.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
         @Override
         public void valueChanged(ListSelectionEvent e) {
            if (e.getValueIsAdjusting()) {
               return;
            }
            boolean selected = usersList.getSelectedIndex() > -1;
            boolean singleSelection = usersList.getSelectedIndices().length == 1;
            boolean selected = usersTable.getSelectedRow() > -1;
            boolean singleSelection = usersTable.getSelectedRows().length == 1;
            editUser.setEnabled(singleSelection && selected);
            delUser.setEnabled(selected);
         }
      });
      JPanel userControls = new JPanel(new GridLayout(0, 2));
      final JTextField userFilter = new JTextField();
      userFilter.addActionListener(new ActionListener() {
         public void actionPerformed(ActionEvent e) {
            filterUsers(userFilter.getText());
         }
      });
      userFilter.addKeyListener(new KeyAdapter() {
         public void keyReleased(KeyEvent e) {
            filterUsers(userFilter.getText());
         }
      });
      JPanel userFilterPanel = new JPanel(new BorderLayout(margin, margin));
      userFilterPanel.add(new JLabel(Translation.get("gb.filter")), BorderLayout.WEST);
      userFilterPanel.add(userFilter, BorderLayout.CENTER);
      JPanel userTablePanel = new JPanel(new BorderLayout(margin, margin));
      userTablePanel.add(userFilterPanel, BorderLayout.NORTH);
      userTablePanel.add(new JScrollPane(usersTable), BorderLayout.CENTER);
      JPanel userControls = new JPanel();
      userControls.add(refreshUsers);
      userControls.add(createUser);
      userControls.add(editUser);
      userControls.add(delUser);
      usersPanel = new JPanel(new BorderLayout(margin, margin));
      JPanel usersPanel = new JPanel(new BorderLayout(margin, margin));
      usersPanel.add(newHeaderLabel(Translation.get("gb.users")), BorderLayout.NORTH);
      usersPanel.add(new JScrollPane(usersList), BorderLayout.CENTER);
      usersPanel.add(userTablePanel, BorderLayout.CENTER);
      usersPanel.add(userControls, BorderLayout.SOUTH);
      /*
       * Assemble the main panel
       */
      JPanel mainPanel = new JPanel(new BorderLayout(margin, margin));
      mainPanel.add(repositoriesPanel, BorderLayout.CENTER);
      mainPanel.add(usersPanel, BorderLayout.EAST);
      tabs = new JTabbedPane(JTabbedPane.BOTTOM);
      tabs.addTab(Translation.get("gb.repositories"), mainPanel);
      tabs.addTab(Translation.get("gb.repositories"), repositoriesPanel);
      tabs.addTab(Translation.get("gb.users"), usersPanel);
      tabs.addTab(Translation.get("gb.federation"), new JPanel());
      setLayout(new BorderLayout());
@@ -320,7 +329,7 @@
      return label;
   }
   private void setRenderer(RepositoriesModel.Columns col, TableCellRenderer renderer) {
   private void setRepositoryRenderer(RepositoriesModel.Columns col, TableCellRenderer renderer) {
      String name = repositoriesTable.getColumnName(col.ordinal());
      repositoriesTable.getColumn(name).setCellRenderer(renderer);
   }
@@ -337,13 +346,13 @@
         // user does not have administrator privileges
         // hide admin repository buttons
         createRepository.setVisible(false);
         editRepository.setVisible(false);
         delRepository.setVisible(false);
         // hide users panel
         usersPanel.setVisible(false);
         // remove federation tab
         tabs.removeTabAt(1);
         while (tabs.getTabCount() > 1) {
            // remove admin tabs
            tabs.removeTabAt(1);
         }
      }
   }
@@ -354,12 +363,14 @@
   }
   private void updateUsersTable() {
      usersList.setListData(gitblit.getUsers().toArray());
      usersModel.list.clear();
      usersModel.list.addAll(gitblit.getUsers());
      usersModel.fireTableDataChanged();
   }
   private void filterRepositories(final String fragment) {
      if (StringUtils.isEmpty(fragment)) {
         repositoriesTable.setRowSorter(defaultSorter);
         repositoriesTable.setRowSorter(defaultRepositoriesSorter);
         return;
      }
      RowFilter<RepositoriesModel, Object> containsFilter = new RowFilter<RepositoriesModel, Object>() {
@@ -372,18 +383,37 @@
            return false;
         }
      };
      RepositoriesModel model = (RepositoriesModel) repositoriesTable.getModel();
      TableRowSorter<RepositoriesModel> sorter = new TableRowSorter<RepositoriesModel>(model);
      TableRowSorter<RepositoriesModel> sorter = new TableRowSorter<RepositoriesModel>(
            repositoriesModel);
      sorter.setRowFilter(containsFilter);
      repositoriesTable.setRowSorter(sorter);
   }
   private void filterUsers(final String fragment) {
      if (StringUtils.isEmpty(fragment)) {
         usersTable.setRowSorter(defaultUsersSorter);
         return;
      }
      RowFilter<UsersModel, Object> containsFilter = new RowFilter<UsersModel, Object>() {
         public boolean include(Entry<? extends UsersModel, ? extends Object> entry) {
            for (int i = entry.getValueCount() - 1; i >= 0; i--) {
               if (entry.getStringValue(i).toLowerCase().contains(fragment.toLowerCase())) {
                  return true;
               }
            }
            return false;
         }
      };
      TableRowSorter<UsersModel> sorter = new TableRowSorter<UsersModel>(usersModel);
      sorter.setRowFilter(containsFilter);
      usersTable.setRowSorter(sorter);
   }
   private List<RepositoryModel> getSelectedRepositories() {
      List<RepositoryModel> repositories = new ArrayList<RepositoryModel>();
      for (int viewRow : repositoriesTable.getSelectedRows()) {
         int modelRow = repositoriesTable.convertRowIndexToModel(viewRow);
         RepositoryModel model = ((RepositoriesModel) repositoriesTable.getModel()).list
               .get(modelRow);
         RepositoryModel model = repositoriesModel.list.get(modelRow);
         repositories.add(model);
      }
      return repositories;
@@ -391,8 +421,9 @@
   private List<UserModel> getSelectedUsers() {
      List<UserModel> users = new ArrayList<UserModel>();
      for (int viewRow : usersList.getSelectedIndices()) {
         UserModel model = (UserModel) usersList.getModel().getElementAt(viewRow);
      for (int viewRow : usersTable.getSelectedRows()) {
         int modelRow = usersTable.convertRowIndexToModel(viewRow);
         UserModel model = usersModel.list.get(modelRow);
         users.add(model);
      }
      return users;
@@ -401,14 +432,6 @@
   @Override
   public Insets getInsets() {
      return insets;
   }
   @Override
   public Dimension getPreferredSize() {
      if (gitblit.allowAdmin()) {
         return new Dimension(950, 550);
      }
      return new Dimension(775, 450);
   }
   @Override