package ro.nextreports.server.web.action.dashboard; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.injection.Injector; import org.apache.wicket.spring.injection.annot.SpringBean; import ro.nextreports.server.domain.Entity; import ro.nextreports.server.exception.NotFoundException; import ro.nextreports.server.service.DashboardService; import ro.nextreports.server.service.SecurityService; import ro.nextreports.server.util.PermissionUtil; import ro.nextreports.server.util.ServerUtil; import ro.nextreports.server.web.core.action.ActionAjaxLink; import ro.nextreports.server.web.core.action.ActionContext; import ro.nextreports.server.web.dashboard.DashboardBrowserPanel; import ro.nextreports.server.web.dashboard.DashboardPanel; import ro.nextreports.server.web.security.SecurityPanel; public class ShareActionLink extends ActionAjaxLink { private ActionContext actionContext; @SpringBean private SecurityService securityService; public void setSecurityService(SecurityService securityService) { this.securityService = securityService; } public ShareActionLink(ActionContext actionContext) { super(actionContext); this.actionContext = actionContext; Injector.get().inject(this); } public void executeAction(AjaxRequestTarget target) { Entity entity = getActionContext().getEntity(); final DashboardBrowserPanel panel = findParent(DashboardBrowserPanel.class); panel.setWorkspace(new SecurityPanel("work", entity) { protected void onCancel(AjaxRequestTarget target) { panel.setWorkspace(new DashboardPanel("work"), target); } }, target); } @Override public boolean isVisible() { if (DashboardService.MY_DASHBOARD_NAME.equals(actionContext.getEntity().getName())) { return false; } return hasSecurityPermission( actionContext.getEntity().getId() ); } private boolean hasSecurityPermission(String dashboardId) { try { return securityService.hasPermissionsById(ServerUtil.getUsername(), PermissionUtil.getSecurity(), dashboardId); } catch (NotFoundException e) { // TODO e.printStackTrace(); } return false; } }