James Moger
2012-10-03 f22a0633d08e38ac4bf92b5165a708e11b4d6598
src/com/gitblit/client/RepositoriesPanel.java
@@ -27,7 +27,9 @@
import java.awt.event.MouseEvent;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import javax.swing.JButton;
import javax.swing.JLabel;
@@ -44,7 +46,9 @@
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableRowSorter;
import com.gitblit.Constants;
import com.gitblit.Constants.RpcRequest;
import com.gitblit.Keys;
import com.gitblit.models.FeedModel;
import com.gitblit.models.RepositoryModel;
import com.gitblit.utils.StringUtils;
@@ -78,6 +82,8 @@
   private JTextField filterTextfield;
   private JButton clearCache;
   public RepositoriesPanel(GitblitClient gitblit) {
      super();
      this.gitblit = gitblit;
@@ -99,6 +105,13 @@
      refreshRepositories.addActionListener(new ActionListener() {
         public void actionPerformed(ActionEvent e) {
            refreshRepositories();
         }
      });
      clearCache = new JButton(Translation.get("gb.clearCache"));
      clearCache.addActionListener(new ActionListener() {
         public void actionPerformed(ActionEvent e) {
            clearCache();
         }
      });
@@ -134,12 +147,21 @@
         }
      });
      final JButton logRepository = new JButton(Translation.get("gb.log") + "...");
      logRepository.setEnabled(false);
      logRepository.addActionListener(new ActionListener() {
         public void actionPerformed(ActionEvent e) {
            RepositoryModel model = getSelectedRepositories().get(0);
            showSearchDialog(false, model);
         }
      });
      final JButton searchRepository = new JButton(Translation.get("gb.search") + "...");
      searchRepository.setEnabled(false);
      searchRepository.addActionListener(new ActionListener() {
         public void actionPerformed(ActionEvent e) {
            RepositoryModel model = getSelectedRepositories().get(0);
            searchRepository(model);
            showSearchDialog(true, model);
         }
      });
@@ -173,18 +195,20 @@
               return;
            }
            boolean singleSelection = table.getSelectedRowCount() == 1;
            boolean selected = table.getSelectedRow() > -1;
            boolean selected = table.getSelectedRow() > -1;
            if (singleSelection) {
               RepositoryModel repository = getSelectedRepositories().get(0);
               browseRepository.setEnabled(repository.hasCommits);
               logRepository.setEnabled(repository.hasCommits);
               searchRepository.setEnabled(repository.hasCommits);
               subscribeRepository.setEnabled(repository.hasCommits);
            } else {
               browseRepository.setEnabled(false);
               logRepository.setEnabled(false);
               searchRepository.setEnabled(false);
               subscribeRepository.setEnabled(false);
            }
            delRepository.setEnabled(selected);
            delRepository.setEnabled(selected);
            if (selected) {
               int viewRow = table.getSelectedRow();
               int modelRow = table.convertRowIndexToModel(viewRow);
@@ -227,16 +251,18 @@
      repositoryTablePanel.add(new JScrollPane(table), BorderLayout.CENTER);
      JPanel repositoryControls = new JPanel(new FlowLayout(FlowLayout.CENTER, Utils.MARGIN, 0));
      repositoryControls.add(clearCache);
      repositoryControls.add(refreshRepositories);
      repositoryControls.add(browseRepository);
      repositoryControls.add(createRepository);
      repositoryControls.add(editRepository);
      repositoryControls.add(delRepository);
      repositoryControls.add(subscribeRepository);
      repositoryControls.add(logRepository);
      repositoryControls.add(searchRepository);
      setLayout(new BorderLayout(Utils.MARGIN, Utils.MARGIN));
      header = new HeaderPanel(Translation.get("gb.repositories"), "gitweb-favicon.png");
      header = new HeaderPanel(Translation.get("gb.repositories"), "git-orange-16x16.png");
      add(header, BorderLayout.NORTH);
      add(repositoryTablePanel, BorderLayout.CENTER);
      add(repositoryControls, BorderLayout.SOUTH);
@@ -266,7 +292,10 @@
   protected abstract void updateUsersTable();
   protected abstract void updateTeamsTable();
   protected void disableManagement() {
      clearCache.setVisible(false);
      createRepository.setVisible(false);
      editRepository.setVisible(false);
      delRepository.setVisible(false);
@@ -330,6 +359,26 @@
      };
      worker.execute();
   }
   protected void clearCache() {
      GitblitWorker worker = new GitblitWorker(RepositoriesPanel.this,
            RpcRequest.CLEAR_REPOSITORY_CACHE) {
         @Override
         protected Boolean doRequest() throws IOException {
            if (gitblit.clearRepositoryCache()) {
               gitblit.refreshRepositories();
               return true;
            }
            return false;
         }
         @Override
         protected void onSuccess() {
            updateTable(false);
         }
      };
      worker.execute();
   }
   /**
    * Displays the create repository dialog and fires a SwingWorker to update
@@ -337,14 +386,23 @@
    * 
    */
   protected void createRepository() {
      EditRepositoryDialog dialog = new EditRepositoryDialog();
      EditRepositoryDialog dialog = new EditRepositoryDialog(gitblit.getProtocolVersion());
      dialog.setLocationRelativeTo(RepositoriesPanel.this);
      dialog.setAccessRestriction(gitblit.getDefaultAccessRestriction());
      dialog.setAuthorizationControl(gitblit.getDefaultAuthorizationControl());
      dialog.setUsers(null, gitblit.getUsernames(), null);
      dialog.setTeams(gitblit.getTeamnames(), null);
      dialog.setRepositories(gitblit.getRepositories());
      dialog.setFederationSets(gitblit.getFederationSets(), null);
      dialog.setIndexedBranches(new ArrayList<String>(Arrays.asList(Constants.DEFAULT_BRANCH)), null);
      dialog.setPreReceiveScripts(gitblit.getPreReceiveScriptsUnused(null),
            gitblit.getPreReceiveScriptsInherited(null), null);
      dialog.setPostReceiveScripts(gitblit.getPostReceiveScriptsUnused(null),
            gitblit.getPostReceiveScriptsInherited(null), null);
      dialog.setVisible(true);
      final RepositoryModel newRepository = dialog.getRepository();
      final List<String> permittedUsers = dialog.getPermittedUsers();
      final List<String> permittedTeams = dialog.getPermittedTeams();
      if (newRepository == null) {
         return;
      }
@@ -353,11 +411,15 @@
         @Override
         protected Boolean doRequest() throws IOException {
            boolean success = gitblit.createRepository(newRepository, permittedUsers);
            boolean success = gitblit.createRepository(newRepository, permittedUsers,
                  permittedTeams);
            if (success) {
               gitblit.refreshRepositories();
               if (permittedUsers.size() > 0) {
                  gitblit.refreshUsers();
               }
               if (permittedTeams.size() > 0) {
                  gitblit.refreshTeams();
               }
            }
            return success;
@@ -367,6 +429,7 @@
         protected void onSuccess() {
            updateTable(false);
            updateUsersTable();
            updateTeamsTable();
         }
         @Override
@@ -385,16 +448,31 @@
    * @param repository
    */
   protected void editRepository(final RepositoryModel repository) {
      EditRepositoryDialog dialog = new EditRepositoryDialog(repository);
      EditRepositoryDialog dialog = new EditRepositoryDialog(gitblit.getProtocolVersion(),
            repository);
      dialog.setLocationRelativeTo(RepositoriesPanel.this);
      List<String> usernames = gitblit.getUsernames();
      List<String> members = gitblit.getPermittedUsernames(repository);
      dialog.setUsers(repository.owner, usernames, members);
      dialog.setTeams(gitblit.getTeamnames(), gitblit.getPermittedTeamnames(repository));
      dialog.setRepositories(gitblit.getRepositories());
      dialog.setFederationSets(gitblit.getFederationSets(), repository.federationSets);
      List<String> allLocalBranches = new ArrayList<String>();
      allLocalBranches.add(Constants.DEFAULT_BRANCH);
      allLocalBranches.addAll(repository.getLocalBranches());
      dialog.setIndexedBranches(allLocalBranches, repository.indexedBranches);
      dialog.setPreReceiveScripts(gitblit.getPreReceiveScriptsUnused(repository),
            gitblit.getPreReceiveScriptsInherited(repository), repository.preReceiveScripts);
      dialog.setPostReceiveScripts(gitblit.getPostReceiveScriptsUnused(repository),
            gitblit.getPostReceiveScriptsInherited(repository), repository.postReceiveScripts);
      if (gitblit.getSettings().hasKey(Keys.groovy.customFields)) {
         Map<String, String> map = gitblit.getSettings().get(Keys.groovy.customFields).getMap();
         dialog.setCustomFields(repository, map);
      }
      dialog.setVisible(true);
      final RepositoryModel revisedRepository = dialog.getRepository();
      final List<String> permittedUsers = dialog.getPermittedUsers();
      final List<String> permittedTeams = dialog.getPermittedTeams();
      if (revisedRepository == null) {
         return;
      }
@@ -404,10 +482,11 @@
         @Override
         protected Boolean doRequest() throws IOException {
            boolean success = gitblit.updateRepository(repository.name, revisedRepository,
                  permittedUsers);
                  permittedUsers, permittedTeams);
            if (success) {
               gitblit.refreshRepositories();
               gitblit.refreshUsers();
               gitblit.refreshTeams();
            }
            return success;
         }
@@ -416,6 +495,7 @@
         protected void onSuccess() {
            updateTable(false);
            updateUsersTable();
            updateTeamsTable();
         }
         @Override
@@ -448,6 +528,7 @@
               if (success) {
                  gitblit.refreshRepositories();
                  gitblit.refreshUsers();
                  gitblit.refreshTeams();
               }
               return success;
            }
@@ -456,6 +537,7 @@
            protected void onSuccess() {
               updateTable(false);
               updateUsersTable();
               updateTeamsTable();
            }
            @Override
@@ -467,12 +549,12 @@
      }
   }
   protected void searchRepository(final RepositoryModel repository) {
      SearchDialog searchDialog = new SearchDialog(gitblit);
   private void showSearchDialog(boolean isSearch, final RepositoryModel repository) {
      final SearchDialog dialog = new SearchDialog(gitblit, isSearch);
      if (repository != null) {
         searchDialog.selectRepository(repository);
         dialog.selectRepository(repository);
      }
      searchDialog.setLocationRelativeTo(this);
      searchDialog.setVisible(true);
      dialog.setLocationRelativeTo(this);
      dialog.setVisible(true);
   }
}