package ro.nextreports.server.web.action.analysis;
import java.util.List;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.injection.Injector;
import org.apache.wicket.model.StringResourceModel;
import org.apache.wicket.spring.injection.annot.SpringBean;
import ro.nextreports.server.domain.Analysis;
import ro.nextreports.server.domain.Entity;
import ro.nextreports.server.domain.Link;
import ro.nextreports.server.exception.NotFoundException;
import ro.nextreports.server.service.AnalysisService;
import ro.nextreports.server.service.SecurityService;
import ro.nextreports.server.util.PermissionUtil;
import ro.nextreports.server.web.NextServerSession;
import ro.nextreports.server.web.analysis.AnalysisBrowserPanel;
import ro.nextreports.server.web.analysis.AnalysisSection;
import ro.nextreports.server.web.analysis.model.SelectedAnalysisModel;
import ro.nextreports.server.web.common.menu.MenuPanel;
import ro.nextreports.server.web.common.misc.AjaxConfirmLink;
import ro.nextreports.server.web.core.section.SectionContext;
import ro.nextreports.server.web.core.section.SectionContextConstants;
import ro.nextreports.server.web.security.SecurityUtil;
public class DeleteActionLink extends AjaxConfirmLink {
private AnalysisActionContext actionContext;
@SpringBean
private AnalysisService analysisService;
@SpringBean
private SecurityService securityService;
public void setAnalysisService(AnalysisService analysisService) {
this.analysisService = analysisService;
}
public DeleteActionLink(AnalysisActionContext actionContext) {
super(MenuPanel.LINK_ID, new StringResourceModel("AnalysisPopupMenuModel.deleteAsk", null,
new Object[] { actionContext.getEntity().getName() }).getString());
this.actionContext = actionContext;
Injector.get().inject(this);
}
public void executeAction(AjaxRequestTarget target) {
Entity entity = actionContext.getEntity();
String id = getAnalysisId();
try {
analysisService.removeAnalysis(id);
} catch (NotFoundException e) {
// TODO
e.printStackTrace();
}
if (id.equals(getSelectedAnalysisId())) {
SectionContext sectionContext = NextServerSession.get().getSectionContext(AnalysisSection.ID);
List<Analysis> list = analysisService.getMyAnalysis();
if (list.size() > 0) {
String _id = list.get(0).getId();
sectionContext.getData().put(SectionContextConstants.SELECTED_ANALYSIS_ID, _id);
}
}
AnalysisBrowserPanel panel = findParent(AnalysisBrowserPanel.class);
panel.getAnalysisPanel().changeDataProvider(new SelectedAnalysisModel(), target);
target.add(panel);
}
@Override
public boolean isVisible() {
if (!SecurityUtil.hasPermission(securityService, PermissionUtil.getDelete(), getAnalysisId())) {
return false;
}
return true;
}
@Override
public void onClick(AjaxRequestTarget target) {
executeAction(target);
}
private String getSelectedAnalysisId() {
SectionContext sectionContext = NextServerSession.get().getSectionContext(AnalysisSection.ID);
return sectionContext.getData().getString(SectionContextConstants.SELECTED_ANALYSIS_ID);
}
private String getAnalysisId() {
Entity entity = actionContext.getEntity();
String id;
if (entity instanceof Link) {
id = ((Link)entity).getReference();
} else {
id = entity.getId();
}
return id;
}
}