package sushi.application.pages.transformation.patternbuilder.model; import java.io.Serializable; import java.util.ArrayList; import java.util.Collections; 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.Form; import org.apache.wicket.markup.html.panel.Panel; import sushi.application.components.tree.TreeTableProvider; import sushi.application.pages.transformation.patternbuilder.PatternBuilderPanel; import sushi.event.collection.SushiTreeElement; import sushi.transformation.collection.SushiPatternTree; public class ElementOptionsPanel extends Panel { private static final long serialVersionUID = 1L; public ElementOptionsPanel(String id, final SushiTreeElement<Serializable> element, final PatternBuilderPanel patternBuilderPanel) { super(id); Form<Void> layoutForm = new Form<Void>("layoutForm"); final SushiPatternTree tree = patternBuilderPanel.getPatternTree(); final PatternElementTreeTable table = patternBuilderPanel.getPatternTreeTable(); final TreeTableProvider<Serializable> provider = patternBuilderPanel.getPatternTreeTableProvider(); AjaxButton moveUpButton = new AjaxButton("moveUpButton", layoutForm) { private static final long serialVersionUID = -3745820767717288739L; private List<SushiTreeElement<Serializable>> relatedElements = new ArrayList<SushiTreeElement<Serializable>>(); @Override public boolean isVisible() { if (element.hasParent()) { relatedElements = element.getParent().getChildren(); } else { return false; } return relatedElements.indexOf(element) > 0; } @Override public void onSubmit(AjaxRequestTarget target, Form<?> form) { Collections.swap(relatedElements, relatedElements.indexOf(element) - 1, relatedElements.indexOf(element)); element.getParent().setChildren(relatedElements); target.add(table); } }; layoutForm.add(moveUpButton); AjaxButton moveDownButton = new AjaxButton("moveDownButton", layoutForm) { private static final long serialVersionUID = -3745820767717288739L; private List<SushiTreeElement<Serializable>> relatedElements = new ArrayList<SushiTreeElement<Serializable>>(); @Override public boolean isVisible() { if (element.hasParent()) { relatedElements = element.getParent().getChildren(); } else { return false; } return (relatedElements.size() > 1) && (relatedElements.indexOf(element) < relatedElements.size() - 1); } @Override public void onSubmit(AjaxRequestTarget target, Form<?> form) { Collections.swap(relatedElements, relatedElements.indexOf(element), relatedElements.indexOf(element) + 1); element.getParent().setChildren(relatedElements); target.add(table); } }; layoutForm.add(moveDownButton); AjaxButton removeElementButton = new AjaxButton("removeElementButton", layoutForm) { private static final long serialVersionUID = 5743864457433235849L; @Override public void onSubmit(AjaxRequestTarget target, Form<?> form) { tree.removeElement(element); table.getSelectedElements().remove(element); if (!element.hasParent()) { provider.setRootElements(tree.getRoots()); // } else { // if (!element.getParent().hasChildren()) { // TODO: implement intelligent removal of parent elements // } } target.add(table); patternBuilderPanel.updateOnTreeElementSelection(target); } }; layoutForm.add(removeElementButton); add(layoutForm); } }