package org.nocket.component.link;
import org.apache.wicket.IResourceListener;
import org.apache.wicket.markup.html.link.Link;
import org.apache.wicket.model.IModel;
import org.apache.wicket.request.cycle.RequestCycle;
import org.apache.wicket.request.resource.AbstractResource.ResourceResponse;
import org.apache.wicket.request.resource.ContentDisposition;
import org.apache.wicket.request.resource.IResource.Attributes;
import org.nocket.gen.page.visitor.bind.builder.LinkResource;
import org.nocket.gen.page.visitor.bind.builder.LinkResource.ResourceResponseFile;
public class DMDResourceLink extends Link implements IResourceListener {
private static final long serialVersionUID = 1L;
/** The Resource */
private final LinkResource resource;
private String contentType;
private ContentDisposition contentDisposition = ContentDisposition.ATTACHMENT;
private String textEncoding;
private String filename;
public DMDResourceLink(String id, final IModel<?> model) {
super(id);
this.resource = new LinkResource(model) {
private static final long serialVersionUID = 1L;
@Override
protected ResourceResponse createResourceResponse() {
return DMDResourceLink.this.createResourceResponse();
}
};
}
public ResourceResponse createResourceResponse() {
ResourceResponseFile resourceResponseFile = new ResourceResponseFile();
resourceResponseFile.setFileName(filename);
resourceResponseFile.setContentType(contentType);
resourceResponseFile.setTextEncoding(textEncoding);
resourceResponseFile.setContentDisposition(contentDisposition);
return resourceResponseFile;
}
/**
* @see org.apache.wicket.markup.html.link.Link#onClick()
*/
@Override
public void onClick()
{
}
/**
* @see org.apache.wicket.IResourceListener#onResourceRequested()
*/
@Override
public final void onResourceRequested()
{
Attributes a = new Attributes(RequestCycle.get().getRequest(), RequestCycle.get()
.getResponse(), null);
resource.respond(a);
onLinkClicked();
}
/**
* @see org.apache.wicket.markup.html.link.Link#getURL()
*/
@Override
protected final CharSequence getURL()
{
return urlFor(IResourceListener.INTERFACE, null);
}
public void withContentType(String contentType) {
this.contentType = contentType;
}
public void withContentDisposition(ContentDisposition contentDisposition) {
this.contentDisposition = contentDisposition;
}
public void withTextEncoding(String textEncoding) {
this.textEncoding = textEncoding;
}
public void withFilename(String filename) {
this.filename = filename;
}
}