package sushi.application.pages.monitoring.bpmn.analysis; import java.util.ArrayList; import java.util.List; import org.apache.wicket.extensions.markup.html.repeater.data.table.AbstractColumn; import org.apache.wicket.extensions.markup.html.repeater.data.table.DefaultDataTable; 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.markup.html.form.DropDownChoice; import org.apache.wicket.markup.html.panel.Panel; import org.apache.wicket.markup.repeater.Item; import org.apache.wicket.model.IModel; import org.apache.wicket.model.Model; import sushi.application.pages.AbstractSushiPage; import sushi.application.pages.monitoring.bpmn.analysis.modal.ProcessAnalysingModal; import sushi.application.pages.monitoring.bpmn.analysis.model.ProcessMonitoringFilter; import sushi.application.pages.monitoring.bpmn.analysis.model.ProcessMonitoringProvider; import sushi.monitoring.bpmn.ProcessMonitor; import sushi.process.SushiProcess; import sushi.process.SushiProcessInstance; /** * This panel facilitates the analysis of finished {@link SushiProcessInstance}s. * The details for a single process instance are visualized with a {@link ProcessAnalysingModal}. * @author micha */ @SuppressWarnings("serial") public class BPMNAnalysisPanel extends Panel { private AbstractSushiPage abstractSushiPage; private ArrayList<String> processNameList; private DropDownChoice<String> processSelect; private DefaultDataTable<ProcessMonitor, String> dataTable; private ProcessMonitoringProvider processMonitoringProvider; private ProcessMonitoringFilter processMonitoringFilter; private SushiProcess process; private ProcessAnalysingModal processMonitorModal; /** * Constructor for a panel, which facilitates the analysis of finished {@link SushiProcessInstance}s. * @param id * @param abstractSushiPage */ public BPMNAnalysisPanel(String id, final AbstractSushiPage abstractSushiPage) { super(id); this.abstractSushiPage = abstractSushiPage; createProcessInstanceMonitoringProvider(); buildMainLayout(); } private void buildMainLayout() { addProcessInstanceMonitorModal(); addProcessTable(); } private void addProcessTable() { dataTable = new DefaultDataTable<ProcessMonitor, String>("processAnalysisTable", createColumns(), processMonitoringProvider, 20); dataTable.setOutputMarkupId(true); add(dataTable); } private void addProcessInstanceMonitorModal() { processMonitorModal = new ProcessAnalysingModal("processMonitorModal"); add(processMonitorModal); } private List<? extends IColumn<ProcessMonitor, String>> createColumns() { ArrayList<IColumn<ProcessMonitor, String>> columns = new ArrayList<IColumn<ProcessMonitor, String>>(); columns.add(new PropertyColumn<ProcessMonitor, String>(Model.of("ID"), "ID")); columns.add(new PropertyColumn<ProcessMonitor, String>(Model.of("Process"), "process")); columns.add(new PropertyColumn<ProcessMonitor, String>(Model.of("# of Process Instances"), "numberOfProcessInstances")); columns.add(new PropertyColumn<ProcessMonitor, String>(Model.of("Average runtime"), "averageRuntimeMillis")); // columns.add(new AbstractColumn(new Model("Status")) { // @Override // public void populateItem(Item cellItem, String componentId, IModel rowModel) { // int entryId = ((ProcessInstanceMonitor) rowModel.getObject()).getID(); // cellItem.add(new ProcessInstanceMonitoringStatusPanel(componentId, entryId, processInstanceMonitoringProvider)); // } // }); columns.add(new AbstractColumn(new Model("Status Details")) { @Override public void populateItem(Item cellItem, String componentId, IModel rowModel) { int entryId = ((ProcessMonitor) rowModel.getObject()).getID(); cellItem.add(new ProcessMonitorEntryDetailsPanel(componentId, entryId, processMonitoringProvider, processMonitorModal)); } }); return columns; } private void createProcessInstanceMonitoringProvider() { processMonitoringProvider = new ProcessMonitoringProvider(); processMonitoringFilter = new ProcessMonitoringFilter(); processMonitoringProvider.setProcessMonitorFilter(processMonitoringFilter); } }