package sushi.application.pages.monitoring.bpmn.analysis.modal; import java.util.ArrayList; import java.util.List; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.extensions.markup.html.repeater.data.table.HeadersToolbar; import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn; import org.apache.wicket.extensions.markup.html.repeater.data.table.PropertyColumn; import org.apache.wicket.extensions.markup.html.repeater.tree.table.TreeColumn; import org.apache.wicket.markup.head.CssHeaderItem; import org.apache.wicket.markup.head.IHeaderResponse; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.form.Form; import org.apache.wicket.model.Model; import org.apache.wicket.model.PropertyModel; import org.apache.wicket.request.resource.PackageResourceReference; import org.apache.wicket.request.resource.ResourceReference; import sushi.application.components.form.BootstrapModal; import sushi.application.components.tree.SushiLabelTreeTable; import sushi.application.pages.monitoring.bpmn.analysis.modal.model.ProcessAnalysingTreeTableElement; import sushi.application.pages.monitoring.bpmn.analysis.modal.model.ProcessAnalysingTreeTableExpansionModel; import sushi.application.pages.monitoring.bpmn.analysis.modal.model.ProcessAnalysingTreeTableProvider; import sushi.application.pages.monitoring.bpmn.monitoring.model.ProcessInstanceMonitoringTreeTableExpansionModel; import sushi.monitoring.bpmn.ProcessMonitor; import sushi.process.SushiProcess; /** * This is a modal for displaying the analysis status for a {@link SushiProcess}. * @author micha */ public class ProcessAnalysingModal extends BootstrapModal { private static final long serialVersionUID = 1L; private static final ResourceReference MODAL_SIZE_CSS = new PackageResourceReference(BootstrapModal.class, "modal_size.css"); private ProcessMonitor processMonitor; private SushiLabelTreeTable<ProcessAnalysingTreeTableElement, String> treeTable; private Form<Void> layoutForm; private ProcessAnalysingTreeTableProvider treeTableProvider = new ProcessAnalysingTreeTableProvider(processMonitor); private Label processNameLabel; private String processName; @Override public void renderHead(IHeaderResponse response) { super.renderHead(response); response.render(CssHeaderItem.forReference(MODAL_SIZE_CSS)); } /** * Constructor for a modal, which displays the analysis status for a {@link SushiProcess}. * @param id */ public ProcessAnalysingModal(String id) { super(id, "Process Analysis"); buildMainLayout(); } private void buildMainLayout() { layoutForm = new Form<Void>("layoutForm"); processNameLabel = new Label("processName", new PropertyModel<String>(this, "processName")); // processNameLabel = new Label("processName", Model.of("")); processNameLabel.setOutputMarkupId(true); layoutForm.add(processNameLabel); createTreeTable(); add(layoutForm); } private void createTreeTable() { List<IColumn<ProcessAnalysingTreeTableElement, String>> columns = createColumns(); treeTable = new SushiLabelTreeTable<ProcessAnalysingTreeTableElement, String>( "processAnalysisTreeTable", columns, treeTableProvider, Integer.MAX_VALUE, new ProcessAnalysingTreeTableExpansionModel()); treeTable.setOutputMarkupId(true); treeTable.getTable().addTopToolbar(new HeadersToolbar<String>(treeTable.getTable(), treeTableProvider)); ProcessInstanceMonitoringTreeTableExpansionModel.get().expandAll(); layoutForm.addOrReplace(treeTable); } private List<IColumn<ProcessAnalysingTreeTableElement, String>> createColumns() { List<IColumn<ProcessAnalysingTreeTableElement, String>> columns = new ArrayList<IColumn<ProcessAnalysingTreeTableElement, String>>(); columns.add(new TreeColumn<ProcessAnalysingTreeTableElement, String>(Model.of("Query"), "query")); columns.add(new PropertyColumn<ProcessAnalysingTreeTableElement, String>(Model.of("Monitored Elements"), "monitoredElements")); columns.add(new PropertyColumn<ProcessAnalysingTreeTableElement, String>(Model.of("Average Runtime"), "averageRuntime")); columns.add(new PropertyColumn<ProcessAnalysingTreeTableElement, String>(Model.of("Path frequency"), "pathFrequency")); return columns; } public void setProcessMonitor(ProcessMonitor processMonitor, AjaxRequestTarget target) { this.processMonitor = processMonitor; this.treeTableProvider.setProcessMonitor(processMonitor); refreshTreeTable(target); refreshLabel(processMonitor, target); } private void refreshLabel(ProcessMonitor processMonitor, AjaxRequestTarget target) { processName = (processMonitor != null) ? processMonitor.getProcess().getName() : ""; target.add(processNameLabel); } public void refreshTreeTable(AjaxRequestTarget target){ createTreeTable(); target.add(treeTable); } }