/** * Copyright 2011 the original author or authors. * * 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 org.bricket.web.common; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.protocol.http.WicketURLEncoder; import org.apache.wicket.request.target.resource.ResourceStreamRequestTarget; import org.apache.wicket.util.file.File; import org.apache.wicket.util.resource.IResourceStream; import org.apache.wicket.util.resource.ZipResourceStream; import org.apache.wicket.util.string.Strings; import org.bricket.service.MessageException; import org.odlabs.wiquery.ui.themes.UiIcon; /** * @author Ingo Renner * @author Henning Teek */ public abstract class ZipDownloadActionLink extends AActionBricketLink { private final String fileName; public ZipDownloadActionLink(String fileName) { super(false); if (Strings.isEmpty(fileName)) { throw new IllegalArgumentException("fileName cannot be an empty string"); } this.fileName = WicketURLEncoder.QUERY_INSTANCE.encode(fileName); } @Override protected UiIcon getIcon() { return UiIcon.DISK; } @Override public void onClick(AjaxRequestTarget target) { try { final File file = new File(getFile()); final IResourceStream resourceStream = new ZipResourceStream(file, true); getRequestCycle().setRequestTarget(new ResourceStreamRequestTarget(resourceStream) { @Override public String getFileName() { return fileName; } }); } catch (MessageException e) { getSession().error(e.getMessage()); } } public abstract java.io.File getFile() throws MessageException; }