package org.brixcms.plugin.usermgmt.role.admin; import java.util.ArrayList; import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Set; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.ajax.form.OnChangeAjaxBehavior; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.form.CheckBox; import org.apache.wicket.markup.html.link.Link; import org.apache.wicket.markup.repeater.Item; import org.apache.wicket.markup.repeater.RefreshingView; import org.apache.wicket.model.CompoundPropertyModel; import org.apache.wicket.model.IModel; import org.apache.wicket.model.PropertyModel; import org.apache.wicket.spring.injection.annot.SpringBean; import org.brixcms.plugin.jpa.web.admin.EntityModel; import org.brixcms.plugin.usermgmt.role.Permission; import org.brixcms.plugin.usermgmt.role.PermissionRepository; import org.brixcms.plugin.usermgmt.role.Role; import org.brixcms.plugin.usermgmt.role.RoleRepository; import org.brixcms.plugin.usermgmt.role.service.RoleService; import org.brixcms.web.generic.BrixGenericPanel; /** * @author dan.simko@gmail.com */ @SuppressWarnings("serial") abstract class RolePermissionsEditTab extends BrixGenericPanel<Role> { @SpringBean private PermissionRepository permissionRepository; @SpringBean private RoleRepository roleRepository; @SpringBean private RoleService roleService; private Set<Long> assignedPermissionsIds = new HashSet<>(); public RolePermissionsEditTab(String id, IModel<Role> model) { super(id, new CompoundPropertyModel<>(model)); add(new RefreshingView<Permission>("permissions") { @Override protected Iterator<IModel<Permission>> getItemModels() { List<IModel<Permission>> models = new ArrayList<>(); for (Permission permission : permissionRepository.findAll()) { models.add(new EntityModel<Permission, Long>(permission)); } return models.iterator(); } @Override protected void populateItem(Item<Permission> item) { item.add(new Label("name", new PropertyModel<>(item.getModel(), "name"))); item.add(new CheckBox("checkbox", new IModel<Boolean>() { @Override public Boolean getObject() { return assignedPermissionsIds.contains(item.getModelObject().getId()); } @Override public void setObject(Boolean bool) { if (bool) { assignedPermissionsIds.add(item.getModelObject().getId()); } else { assignedPermissionsIds.remove(item.getModelObject().getId()); } } }).add(new OnChangeAjaxBehavior() { @Override protected void onUpdate(AjaxRequestTarget target) { // nothing to refresh } })); } }); add(new Link<Role>("save", model) { @Override public void onClick() { roleService.assignPermissions(getModelObject(), assignedPermissionsIds); getSession().info(getString("usermgmt-plugin.status.saved")); goBack(); } }); add(new Link<Void>("cancel") { @Override public void onClick() { getSession().info(getString("usermgmt-plugin.status.cancelled")); goBack(); } }); } @Override protected void onConfigure() { super.onConfigure(); for (Permission permission : roleRepository.getPermissions(getModelObject())) { assignedPermissionsIds.add(permission.getId()); } } abstract void goBack(); }