Java tutorial
/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package com.github.moscaville.contactsdb.util; import com.vaadin.server.FileDownloader; import com.vaadin.server.StreamResource; import com.vaadin.server.StreamResource.StreamSource; import com.vaadin.server.VaadinRequest; import com.vaadin.server.VaadinResponse; import java.io.IOException; public class OnDemandFileDownloader extends FileDownloader { /** * Provide both the {@link StreamSource} and the filename in an on-demand * way. */ public interface OnDemandStreamResource extends StreamSource { String getFilename(); } private static final long serialVersionUID = 1L; private final OnDemandStreamResource onDemandStreamResource; public OnDemandFileDownloader(OnDemandStreamResource onDemandStreamResource) { super(new StreamResource(onDemandStreamResource, "contactsdb.csv")); this.onDemandStreamResource = onDemandStreamResource; } @Override public boolean handleConnectorRequest(VaadinRequest request, VaadinResponse response, String path) throws IOException { getResource().setFilename(onDemandStreamResource.getFilename()); return super.handleConnectorRequest(request, response, path); } private StreamResource getResource() { return (StreamResource) this.getResource("dl"); } }