diff options
author | Teemu Suo-Anttila <teemusa@vaadin.com> | 2016-04-15 11:06:18 +0300 |
---|---|---|
committer | Teemu Suo-Anttila <teemusa@vaadin.com> | 2016-04-15 14:00:58 +0300 |
commit | 6b8412033e680ce6e5c7827ac504adf132305726 (patch) | |
tree | 0df05d16c324b285610af8910c126b58f4c490c5 /uitest/src/main/java/com/vaadin/tests/dd/DragDropPane.java | |
parent | 9192b0bb5e5e699b506b3d3e7df4cf295fbea44a (diff) | |
download | vaadin-framework-6b8412033e680ce6e5c7827ac504adf132305726.tar.gz vaadin-framework-6b8412033e680ce6e5c7827ac504adf132305726.zip |
Build uitest war with maven
Change-Id: I32625901ca27a282253df44c6e776cf9632bacda
Diffstat (limited to 'uitest/src/main/java/com/vaadin/tests/dd/DragDropPane.java')
-rw-r--r-- | uitest/src/main/java/com/vaadin/tests/dd/DragDropPane.java | 187 |
1 files changed, 187 insertions, 0 deletions
diff --git a/uitest/src/main/java/com/vaadin/tests/dd/DragDropPane.java b/uitest/src/main/java/com/vaadin/tests/dd/DragDropPane.java new file mode 100644 index 0000000000..6296051ee2 --- /dev/null +++ b/uitest/src/main/java/com/vaadin/tests/dd/DragDropPane.java @@ -0,0 +1,187 @@ +package com.vaadin.tests.dd; + +import java.io.ByteArrayOutputStream; +import java.io.OutputStream; + +import com.vaadin.event.DataBoundTransferable; +import com.vaadin.event.Transferable; +import com.vaadin.event.dd.DragAndDropEvent; +import com.vaadin.event.dd.DropHandler; +import com.vaadin.event.dd.acceptcriteria.AcceptAll; +import com.vaadin.event.dd.acceptcriteria.AcceptCriterion; +import com.vaadin.server.StreamVariable; +import com.vaadin.shared.MouseEventDetails; +import com.vaadin.ui.AbsoluteLayout; +import com.vaadin.ui.AbsoluteLayout.ComponentPosition; +import com.vaadin.ui.Component; +import com.vaadin.ui.DragAndDropWrapper; +import com.vaadin.ui.Html5File; +import com.vaadin.ui.Label; + +/** + * replacement for a proto class to keep tests working + */ +public class DragDropPane extends DragAndDropWrapper implements DropHandler { + + private AbsoluteLayout root; + private AcceptCriterion crit; + + public DragDropPane() { + super(new AbsoluteLayout()); + root = (AbsoluteLayout) getCompositionRoot(); + setDropHandler(this); + setDragStartMode(DragStartMode.COMPONENT); + } + + public void addComponent(Component c) { + root.addComponent(c); + } + + /** + * + */ + private static final long serialVersionUID = 1L; + + public void addComponent(Component l, String string) { + root.addComponent(l, string); + } + + public void setAcceptCriterion(AcceptCriterion crit) { + this.crit = crit; + } + + @Override + public void drop(DragAndDropEvent event) { + + WrapperTargetDetails ed = (WrapperTargetDetails) event + .getTargetDetails(); + Transferable ctr = event.getTransferable(); + // use "component" (from DragDropPane) if available, else take + // the source component + Component component = null; + if (ctr instanceof WrapperTransferable) { + component = ((WrapperTransferable) ctr).getDraggedComponent(); + } else if (ctr instanceof DataBoundTransferable) { + // Item has been dragged, construct a Label from + // Item id + Label l = new Label(); + l.setSizeUndefined(); + l.setValue("ItemId : " + ((DataBoundTransferable) ctr).getItemId()); + component = l; + } + + if (component != null) { + + if (component.getParent() != root) { + + root.addComponent(component); + + Integer left = ed.getAbsoluteLeft(); + Integer top = ed.getAbsoluteTop(); + + MouseEventDetails eventDetails = ed.getMouseEvent(); + + int clientX = eventDetails.getClientX(); + int clientY = eventDetails.getClientY(); + + try { + root.getPosition(component).setTopValue( + Float.valueOf(clientY - top)); + root.getPosition(component).setLeftValue( + Float.valueOf(clientX - left)); + } catch (Exception e) { + } + } else { + // drag started and ended inside the this Pane + + MouseEventDetails start = ((WrapperTransferable) event + .getTransferable()).getMouseDownEvent(); + MouseEventDetails eventDetails = ed.getMouseEvent(); + + int deltaX = eventDetails.getClientX() - start.getClientX(); + int deltaY = eventDetails.getClientY() - start.getClientY(); + + ComponentPosition p = root.getPosition(component); + p.setTopValue(p.getTopValue() + deltaY); + p.setLeftValue(p.getLeftValue() + deltaX); + + } + } + + else { + // drag coming outside of Vaadin + + WrapperTransferable wtr = (WrapperTransferable) ctr; + + String object = wtr.getText(); + // String html = wtr.getHtml(); + // String url = (String) ctr.getData("Url"); + + final Label l = new Label(); + l.setCaption("Generated from HTML5 drag:"); + if (object != null) { + if (object.length() > 80) { + object = object.substring(0, 79); + } + l.setValue(object); + } else { + l.setValue("HTML5 dd"); + } + + Html5File[] files = wtr.getFiles(); + if (files != null) { + for (Html5File html5File : files) { + l.setCaption(html5File.getFileName()); + html5File.setStreamVariable(new StreamVariable() { + ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); + + @Override + public OutputStream getOutputStream() { + return byteArrayOutputStream; + } + + @Override + public boolean listenProgress() { + return false; + } + + @Override + public void onProgress(StreamingProgressEvent event) { + } + + @Override + public void streamingStarted(StreamingStartEvent event) { + } + + @Override + public void streamingFinished(StreamingEndEvent event) { + l.setValue((new String(byteArrayOutputStream + .toByteArray()).substring(0, 80) + "...")); + } + + @Override + public void streamingFailed(StreamingErrorEvent event) { + } + + @Override + public boolean isInterrupted() { + return false; + } + }); + } + } + + l.setSizeUndefined(); + + root.addComponent(l); + + } + return; + } + + @Override + public AcceptCriterion getAcceptCriterion() { + return crit != null ? crit : AcceptAll.get(); + } + +} |