package ro.nextreports.server.web.action.dashboard; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow; import org.apache.wicket.injection.Injector; import org.apache.wicket.model.Model; import org.apache.wicket.model.StringResourceModel; import org.apache.wicket.spring.injection.annot.SpringBean; import ro.nextreports.server.StorageConstants; import ro.nextreports.server.exception.NotFoundException; import ro.nextreports.server.service.DashboardService; import ro.nextreports.server.service.StorageService; import ro.nextreports.server.web.NextServerSession; import ro.nextreports.server.web.core.BasePage; import ro.nextreports.server.web.core.action.ActionAjaxLink; import ro.nextreports.server.web.dashboard.Dashboard; import ro.nextreports.server.web.dashboard.DashboardBrowserPanel; import ro.nextreports.server.web.dashboard.DashboardUtil; import ro.nextreports.server.web.dashboard.ModifyDashboardPanel; import ro.nextreports.server.web.dashboard.Widget; public class ModifyActionLink extends ActionAjaxLink { private DashboardActionContext actionContext; @SpringBean private DashboardService dashboardService; @SpringBean private StorageService storageService; public void setDashboardService(DashboardService dashboardService) { this.dashboardService = dashboardService; } public void setStorageService(StorageService storageService) { this.storageService = storageService; } public ModifyActionLink(DashboardActionContext actionContext) { super(actionContext); this.actionContext = actionContext; Injector.get().inject(this); } public void executeAction(AjaxRequestTarget target) { Dashboard board = null; try { // refresh widgets board = dashboardService.getDashboard(actionContext.getEntity().getId()); } catch (NotFoundException e) { e.printStackTrace(); } final Dashboard d = board; final ModalWindow dialog = findParent(BasePage.class).getDialog(); final DashboardBrowserPanel dp = findParent(DashboardBrowserPanel.class); dialog.setTitle(new StringResourceModel("DashboardPopupMenuModel.modifyTitle", null).getString()); dialog.setInitialWidth(350); dialog.setUseInitialHeight(false); final ModifyDashboardPanel modifyDashboardPanel = new ModifyDashboardPanel(dialog.getContentId(), new Model<Dashboard>(d)) { private static final long serialVersionUID = 1L; @Override public void onModify(AjaxRequestTarget target) { ModalWindow.closeCurrent(target); d.setColumnCount(getColumnCount()); d.setTitle(getTitle()); dashboardService.modifyDashboard(d); String titleSelected = DashboardUtil.getDashboard(DashboardUtil.getSelectedDashboardId(), dashboardService).getTitle(); if (titleSelected.equals(getTitle())) { target.add(dp); } } @Override public boolean onVerify(AjaxRequestTarget target) { if (!d.getTitle().equals(getTitle())) { if (storageService.entityExists( StorageConstants.DASHBOARDS_ROOT + "/" + NextServerSession.get().getUsername() + "/" + getTitle())) { error(new StringResourceModel("DashboardPopupMenuModel.modifyExists", null).getString()); return false; } } for (Widget widget : d.getWidgets()) { if (getColumnCount() < widget.getColumn()+1) { error(new StringResourceModel("DashboardPopupMenuModel.modifyAsk", null).getString()); return false; } } return true; } @Override public void onCancel(AjaxRequestTarget target) { ModalWindow.closeCurrent(target); } }; dialog.setContent(modifyDashboardPanel); dialog.show(target); } @Override public boolean isVisible() { if (actionContext.isDashboardLink()) { return false; } return true; } }