package sushi.application.pages.eventrepository.processeditor;
import java.util.ArrayList;
import java.util.List;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
import org.apache.wicket.ajax.markup.html.form.AjaxButton;
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.WarnOnExitForm;
import sushi.application.pages.AbstractSushiPage;
import sushi.process.SushiProcess;
/**
* This class is page to create and delete {@link SushiProcess}es from the database.
* @author micha
*/
public class ProcessEditor extends AbstractSushiPage {
private static final long serialVersionUID = 1L;
private ListChoice<String> existingProcessesList;
private List<String> processNames = new ArrayList<String>();
private static String selectedProcessName = new String();
/**
* Constructor for a page to create and delete {@link SushiProcess}es from the database.
*/
public ProcessEditor(){
super();
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);
//Plus-Button zum Speichern
AjaxButton addProcessButton = new AjaxButton("addProcessButton", processEditForm) {
private static final long serialVersionUID = 1L;
@Override
public void onSubmit(AjaxRequestTarget target, Form form) {
String processName = processNameInput.getValue();
SushiProcess process = new SushiProcess(processName);
process.save();
processNames.add(processName);
target.add(existingProcessesList);
}
};
processEditForm.add(addProcessButton);
//ListChoice für bestehende Prozesse
for(SushiProcess process : SushiProcess.findAll()){
processNames.add(process.getName());
}
existingProcessesList = new ListChoice<String>("existingProcessSelect", new Model(selectedProcessName), processNames);
existingProcessesList.setOutputMarkupId(true);
existingProcessesList.add(new AjaxFormComponentUpdatingBehavior("onchange"){
@Override
protected void onUpdate(AjaxRequestTarget target) {
}
});
processEditForm.add(existingProcessesList);
//Minus-Button zum Löschen bestehender Prozesse
AjaxButton removeProcessButton = new AjaxButton("removeProcessButton", processEditForm) {
private static final long serialVersionUID = 1L;
@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);
}
};
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;
}
}
}