package sushi.application.pages.process.modal; import java.util.ArrayList; import java.util.List; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.ajax.markup.html.form.AjaxButton; import org.apache.wicket.markup.html.form.DropDownChoice; import org.apache.wicket.markup.html.form.Form; import org.apache.wicket.markup.html.form.ListChoice; import org.apache.wicket.markup.html.form.TextField; import org.apache.wicket.model.Model; import sushi.application.components.form.BootstrapModal; import sushi.application.components.form.WarnOnExitForm; import sushi.process.SushiProcess; /** * This panel is a {@link BootstrapModal} and allows the creation and deletion of {@link SushiProcess}es. * @author micha */ public class ProcessEditorModal extends BootstrapModal { private static final long serialVersionUID = 1L; private ListChoice<String> existingProcessesList; private List<String> processNames = new ArrayList<String>(); private DropDownChoice<String> processSelect; private static String selectedProcessName = new String(); /** * Constructor for a panel, which is a {@link BootstrapModal} and allows the creation and deletion of {@link SushiProcess}es. * @param processSelect * @param window */ public ProcessEditorModal(String id, final DropDownChoice<String> processSelect) { super(id, "Process Editor"); this.processSelect = processSelect; Form<Void> processEditForm = new WarnOnExitForm("processEditForm"); add(processEditForm); // Input für neuen Prozess final TextField<String> processNameInput = new TextField<String>("processNameInput", Model.of("")); processNameInput.setOutputMarkupId(true); processEditForm.add(processNameInput); // Button zum Speichern AjaxButton addProcessButton = new AjaxButton("addProcessButton", processEditForm) { private static final long serialVersionUID = -8422505767509635904L; @Override public void onSubmit(AjaxRequestTarget target, Form form) { String processName = processNameInput.getValue(); if (!processName.isEmpty() && !SushiProcess.exists(processName)) { SushiProcess process = new SushiProcess(processName); process.save(); processNames.add(processName); target.add(existingProcessesList); processSelect.setChoices(processNames); target.add(processSelect); } } }; processEditForm.add(addProcessButton); // ListChoice für bestehende Prozesse for (SushiProcess process : SushiProcess.findAll()) { processNames.add(process.getName()); } existingProcessesList = new ListChoice<String>("existingProcessSelect", new Model<String>(selectedProcessName), processNames); existingProcessesList.setOutputMarkupId(true); processEditForm.add(existingProcessesList); // Button zum Löschen bestehender Prozesse AjaxButton removeProcessButton = new AjaxButton("removeProcessButton", processEditForm) { private static final long serialVersionUID = 3874692865572427214L; @Override public void onSubmit(AjaxRequestTarget target, Form form) { SushiProcess selectedProcess = getSelectedProcess(); if (selectedProcess != null) { String processName = selectedProcess.getName(); processNames.remove(processName); selectedProcess.remove(); } target.add(existingProcessesList); processSelect.setChoices(processNames); target.add(processSelect); } }; processEditForm.add(removeProcessButton); } private SushiProcess getSelectedProcess() { try { int processListIndex = Integer.parseInt(existingProcessesList.getValue()); String processName = existingProcessesList.getChoices().get(processListIndex); return SushiProcess.findByName(processName).get(0); } catch (Exception e) { return null; } } }