package org.nocket.gen.page.element;
import gengui.domain.DomainObjectReference;
import java.io.File;
import java.io.InputStream;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.PropertyModel;
import org.jsoup.nodes.Element;
import org.nocket.gen.domain.element.ResourceElement;
import org.nocket.gen.domain.element.SimplePropertyElement;
import org.nocket.gen.page.DMDWebGenPageContext;
import org.nocket.gen.page.element.synchronizer.FileToStringModelWrapper;
import org.nocket.gen.page.visitor.PageElementVisitorI;
public class LinkElement extends AbstractDomainPageElement<Object> {
public LinkElement(DMDWebGenPageContext context, Element element) {
super(context, element);
}
@Override
public IModel getModel() {
if (this.isResourceLink() && model == null) {
model = innerGetModel();
return model;
} else {
return super.getModel();
}
}
@Override
public IModel innerGetModel() {
if (isResourceLink()) {
return new PropertyModel<InputStream>(getPropertyModelObject(), getPropertyExpression());
} else if (isFileType()) {
IModel<File> coreModel = new PropertyModel<File>(getPropertyModelObject(), getPropertyExpression());
return new FileToStringModelWrapper(coreModel);
} else {
return new PropertyModel<String>(getPropertyModelObject(), getPropertyExpression());
}
}
protected boolean isFileType() {
if (this.getDomainElement() instanceof SimplePropertyElement) {
SimplePropertyElement<DomainObjectReference> simplePropertyElement = (SimplePropertyElement<DomainObjectReference>) this
.getDomainElement();
return simplePropertyElement.isFileType();
}
return false;
}
@Override
public void accept(PageElementVisitorI visitor) {
visitor.visitLink(this);
}
@Override
public boolean enableThoughUnmodifiable() {
return true;
}
public boolean isResourceLink() {
return super.getDomainElement() instanceof ResourceElement;
}
}