package ro.nextreports.server.web.action.analysis;
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.domain.Link;
import ro.nextreports.server.exception.NotFoundException;
import ro.nextreports.server.service.SecurityService;
import ro.nextreports.server.service.StorageService;
import ro.nextreports.server.util.PermissionUtil;
import ro.nextreports.server.util.ServerUtil;
import ro.nextreports.server.web.analysis.AnalysisBrowserPanel;
import ro.nextreports.server.web.analysis.AnalysisPanel;
import ro.nextreports.server.web.core.action.ActionAjaxLink;
import ro.nextreports.server.web.core.action.ActionContext;
import ro.nextreports.server.web.security.SecurityPanel;
import ro.nextreports.server.web.security.SecurityUtil;
public class ShareActionLink extends ActionAjaxLink {
private ActionContext actionContext;
@SpringBean
private SecurityService securityService;
@SpringBean
private StorageService storageService;
public void setSecurityService(SecurityService securityService) {
this.securityService = securityService;
}
public void setStorageService(StorageService storageService) {
this.storageService = storageService;
}
public ShareActionLink(ActionContext actionContext) {
super(actionContext);
this.actionContext = actionContext;
Injector.get().inject(this);
}
public void executeAction(AjaxRequestTarget target) {
Entity entity;
try {
entity = storageService.getEntityById(getAnalysisId());
final AnalysisBrowserPanel panel = findParent(AnalysisBrowserPanel.class);
panel.setWorkspace(new SecurityPanel("work", entity) {
protected void onCancel(AjaxRequestTarget target) {
panel.setWorkspace(new AnalysisPanel("work"), target);
}
}, target);
} catch (NotFoundException e) {
e.printStackTrace();
}
}
@Override
public boolean isVisible() {
return SecurityUtil.hasPermission(securityService, PermissionUtil.getSecurity(), getAnalysisId());
}
private String getAnalysisId() {
Entity entity = actionContext.getEntity();
String id;
if (entity instanceof Link) {
id = ((Link)entity).getReference();
} else {
id = entity.getId();
}
return id;
}
}