/******************************************************************************* * Copyright (c) 2015 Development Gateway, Inc and others. * * All rights reserved. This program and the accompanying materials * are made available under the terms of the MIT License (MIT) * which accompanies this distribution, and is available at * https://opensource.org/licenses/MIT * * Contributors: * Development Gateway - initial API and implementation *******************************************************************************/ package org.devgateway.toolkit.forms.wicket.components.util; import java.io.IOException; import java.io.OutputStream; import org.apache.wicket.markup.html.link.Link; import org.apache.wicket.model.IModel; import org.apache.wicket.model.StringResourceModel; import org.apache.wicket.request.handler.resource.ResourceStreamRequestHandler; import org.apache.wicket.request.resource.ContentDisposition; import org.apache.wicket.util.resource.AbstractResourceStreamWriter; import org.devgateway.toolkit.persistence.dao.FileMetadata; import de.agilecoders.wicket.core.markup.html.bootstrap.components.TooltipBehavior; import de.agilecoders.wicket.core.markup.html.bootstrap.components.TooltipConfig; import de.agilecoders.wicket.core.markup.html.bootstrap.image.GlyphIconType; import de.agilecoders.wicket.core.markup.html.bootstrap.image.IconBehavior; /** * @author idobre * @since 11/14/14 */ public class CustomDownloadLink extends Link<FileMetadata> { /** * */ private static final long serialVersionUID = 1L; private static final TooltipConfig TOOLTIP_CONFIG = new TooltipConfig().withPlacement(TooltipConfig.Placement.bottom); public CustomDownloadLink(final String id, final IModel<FileMetadata> model) { super(id, model); add(new IconBehavior(GlyphIconType.download)); add(new TooltipBehavior(new StringResourceModel("downloadUploadedFileTooltip", this, null), TOOLTIP_CONFIG)); } @Override public void onClick() { AbstractResourceStreamWriter rstream = new AbstractResourceStreamWriter() { /** * */ private static final long serialVersionUID = 1L; @Override public void write(final OutputStream output) throws IOException { output.write(getModelObject().getContent().getBytes()); } @Override public String getContentType() { return getModelObject().getContentType(); } }; ResourceStreamRequestHandler handler = new ResourceStreamRequestHandler(rstream, getModelObject().getName()); handler.setContentDisposition(ContentDisposition.ATTACHMENT); getRequestCycle().scheduleRequestHandlerAfterCurrent(handler); } }