package org.nocket.gen.page.element;
import gengui.domain.DomainObjectReference;
import org.apache.commons.lang.StringUtils;
import org.apache.wicket.model.IModel;
import org.jsoup.nodes.Element;
import org.nocket.gen.domain.element.DomainElementI;
import org.nocket.gen.domain.ref.WrappedDomainReferenceI;
import org.nocket.gen.page.DMDWebGenPageContext;
import org.nocket.gen.page.element.synchronizer.TouchedListenerModelWrapperFactory;
public abstract class AbstractDomainPageElement<M> extends AbstractPageElement<M> {
protected transient IModel<M> model;
public AbstractDomainPageElement(DMDWebGenPageContext context, Element element) {
super(context, element);
}
@Override
public WrappedDomainReferenceI<DomainObjectReference> getAccessor() {
return getDomainElement().getAccessor();
}
@Override
public IModel<M> getModel() {
if (model == null) {
model = TouchedListenerModelWrapperFactory.create(this, innerGetModel());
}
return model;
}
protected abstract IModel<M> innerGetModel();
@Override
public String getPropertyExpression() {
String expression = "";
String[] pathElements = getWicketId().split("\\.");
for (String pathElement : pathElements) {
expression += StringUtils.uncapitalize(pathElement) + ".";
}
expression = StringUtils.removeEnd(expression, ".");
return expression;
}
@Override
public DomainElementI<DomainObjectReference> getDomainElement() {
String wicketId = getWicketId();
if (wicketId != null) {
return getContext().getDomainRegistry().getElement(wicketId);
} else {
return null;
}
}
@Override
public boolean isDomainElement() {
return true;
}
@Override
public String getBeanValidationExpression() {
// forscher.nocket.page.gen.MergeInner.feld1
String path = getAccessor().getClassRef().getDomainClass().getName() + "." + getBeanValidationPropertyName();
return path;
}
@Override
public String getBeanValidationPropertyName() {
return StringUtils.uncapitalize(getDomainElement().getPropertyName());
}
}