From 8bc725871269aa47f8ef6db086a4cfedc75ef140 Mon Sep 17 00:00:00 2001 From: James Moger <james.moger@gitblit.com> Date: Mon, 29 Oct 2012 09:19:03 -0400 Subject: [PATCH] Use repository swatch coloring in registrant permissions panel --- src/com/gitblit/client/EditUserDialog.java | 63 +++++++++++++++++++++++++++---- 1 files changed, 54 insertions(+), 9 deletions(-) diff --git a/src/com/gitblit/client/EditUserDialog.java b/src/com/gitblit/client/EditUserDialog.java index d78924c..e096693 100644 --- a/src/com/gitblit/client/EditUserDialog.java +++ b/src/com/gitblit/client/EditUserDialog.java @@ -47,6 +47,7 @@ import com.gitblit.Constants.AccessRestrictionType; import com.gitblit.Keys; +import com.gitblit.models.RegistrantAccessPermission; import com.gitblit.models.RepositoryModel; import com.gitblit.models.ServerSettings; import com.gitblit.models.TeamModel; @@ -78,10 +79,14 @@ private JTextField emailAddressField; private JCheckBox canAdminCheckbox; + + private JCheckBox canForkCheckbox; + + private JCheckBox canCreateCheckbox; private JCheckBox notFederatedCheckbox; - private JPalette<String> repositoryPalette; + private RegistrantPermissionsPanel repositoryPalette; private JPalette<TeamModel> teamsPalette; @@ -126,9 +131,19 @@ displayNameField = new JTextField(anUser.displayName == null ? "" : anUser.displayName, 25); emailAddressField = new JTextField(anUser.emailAddress == null ? "" : anUser.emailAddress, 25); canAdminCheckbox = new JCheckBox(Translation.get("gb.canAdminDescription"), anUser.canAdmin); + canForkCheckbox = new JCheckBox(Translation.get("gb.canForkDescription"), anUser.canFork); + canCreateCheckbox = new JCheckBox(Translation.get("gb.canCreateDescription"), anUser.canCreate); notFederatedCheckbox = new JCheckBox( Translation.get("gb.excludeFromFederationDescription"), anUser.excludeFromFederation); + + // credentials are optionally controlled by 3rd-party authentication + usernameField.setEnabled(settings.supportsCredentialChanges); + passwordField.setEnabled(settings.supportsCredentialChanges); + confirmPasswordField.setEnabled(settings.supportsCredentialChanges); + + displayNameField.setEnabled(settings.supportsDisplayNameChanges); + emailAddressField.setEnabled(settings.supportsEmailAddressChanges); JPanel fieldsPanel = new JPanel(new GridLayout(0, 1)); fieldsPanel.add(newFieldPanel(Translation.get("gb.username"), usernameField)); @@ -137,12 +152,15 @@ fieldsPanel.add(newFieldPanel(Translation.get("gb.displayName"), displayNameField)); fieldsPanel.add(newFieldPanel(Translation.get("gb.emailAddress"), emailAddressField)); fieldsPanel.add(newFieldPanel(Translation.get("gb.canAdmin"), canAdminCheckbox)); + fieldsPanel.add(newFieldPanel(Translation.get("gb.canFork"), canForkCheckbox)); + fieldsPanel.add(newFieldPanel(Translation.get("gb.canCreate"), canCreateCheckbox)); fieldsPanel.add(newFieldPanel(Translation.get("gb.excludeFromFederation"), notFederatedCheckbox)); final Insets _insets = new Insets(5, 5, 5, 5); - repositoryPalette = new JPalette<String>(); + repositoryPalette = new RegistrantPermissionsPanel(); teamsPalette = new JPalette<TeamModel>(); + teamsPalette.setEnabled(settings.supportsTeamMembershipChanges); JPanel fieldsPanelTop = new JPanel(new BorderLayout()); fieldsPanelTop.add(fieldsPanel, BorderLayout.NORTH); @@ -297,10 +315,13 @@ user.emailAddress = emailAddressField.getText().trim(); user.canAdmin = canAdminCheckbox.isSelected(); + user.canFork = canForkCheckbox.isSelected(); + user.canCreate = canCreateCheckbox.isSelected(); user.excludeFromFederation = notFederatedCheckbox.isSelected(); - user.repositories.clear(); - user.repositories.addAll(repositoryPalette.getSelections()); + for (RegistrantAccessPermission rp : repositoryPalette.getPermissions()) { + user.setRepositoryPermission(rp.registrant, rp.permission); + } user.teams.clear(); user.teams.addAll(teamsPalette.getSelections()); @@ -319,7 +340,7 @@ } } - public void setRepositories(List<RepositoryModel> repositories, List<String> selected) { + public void setRepositories(List<RepositoryModel> repositories, List<RegistrantAccessPermission> permissions) { List<String> restricted = new ArrayList<String>(); for (RepositoryModel repo : repositories) { if (repo.accessRestriction.exceeds(AccessRestrictionType.NONE)) { @@ -327,10 +348,34 @@ } } StringUtils.sortRepositorynames(restricted); - if (selected != null) { - StringUtils.sortRepositorynames(selected); + + List<String> list = new ArrayList<String>(); + // repositories + list.add(".*"); + // all repositories excluding personal repositories + list.add("[^~].*"); + String lastProject = null; + for (String repo : restricted) { + String projectPath = StringUtils.getFirstPathElement(repo); + if (lastProject == null || !lastProject.equalsIgnoreCase(projectPath)) { + lastProject = projectPath; + if (!StringUtils.isEmpty(projectPath)) { + // regex for all repositories within a project + list.add(projectPath + "/.*"); + } + list.add(repo); + } } - repositoryPalette.setObjects(restricted, selected); + + // remove repositories for which user already has a permission + if (permissions == null) { + permissions = new ArrayList<RegistrantAccessPermission>(); + } else { + for (RegistrantAccessPermission rp : permissions) { + list.remove(rp.registrant); + } + } + repositoryPalette.setObjects(list, permissions); } public void setTeams(List<TeamModel> teams, List<TeamModel> selected) { @@ -340,7 +385,7 @@ } teamsPalette.setObjects(teams, selected); } - + public UserModel getUser() { if (canceled) { return null; -- Gitblit v1.9.1