diff options
author | Artur Signell <artur@vaadin.com> | 2015-06-08 08:42:34 +0300 |
---|---|---|
committer | Johannes Dahlström <johannesd@vaadin.com> | 2015-06-09 11:48:48 +0300 |
commit | 7892592d037f7070bbe89d939756f7f82cb505a4 (patch) | |
tree | 42ff8b0b1b90d2dfa9865605b0a9185e1c218aab /uitest/src/com/vaadin/tests/components/FileDownloaderUI.java | |
parent | f006ad333aaef4dad541ed639a7ccc49c6dcda50 (diff) | |
download | vaadin-framework-7892592d037f7070bbe89d939756f7f82cb505a4.tar.gz vaadin-framework-7892592d037f7070bbe89d939756f7f82cb505a4.zip |
Fix test broken by #16556
Change-Id: I4e0883c58c425fc6287212a97f740016223914b5
Diffstat (limited to 'uitest/src/com/vaadin/tests/components/FileDownloaderUI.java')
-rw-r--r-- | uitest/src/com/vaadin/tests/components/FileDownloaderUI.java | 209 |
1 files changed, 209 insertions, 0 deletions
diff --git a/uitest/src/com/vaadin/tests/components/FileDownloaderUI.java b/uitest/src/com/vaadin/tests/components/FileDownloaderUI.java new file mode 100644 index 0000000000..b1379080e9 --- /dev/null +++ b/uitest/src/com/vaadin/tests/components/FileDownloaderUI.java @@ -0,0 +1,209 @@ +/* + * Copyright 2012 Vaadin Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ + +package com.vaadin.tests.components; + +import java.awt.image.BufferedImage; +import java.io.BufferedOutputStream; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.List; + +import javax.imageio.ImageIO; + +import com.vaadin.server.ClassResource; +import com.vaadin.server.ConnectorResource; +import com.vaadin.server.FileDownloader; +import com.vaadin.server.FileResource; +import com.vaadin.server.StreamResource; +import com.vaadin.server.VaadinRequest; +import com.vaadin.server.VaadinResponse; +import com.vaadin.tests.components.embedded.EmbeddedPdf; +import com.vaadin.ui.AbstractComponent; +import com.vaadin.ui.Button; +import com.vaadin.ui.Button.ClickEvent; +import com.vaadin.ui.Button.ClickListener; +import com.vaadin.ui.Component; +import com.vaadin.ui.CssLayout; +import com.vaadin.ui.HorizontalLayout; +import com.vaadin.ui.Label; +import com.vaadin.ui.Layout; +import com.vaadin.ui.NativeButton; + +public class FileDownloaderUI extends AbstractTestUIWithLog { + + private AbstractComponent firstDownloadComponent; + + @Override + protected void setup(VaadinRequest request) { + List<Class<? extends Component>> components = new ArrayList<Class<? extends Component>>(); + components.add(Button.class); + components.add(NativeButton.class); + components.add(CssLayout.class); + components.add(Label.class); + + ConnectorResource resource; + resource = new StreamResource(new StreamResource.StreamSource() { + + @Override + public InputStream getStream() { + try { + BufferedImage img = getImage2("demo.png"); + ByteArrayOutputStream imagebuffer = new ByteArrayOutputStream(); + ImageIO.write(img, "png", imagebuffer); + Thread.sleep(5000); + + return new ByteArrayInputStream(imagebuffer.toByteArray()); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + }, "demo.png"); + addComponents("Dynamic image", resource, components); + try { + File hugeFile = File.createTempFile("huge", ".txt"); + hugeFile.deleteOnExit(); + BufferedOutputStream os = new BufferedOutputStream( + new FileOutputStream(hugeFile)); + int writeAtOnce = 1024 * 1024; + byte[] b = new byte[writeAtOnce]; + for (int i = 0; i < 5l * 1024l * 1024l; i += writeAtOnce) { + os.write(b); + } + os.close(); + resource = new FileResource(hugeFile); + addComponents("Huge text file", resource, components); + } catch (IOException e) { + e.printStackTrace(); + } + resource = new ClassResource(new EmbeddedPdf().getClass(), "test.pdf"); + addComponents("Class resource pdf", resource, components); + + Button downloadUtf8File = new Button("Download UTF-8 named file"); + FileDownloader fd = new FileDownloader(new ClassResource( + new EmbeddedPdf().getClass(), "åäö-日本語.pdf")); + fd.setOverrideContentType(false); + fd.extend(downloadUtf8File); + addComponent(downloadUtf8File); + + addComponent(new Button("Remove first download button", + new ClickListener() { + + @Override + public void buttonClick(ClickEvent event) { + Layout parent = (Layout) firstDownloadComponent + .getParent(); + parent.removeComponent(firstDownloadComponent); + } + })); + addComponent(new Button( + "Detach FileDownloader from first download button", + new ClickListener() { + + @Override + public void buttonClick(ClickEvent event) { + FileDownloader e = (FileDownloader) firstDownloadComponent + .getExtensions().iterator().next(); + e.remove(); + log("FileDownload detached"); + } + })); + } + + public void addComponents(String caption, ConnectorResource resource, + List<Class<? extends Component>> components) { + HorizontalLayout layout = new HorizontalLayout(); + layout.setCaption(caption); + for (Class<? extends Component> cls : components) { + try { + AbstractComponent c = (AbstractComponent) cls.newInstance(); + if (firstDownloadComponent == null) { + firstDownloadComponent = c; + } + + c.setId(cls.getName() + caption.replace(" ", "")); + c.setCaption(cls.getName()); + c.setDescription(resource.getMIMEType() + " / " + + resource.getClass()); + c.setWidth("100px"); + c.setHeight("100px"); + + layout.addComponent(c); + + new FileDownloader(resource).extend(c); + + if (c instanceof Button) { + ((Button) c).addClickListener(new ClickListener() { + + @Override + public void buttonClick(ClickEvent event) { + } + }); + } + } catch (Exception e) { + System.err.println("Could not instatiate " + cls.getName()); + } + } + addComponent(layout); + } + + private static final String DYNAMIC_IMAGE_NAME = "requestImage.png"; + + @Override + public boolean handleConnectorRequest(VaadinRequest request, + VaadinResponse response, String path) throws IOException { + if (DYNAMIC_IMAGE_NAME.equals(path)) { + // Create an image, draw the "text" parameter to it and output it to + // the browser. + String text = request.getParameter("text"); + if (text == null) { + text = DYNAMIC_IMAGE_NAME; + } + BufferedImage bi = getImage(text); + response.setContentType("image/png"); + response.setHeader("Content-Disposition", "attachment; filename=\"" + + path + "\""); + ImageIO.write(bi, "png", response.getOutputStream()); + + return true; + } else { + return super.handleConnectorRequest(request, response, path); + } + } + + private BufferedImage getImage(String text) { + BufferedImage bi = new BufferedImage(150, 30, + BufferedImage.TYPE_3BYTE_BGR); + bi.getGraphics() + .drawChars(text.toCharArray(), 0, text.length(), 10, 20); + return bi; + } + + private BufferedImage getImage2(String text) { + BufferedImage bi = new BufferedImage(200, 200, + BufferedImage.TYPE_INT_RGB); + bi.getGraphics() + .drawChars(text.toCharArray(), 0, text.length(), 10, 20); + return bi; + } + +} |