package org.nocket.gen.page.element; import gengui.domain.DomainObjectReference; import java.io.File; import org.apache.wicket.model.IModel; import org.apache.wicket.model.PropertyModel; import org.apache.wicket.protocol.http.WebApplication; import org.jsoup.nodes.Element; import org.nocket.gen.domain.element.SimplePropertyElement; import org.nocket.gen.page.DMDWebGenPageContext; import org.nocket.gen.page.visitor.PageElementVisitorI; public class FileDownloadElement extends AbstractDomainPageElement<File> { public FileDownloadElement(DMDWebGenPageContext context, Element element) { super(context, element); } @Override public IModel<File> innerGetModel() { IModel<Object> coreModel = new PropertyModel<Object>(getPropertyModelObject(), getPropertyExpression()); IModel model = new RelativeFileModel(coreModel); return (IModel<File>) model; } @Override public void accept(PageElementVisitorI visitor) { visitor.visitFileDownload(this); } @Override public SimplePropertyElement<DomainObjectReference> getDomainElement() { return (SimplePropertyElement<DomainObjectReference>) super.getDomainElement(); } @Override public boolean enableThoughUnmodifiable() { return true; } public static final class RelativeFileModel implements IModel<File> { private final IModel<Object> core; public RelativeFileModel(IModel<Object> core) { this.core = core; } @Override public void detach() { core.detach(); } @Override public File getObject() { File coreValue = (File) core.getObject(); return coreValue.isAbsolute() ? coreValue : new File(WebApplication.get().getServletContext().getRealPath(".") + "/" + coreValue.getPath()); } @Override public void setObject(File value) { core.setObject(value); } } }