package de.flower.common.ui.ajax.dragndrop; import de.flower.common.ui.ajax.AbstractParameterizedDefaultAjaxBehavior; import de.flower.common.ui.util.MarkupIdVisitor; import org.apache.wicket.Component; import org.apache.wicket.ajax.AjaxRequestTarget; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * @author flowerrrr */ abstract class DropCallbackBehavior extends AbstractParameterizedDefaultAjaxBehavior { private final static Logger log = LoggerFactory.getLogger(DropCallbackBehavior.class); public Parameter<String> id = Parameter.of("id", String.class, "ui.helper[0].id"); public Parameter<Long> top = Parameter.of("top", Long.class, "top"); public Parameter<Long> left = Parameter.of("left", Long.class, "left"); public Parameter<Long> width = Parameter.of("width", Long.class, "width"); public Parameter<Long> height = Parameter.of("height", Long.class, "height"); @Override protected void respond(final AjaxRequestTarget target, final ParameterMap parameterMap) { MarkupIdVisitor visitor = new MarkupIdVisitor(parameterMap.getValue(id)); this.getComponent().getPage().visitChildren(visitor); Component draggedComponent = visitor.getFoundComponent(); if (draggedComponent == null) { // happens if element is dragged during ajax-refresh of panel log.warn("Dropped component not found."); return; } DraggableDto dto = new DraggableDto(); dto.entityId = ((IDraggable) draggedComponent).getEntityId(); dto.top = parameterMap.getValue(top); dto.left = parameterMap.getValue(left); onDrop(target, dto); } @Override protected Parameter<?>[] getParameter() { return new Parameter[]{id, top, left, width, height}; } protected abstract void onDrop(AjaxRequestTarget target, DraggableDto dto); }