package de.elatexam.editor.components.panels.tasks.mapping;
import java.util.List;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.markup.html.AjaxFallbackLink;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.form.TextField;
import org.apache.wicket.markup.html.link.Link;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.PropertyModel;
import org.apache.wicket.util.convert.IConverter;
import de.elatexam.editor.components.listeditor.ListEditor;
import de.elatexam.editor.components.listeditor.ListItem;
import de.elatexam.editor.components.listeditor.RemoveButton;
import de.elatexam.editor.components.panels.tasks.SubtaskSpecificsInputPanel;
import de.elatexam.model.MappingSubTaskDef;
import de.elatexam.model.MappingSubTaskDef.Assignment;
import de.elatexam.model.MappingSubTaskDef.Concept;
/**
* @author Steffen Dienst
*
*/
public class MappingSubtaskDefInputPanel extends SubtaskSpecificsInputPanel<MappingSubTaskDef> {
private final WebMarkupContainer assignmentContainer, conceptContainer;
public MappingSubtaskDefInputPanel(final String id, final IModel<MappingSubTaskDef> model) {
super(id, model);
// assignments
assignmentContainer = new WebMarkupContainer("assignementContainer");
final ListEditor<Assignment> assignmentsList = new ListEditor<Assignment>("assignments", new PropertyModel<List<Assignment>>(
model, "assignment")) {
@Override
protected void onPopulateItem(final ListItem<Assignment> item) {
item.add(new TextField("id", new PropertyModel(item.getModel(), "id")));
item.add(new TextField("name", new PropertyModel(item.getModel(), "name")));
item.add(new RemoveButton("delete"));
}
};
final Link addAssignement = new AjaxFallbackLink("addassignment") {
@Override
public void onClick(final AjaxRequestTarget target) {
assignmentsList.addItem(new Assignment());
if (target != null) {
target.add(assignmentContainer);
}
}
};
add(addAssignement);
assignmentContainer.setOutputMarkupId(true);
assignmentContainer.add(assignmentsList);
add(assignmentContainer);
conceptContainer = new WebMarkupContainer("conceptContainer");
final ListEditor<Concept> conceptList = new ListEditor<Concept>("concepts",
new PropertyModel<List<Concept>>(model, "concept")) {
@Override
protected void onPopulateItem(final ListItem<Concept> item) {
item.add(new TextField<String>("name", new PropertyModel<String>(item.getModel().getObject(), "name")).setEscapeModelStrings(false));
item.add(new TextField<String>("correctAssignmentID", new PropertyModel<String>(item.getModel(), "correctAssignmentID")) {
@Override
public IConverter getConverter(final Class type) {
if (List.class.isAssignableFrom(type)) {
return new CorrectAssignementConverter();
} else {
return super.getConverter(type);
}
}
});
item.add(new RemoveButton("delete"));
}
};
add(conceptList);
final Link addConcept = new AjaxFallbackLink("addconcept") {
@Override
public void onClick(final AjaxRequestTarget target) {
conceptList.addItem(new Concept());
if (target != null) {
target.add(conceptContainer);
}
}
};
add(addConcept);
conceptContainer.setOutputMarkupId(true);
conceptContainer.add(conceptList);
add(conceptContainer);
}
}