From 9ba9be513a347ea9893c51f2db6b13f6c7cb08dd Mon Sep 17 00:00:00 2001 From: James Moger <james.moger@gitblit.com> Date: Wed, 31 Oct 2012 16:30:05 -0400 Subject: [PATCH] Added frm to default pretty print extensions (issue 156) --- src/com/gitblit/wicket/panels/RegistrantPermissionsPanel.java | 101 +++++++++++++++++++++++++++++++++++++++++++++----- 1 files changed, 90 insertions(+), 11 deletions(-) diff --git a/src/com/gitblit/wicket/panels/RegistrantPermissionsPanel.java b/src/com/gitblit/wicket/panels/RegistrantPermissionsPanel.java index 936659d..805db9d 100644 --- a/src/com/gitblit/wicket/panels/RegistrantPermissionsPanel.java +++ b/src/com/gitblit/wicket/panels/RegistrantPermissionsPanel.java @@ -28,16 +28,24 @@ import org.apache.wicket.markup.html.form.DropDownChoice; import org.apache.wicket.markup.html.form.Form; import org.apache.wicket.markup.html.form.IChoiceRenderer; +import org.apache.wicket.markup.html.panel.Fragment; import org.apache.wicket.markup.repeater.Item; import org.apache.wicket.markup.repeater.OddEvenItem; import org.apache.wicket.markup.repeater.RefreshingView; import org.apache.wicket.markup.repeater.util.ModelIteratorAdapter; import org.apache.wicket.model.CompoundPropertyModel; import org.apache.wicket.model.IModel; +import org.eclipse.jgit.lib.PersonIdent; import com.gitblit.Constants.AccessPermission; +import com.gitblit.Constants.PermissionType; +import com.gitblit.Constants.RegistrantType; +import com.gitblit.GitBlit; import com.gitblit.models.RegistrantAccessPermission; +import com.gitblit.models.UserModel; import com.gitblit.utils.DeepCopier; +import com.gitblit.utils.StringUtils; +import com.gitblit.wicket.WicketUtils; /** * Allows user to manipulate registrant access permissions. @@ -49,8 +57,9 @@ private static final long serialVersionUID = 1L; - public RegistrantPermissionsPanel(String wicketId, List<String> allRegistrants, final List<RegistrantAccessPermission> permissions, final Map<AccessPermission, String> translations) { + public RegistrantPermissionsPanel(String wicketId, RegistrantType registrantType, List<String> allRegistrants, final List<RegistrantAccessPermission> permissions, final Map<AccessPermission, String> translations) { super(wicketId); + setOutputMarkupId(true); // update existing permissions repeater RefreshingView<RegistrantAccessPermission> dataView = new RefreshingView<RegistrantAccessPermission>("permissionRow") { @@ -77,21 +86,74 @@ public void populateItem(final Item<RegistrantAccessPermission> item) { final RegistrantAccessPermission entry = item.getModelObject(); - item.add(new Label("registrant", entry.registrant)); + if (RegistrantType.REPOSITORY.equals(entry.registrantType)) { + String repoName = StringUtils.stripDotGit(entry.registrant); + if (StringUtils.findInvalidCharacter(repoName) == null) { + // repository, strip .git and show swatch + Label registrant = new Label("registrant", repoName); + WicketUtils.setCssClass(registrant, "repositorySwatch"); + WicketUtils.setCssBackground(registrant, repoName); + item.add(registrant); + } else { + // likely a regex + Label label = new Label("registrant", entry.registrant); + WicketUtils.setCssStyle(label, "font-weight: bold;"); + item.add(label); + } + } else if (RegistrantType.USER.equals(entry.registrantType)) { + // user + PersonIdent ident = new PersonIdent(entry.registrant, null); + UserModel user = GitBlit.self().getUserModel(entry.registrant); + if (user != null) { + ident = new PersonIdent(user.getDisplayName(), user.emailAddress); + } + + Fragment userFragment = new Fragment("registrant", "userRegistrant", RegistrantPermissionsPanel.this); + userFragment.add(new GravatarImage("userAvatar", ident, 16, false)); + userFragment.add(new Label("userName", entry.registrant)); + item.add(userFragment); + } else { + // team + Fragment teamFragment = new Fragment("registrant", "teamRegistrant", RegistrantPermissionsPanel.this); + teamFragment.add(new Label("teamName", entry.registrant)); + item.add(teamFragment); + } + switch (entry.permissionType) { + case OWNER: + Label owner = new Label("pType", "owner"); + WicketUtils.setHtmlTooltip(owner, getString("gb.ownerPermission")); + item.add(owner); + break; + case REGEX: + Label regex = new Label("pType", "regex"); + WicketUtils.setHtmlTooltip(regex, getString("gb.regexPermission")); + item.add(regex); + break; + default: + item.add(new Label("pType", "").setVisible(false)); + break; + } // use ajax to get immediate update of permission level change // otherwise we can lose it if they change levels and then add // a new repository permission final DropDownChoice<AccessPermission> permissionChoice = new DropDownChoice<AccessPermission>( "permission", Arrays.asList(AccessPermission.values()), new AccessPermissionRenderer(translations)); - permissionChoice.add(new AjaxFormComponentUpdatingBehavior("onchange") { + // only allow changing an explicitly defined permission + // this is designed to prevent changing a regex permission in + // a repository + permissionChoice.setEnabled(entry.isEditable); + permissionChoice.setOutputMarkupId(true); + if (entry.isEditable) { + permissionChoice.add(new AjaxFormComponentUpdatingBehavior("onchange") { - private static final long serialVersionUID = 1L; + private static final long serialVersionUID = 1L; - protected void onUpdate(AjaxRequestTarget target) { - target.addComponent(permissionChoice); - } - }); + protected void onUpdate(AjaxRequestTarget target) { + target.addComponent(permissionChoice); + } + }); + } item.add(permissionChoice); } @@ -102,11 +164,15 @@ // filter out registrants we already have permissions for final List<String> registrants = new ArrayList<String>(allRegistrants); for (RegistrantAccessPermission rp : permissions) { - registrants.remove(rp.registrant); + if (rp.isEditable) { + // only remove editable duplicates + // this allows for specifying an explicit permission + registrants.remove(rp.registrant); + } } // add new permission form - IModel<RegistrantAccessPermission> addPermissionModel = new CompoundPropertyModel<RegistrantAccessPermission>(new RegistrantAccessPermission()); + IModel<RegistrantAccessPermission> addPermissionModel = new CompoundPropertyModel<RegistrantAccessPermission>(new RegistrantAccessPermission(registrantType)); Form<RegistrantAccessPermission> addPermissionForm = new Form<RegistrantAccessPermission>("addPermissionForm", addPermissionModel); addPermissionForm.add(new DropDownChoice<String>("registrant", registrants)); addPermissionForm.add(new DropDownChoice<AccessPermission>("permission", Arrays @@ -119,7 +185,14 @@ protected void onSubmit(AjaxRequestTarget target, Form<?> form) { // add permission to our list RegistrantAccessPermission rp = (RegistrantAccessPermission) form.getModel().getObject(); - permissions.add(DeepCopier.copy(rp)); + if (rp.permission == null) { + return; + } + RegistrantAccessPermission copy = DeepCopier.copy(rp); + if (StringUtils.findInvalidCharacter(copy.registrant) != null) { + copy.permissionType = PermissionType.REGEX; + } + permissions.add(copy); // remove registrant from available choices registrants.remove(rp.registrant); @@ -134,6 +207,12 @@ add(addPermissionForm.setVisible(registrants.size() > 0)); } + protected boolean getStatelessHint() + { + return false; + } + + private class AccessPermissionRenderer implements IChoiceRenderer<AccessPermission> { private static final long serialVersionUID = 1L; -- Gitblit v1.9.1