package org.brixcms.plugin.usermgmt.role.admin;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.apache.wicket.markup.html.basic.Label;
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.Role;
import org.brixcms.plugin.usermgmt.role.RoleRepository;
import org.brixcms.plugin.usermgmt.user.UserPlugin;
import org.brixcms.web.generic.BrixGenericPanel;
/**
* @author dan.simko@gmail.com
*/
@SuppressWarnings("serial")
class RolePermissionsTab extends BrixGenericPanel<Role> {
@SpringBean
private RoleRepository roleRepository;
public RolePermissionsTab(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 : roleRepository.getPermissions(getModelObject())) {
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")));
}
});
add(new Link<Void>("edit") {
@Override
public void onClick() {
RolePermissionsEditTab edit = new RolePermissionsEditTab(RolePermissionsTab.this.getId(),
RolePermissionsTab.this.getModel()) {
@Override
void goBack() {
replaceWith(RolePermissionsTab.this);
}
};
RolePermissionsTab.this.replaceWith(edit);
}
@Override
public boolean isVisible() {
Role entity = RolePermissionsTab.this.getModelObject();
return UserPlugin.get().canEditRolePermissions(entity);
}
});
}
}