package sushi.application.pages.eventrepository; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.ajax.markup.html.form.AjaxButton; 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.Button; import org.apache.wicket.markup.html.form.DropDownChoice; import org.apache.wicket.markup.html.form.Form; import org.apache.wicket.markup.html.form.TextField; 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.components.form.BlockingAjaxButton; import sushi.application.components.form.WarnOnExitForm; import sushi.application.components.table.SelectEntryPanel; import sushi.application.pages.AbstractSushiPage; import sushi.application.pages.eventrepository.model.ProcessFilter; import sushi.application.pages.eventrepository.model.ProcessProvider; import sushi.application.pages.eventrepository.processeditor.ProcessEditor; import sushi.process.SushiProcess; /** * {@link Panel}, which shows the {@link SushiProcess}es stored in the database. */ public class ProcessPanel extends Panel { private static final long serialVersionUID = 1L; private List<IColumn<SushiProcess, String>> columns; private ProcessFilter processFilter; private ProcessProvider processProvider; private DefaultDataTable<SushiProcess, String> dataTable; /** * Constructor for the process panel. * The page is initialized in this method and the data is loaded from the database. * @param id * @param abstractSushiPage */ public ProcessPanel(String id, final AbstractSushiPage abstractSushiPage) { super(id); processProvider = new ProcessProvider(); processFilter = new ProcessFilter(); processProvider.setProcessFilter(processFilter); Form<Void> buttonForm = new WarnOnExitForm("buttonForm"); List<String> processFilterCriteriaList = new ArrayList<String>(Arrays.asList(new String[] { "ID", "Name", "Process Instance", "Correlation Attribute"})); String selectedEventCriteria = "ID"; final DropDownChoice<String> eventTypeFilterCriteriaSelect = new DropDownChoice<String>("processFilterCriteria", new Model<String>(selectedEventCriteria), processFilterCriteriaList); buttonForm.add(eventTypeFilterCriteriaSelect); List<String> conditions = new ArrayList<String>(Arrays.asList(new String[] { "<", "=", ">" })); String selectedCondition = "="; final DropDownChoice<String> eventFilterConditionSelect = new DropDownChoice<String>("processFilterCondition", new Model<String>(selectedCondition), conditions); buttonForm.add(eventFilterConditionSelect); final TextField<String> searchValueInput = new TextField<String>("searchValueInput", Model.of("")); buttonForm.add(searchValueInput); AjaxButton filterButton = new AjaxButton("filterButton", buttonForm) { private static final long serialVersionUID = 1L; @Override public void onSubmit(AjaxRequestTarget target, Form form) { String eventFilterCriteria = eventTypeFilterCriteriaSelect.getChoices().get(Integer.parseInt(eventTypeFilterCriteriaSelect.getValue())); String eventFilterCondition = eventFilterConditionSelect.getChoices().get(Integer.parseInt(eventFilterConditionSelect.getValue())); String filterValue = searchValueInput.getValue(); processProvider.setProcessFilter(new ProcessFilter(eventFilterCriteria,eventFilterCondition, filterValue)); target.add(dataTable); } }; buttonForm.add(filterButton); AjaxButton resetButton = new AjaxButton("resetButton", buttonForm) { private static final long serialVersionUID = 1L; @Override public void onSubmit(AjaxRequestTarget target, Form form) { processProvider.setProcessFilter(new ProcessFilter()); target.add(dataTable); } }; buttonForm.add(resetButton); AjaxButton deleteButton = new BlockingAjaxButton("deleteButton", buttonForm) { private static final long serialVersionUID = 1L; @Override public void onSubmit(AjaxRequestTarget target, Form form) { super.onSubmit(target, form);; processProvider.deleteSelectedEntries(); target.add(dataTable); } }; buttonForm.add(deleteButton); add(buttonForm); AjaxButton selectAllButton = new BlockingAjaxButton("selectAllButton", buttonForm) { private static final long serialVersionUID = 1L; @Override public void onSubmit(AjaxRequestTarget target, Form form) { super.onSubmit(target, form);; processProvider.selectAllEntries(); target.add(dataTable); } }; buttonForm.add(selectAllButton); Button createButton = new Button("createButton") { private static final long serialVersionUID = 1L; @Override public void onSubmit() { setResponsePage(ProcessEditor.class); } }; buttonForm.add(createButton); add(buttonForm); columns = new ArrayList<IColumn<SushiProcess, String>>(); columns.add(new PropertyColumn<SushiProcess, String>(Model.of("ID"), "ID")); columns.add(new PropertyColumn<SushiProcess, String>(Model.of("Name"), "name")); columns.add(new PropertyColumn<SushiProcess, String>(Model.of("Process Instances"), "processInstances")); columns.add(new AbstractColumn<SushiProcess, String>(new Model("Select")) { @Override public void populateItem(Item cellItem, String componentId, IModel rowModel) { int entryId = ((SushiProcess) rowModel.getObject()).getID(); cellItem.add(new SelectEntryPanel(componentId, entryId, processProvider)); } }); dataTable = new DefaultDataTable<SushiProcess, String>("processes", columns, new ProcessProvider(), 20); dataTable.setOutputMarkupId(true); add(dataTable); } };