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.BPMNProcessFilter;
import sushi.application.pages.eventrepository.model.BPMNProcessProvider;
import sushi.bpmn.element.BPMNProcess;
/**
* {@link Panel}, which shows the {@link BPMNProcess}s stored in the database.
*/
public class BPMNProcessPanel extends Panel {
private static final long serialVersionUID = 1L;
private List<IColumn<BPMNProcess, String>> columns;
private BPMNProcessFilter bpmnProcessFilter;
private BPMNProcessProvider bpmnProcessProvider;
private DefaultDataTable<BPMNProcess, String> dataTable;
/**
* Constructor for the BPMN process panel.
* The page is initialized in this method and the data is loaded from the database.
* @param id
* @param abstractSushiPage
*/
public BPMNProcessPanel(String id, final AbstractSushiPage abstractSushiPage) {
super(id);
bpmnProcessProvider = new BPMNProcessProvider();
bpmnProcessFilter = new BPMNProcessFilter();
bpmnProcessProvider.setBPMNProcessFilter(bpmnProcessFilter);
Form<Void> buttonForm = new WarnOnExitForm("buttonForm");
List<String> processFilterCriteriaList = new ArrayList<String>(Arrays.asList(new String[] { "ID", "Name"}));
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) {
super.onSubmit(target, form);
String eventFilterCriteria = eventTypeFilterCriteriaSelect.getChoices().get(Integer.parseInt(eventTypeFilterCriteriaSelect.getValue()));
String eventFilterCondition = eventFilterConditionSelect.getChoices().get(Integer.parseInt(eventFilterConditionSelect.getValue()));
String filterValue = searchValueInput.getValue();
bpmnProcessProvider.setBPMNProcessFilter(new BPMNProcessFilter(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) {
super.onSubmit(target, form);
bpmnProcessProvider.setBPMNProcessFilter(new BPMNProcessFilter());
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);;
bpmnProcessProvider.deleteSelectedEntries();
target.add(dataTable);
}
};
buttonForm.add(deleteButton);
AjaxButton selectAllButton = new AjaxButton("selectAllButton", buttonForm) {
private static final long serialVersionUID = 1L;
@Override
public void onSubmit(AjaxRequestTarget target, Form form) {
super.onSubmit(target, form);
bpmnProcessProvider.selectAllEntries();
target.add(dataTable);
}
};
buttonForm.add(selectAllButton);
add(buttonForm);
Button createButton = new Button("linkButton") {
private static final long serialVersionUID = 1L;
@Override
public void onSubmit() {
// setResponsePage(ProcessEditor.class);
}
};
buttonForm.add(createButton);
add(buttonForm);
columns = new ArrayList<IColumn<BPMNProcess, String>>();
columns.add(new PropertyColumn<BPMNProcess, String>(Model.of("ID"), "ID"));
columns.add(new PropertyColumn<BPMNProcess, String>(Model.of("Name"), "name"));
columns.add(new AbstractColumn<BPMNProcess, String>(new Model("Select")) {
@Override
public void populateItem(Item cellItem, String componentId, IModel rowModel) {
int entryId = ((BPMNProcess) rowModel.getObject()).getID();
cellItem.add(new SelectEntryPanel(componentId, entryId, bpmnProcessProvider));
}
});
dataTable = new DefaultDataTable<BPMNProcess, String>("processes", columns, new BPMNProcessProvider(), 20);
dataTable.setOutputMarkupId(true);
add(dataTable);
}
};