@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 @SuppressWarnings("static-access") public void drop(DragAndDropEvent dropEvent) { if (dropEvent.getTransferable().getSourceComponent() instanceof FileIcon) { // update the position DragAndDropWrapper.WrapperTransferable transferable = (WrapperTransferable) dropEvent.getTransferable(); MouseEventDetails mouseDownEvent = transferable.getMouseDownEvent(); WrapperTargetDetails dropTargetDetails = (WrapperTargetDetails) dropEvent.getTargetDetails(); MouseEventDetails mouseEvent = dropTargetDetails.getMouseEvent(); int deltaX = mouseEvent.getClientX() - mouseDownEvent.getClientX(); int deltaY = mouseEvent.getClientY() - mouseDownEvent.getClientY(); ComponentPosition position = l.getPosition(transferable.getSourceComponent()); position.setTop(position.getTopValue() + deltaY, UNITS_PIXELS); position.setLeft(position.getLeftValue() + deltaX, UNITS_PIXELS); } else if (dropEvent.getTransferable().getSourceComponent() == tree1) { // dragged something from tree to the folder shown File draggedFile = (File) ((DataBoundTransferable) dropEvent.getTransferable()).getItemId(); DDTest6.get().setParent(draggedFile, folder); } else { // expecting this to be an html5 drag WrapperTransferable tr = (WrapperTransferable) dropEvent.getTransferable(); Html5File[] files2 = tr.getFiles(); if (files2 != null) { for (Html5File html5File : files2) { String fileName = html5File.getFileName(); // int bytes = html5File.getFileSize(); final ByteArrayOutputStream bas = new ByteArrayOutputStream(); StreamVariable streamVariable = new StreamVariable() { @Override public OutputStream getOutputStream() { return bas; } @Override public boolean listenProgress() { return false; } @Override public void onProgress(StreamingProgressEvent event) {} @Override public void streamingStarted(StreamingStartEvent event) {} @Override public void streamingFinished(StreamingEndEvent event) {} @Override public void streamingFailed(StreamingErrorEvent event) {} @Override public boolean isInterrupted() { return false; } }; html5File.setStreamVariable(streamVariable); File file = new File(fileName, bas); file.setType(html5File.getType()); // FF don't know csv if (fileName.endsWith(".csv")) { file.setType("text/csv"); } DDTest6.get().fs1.addBean(file); DDTest6.get().tree1.setChildrenAllowed(file, false); DDTest6.get().setParent(file, folder); } } } }