package ro.nextreports.server.web.analysis.model;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.apache.wicket.injection.Injector;
import org.apache.wicket.markup.html.link.AbstractLink;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.LoadableDetachableModel;
import org.apache.wicket.spring.injection.annot.SpringBean;
import ro.nextreports.server.domain.Analysis;
import ro.nextreports.server.domain.Link;
import ro.nextreports.server.exception.NotFoundException;
import ro.nextreports.server.service.AnalysisService;
import ro.nextreports.server.service.StorageService;
import ro.nextreports.server.web.action.analysis.DefaultAnalysisActionContext;
import ro.nextreports.server.web.analysis.AnalysisSection;
import ro.nextreports.server.web.common.menu.MenuItem;
import ro.nextreports.server.web.common.menu.MenuPanel;
import ro.nextreports.server.web.core.action.ActionContext;
import ro.nextreports.server.web.core.action.ActionContributor;
import ro.nextreports.server.web.core.action.DefaultActionContext;
import ro.nextreports.server.web.core.section.SectionManager;
public class AnalysisPopupMenuModel extends LoadableDetachableModel<List<MenuItem>> {
private static final long serialVersionUID = 1L;
@SpringBean
private SectionManager sectionManager;
@SpringBean
private StorageService storageService;
@SpringBean
private AnalysisService analysisService;
private IModel<Object> model;
public AnalysisPopupMenuModel(IModel<Object> model) {
this.model = model;
}
@Override
protected List<MenuItem> load() {
Injector.get().inject(this);
List<MenuItem> menuItems = new ArrayList<MenuItem>();
Object analysis = model.getObject();
AnalysisSection analysisSection = (AnalysisSection)sectionManager.getSection(AnalysisSection.ID);
List<ActionContributor> popupContributors = analysisSection.getPopupContributors();
if (popupContributors != null) {
for (ActionContributor contributor : popupContributors) {
if (contributor.isVisible()) {
AbstractLink link = contributor.getLink(createActionContext(analysis));
if (link.isVisible()) {
menuItems.add(new MenuItem(link, contributor.getActionName(), contributor.getActionImage()));
}
}
}
}
//MenuItem menuItem = new MenuItem("images/" + ThemesManager.getActionImage(storageService.getSettings().getColorTheme()), null);
MenuItem menuItem = new MenuItem("images/actions.png", null);
menuItem.setMenuItems(menuItems);
return Arrays.asList(menuItem);
}
private ActionContext createActionContext(Object analysis) {
final String analysisId = getAnalysisId(analysis);
final String title = getTitle(analysis);
DefaultAnalysisActionContext actionContext = new DefaultAnalysisActionContext();
actionContext.setLinkId(MenuPanel.LINK_ID);
Analysis a = null;
try {
a = (Analysis) storageService.getEntityById(analysisId);
} catch (NotFoundException e) {
e.printStackTrace();
}
actionContext.setEntity(a);
actionContext.setAnalysisLink(isLink(analysis));
return actionContext;
}
private String getAnalysisId(Object object) {
if (isLink(object)) {
return ((Link) object).getReference();
}
return ((Analysis) object).getId();
}
private String getTitle(Object object) {
String title;
if (isLink(object)) {
title = ((Link) object).getName();
} else {
title = ((Analysis) object).getName();
}
return title;
}
private boolean isLink(Object object) {
return (object instanceof Link);
}
}