package fr.openwide.maven.artifact.notifier.web.application.administration.component; import org.apache.wicket.Session; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.ajax.markup.html.form.AjaxSubmitLink; import org.apache.wicket.markup.html.WebMarkupContainer; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.form.Form; import org.apache.wicket.markup.html.link.Link; import org.apache.wicket.markup.repeater.Item; import org.apache.wicket.model.IModel; import org.apache.wicket.model.ResourceModel; import org.apache.wicket.model.StringResourceModel; import org.apache.wicket.spring.injection.annot.SpringBean; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import fr.openwide.core.wicket.markup.html.panel.GenericPanel; import fr.openwide.core.wicket.more.markup.html.collection.GenericEntitySetView; import fr.openwide.core.wicket.more.markup.html.feedback.FeedbackUtils; import fr.openwide.core.wicket.more.markup.html.template.js.jquery.plugins.bootstrap.confirm.component.AjaxConfirmLink; import fr.openwide.core.wicket.more.model.BindingModel; import fr.openwide.core.wicket.more.model.GenericEntityModel; import fr.openwide.core.wicket.more.model.ReadOnlyModel; import fr.openwide.maven.artifact.notifier.core.business.user.model.User; import fr.openwide.maven.artifact.notifier.core.business.user.model.UserGroup; import fr.openwide.maven.artifact.notifier.core.business.user.service.IUserGroupService; import fr.openwide.maven.artifact.notifier.core.util.binding.Binding; import fr.openwide.maven.artifact.notifier.web.application.administration.page.AdministrationUserGroupDescriptionPage; import fr.openwide.maven.artifact.notifier.web.application.common.component.UserGroupAutocompleteAjaxComponent; public class UserMembershipsPanel extends GenericPanel<User> { private static final long serialVersionUID = -517286662347263793L; private static final Logger LOGGER = LoggerFactory.getLogger(UserMembershipsPanel.class); @SpringBean private IUserGroupService userGroupService; private GenericEntitySetView<UserGroup> userGroupListView; public UserMembershipsPanel(String id, IModel<User> userModel) { super(id, userModel); // Groups list userGroupListView = new GenericEntitySetView<UserGroup>("groups", BindingModel.of(getModel(), Binding.user().groups())) { private static final long serialVersionUID = -6489746843440088695L; @Override protected void populateItem(final Item<UserGroup> item) { Link<Void> groupLink = AdministrationUserGroupDescriptionPage .linkDescriptor(ReadOnlyModel.of(item.getModelObject())) .link("groupLink"); groupLink.add(new Label("name", BindingModel.of(item.getModel(), Binding.userGroup().name()))); item.add(groupLink); IModel<String> confirmationTextModel = new StringResourceModel( "administration.usergroup.members.delete.confirmation.text") .setParameters( UserMembershipsPanel.this.getModelObject().getDisplayName(), item.getModelObject().getName() ) ; item.add(new AjaxConfirmLink<UserGroup>("deleteLink", item.getModel(), new ResourceModel("administration.usergroup.members.delete.confirmation.title"), confirmationTextModel, new ResourceModel("common.confirm"), new ResourceModel("common.cancel"), null, false) { private static final long serialVersionUID = -5179621361619239269L; @Override public void onClick(AjaxRequestTarget target) { try { UserGroup userGroup = getModelObject(); User user = UserMembershipsPanel.this.getModelObject(); userGroupService.removeUser(userGroup, user); Session.get().success(getString("administration.usergroup.members.delete.success")); } catch (Exception e) { LOGGER.error("Error occured while removing user from user group", e); Session.get().error(getString("administration.usergroup.members.delete.error")); } target.add(getPage()); FeedbackUtils.refreshFeedback(target, getPage()); } }); } }; add(userGroupListView); add(new WebMarkupContainer("emptyList") { private static final long serialVersionUID = -784607577583169098L; @Override public void onConfigure() { super.onConfigure(); setVisible(userGroupListView.size() <= 0); } }); // Add group form IModel<UserGroup> emptyUserGroupModel = new GenericEntityModel<Long, UserGroup>(null); final UserGroupAutocompleteAjaxComponent userGroupAutocomplete = new UserGroupAutocompleteAjaxComponent( "userGroupAutocomplete", emptyUserGroupModel); userGroupAutocomplete.setAutoUpdate(true); final Form<UserGroup> addGroupForm = new Form<UserGroup>("addGroupForm", emptyUserGroupModel); addGroupForm.add(userGroupAutocomplete); addGroupForm.add(new AjaxSubmitLink("addGroupLink", addGroupForm) { private static final long serialVersionUID = 6935376642872117563L; @Override protected void onSubmit(AjaxRequestTarget target, Form<?> form) { User user = UserMembershipsPanel.this.getModelObject(); UserGroup selectedUserGroup = userGroupAutocomplete.getModelObject(); if (selectedUserGroup != null) { try { userGroupService.addUser(selectedUserGroup, user); getSession().success(getString("administration.usergroup.members.add.success")); } catch (Exception e) { LOGGER.error("Unknown error occured while adding a user to a usergroup", e); getSession().error(getString("administration.usergroup.members.add.error")); } } userGroupAutocomplete.setModelObject(null); target.add(getPage()); FeedbackUtils.refreshFeedback(target, getPage()); } @Override protected void onError(AjaxRequestTarget target, Form<?> form) { FeedbackUtils.refreshFeedback(target, getPage()); } }); add(addGroupForm); } }