package org.nocket.gen.domain.element;
import gengui.domain.AbstractDomainReference;
import gengui.domain.DomainClassReference;
import gengui.guibuilder.FormBuilder;
import gengui.util.DomainProperties;
import gengui.util.ReflectionUtil;
import java.lang.reflect.Method;
import org.nocket.gen.domain.ref.WrappedDomainReferenceI;
// TODO: Auto-generated Javadoc
/**
* The Class AbstractDomainElement.
*
* @param <E> the element type
*/
public abstract class AbstractDomainElement<E extends AbstractDomainReference> implements DomainElementI<E> {
/** The accessor. */
private WrappedDomainReferenceI<E> accessor;
/** The method. */
private Method method;
/**
* Instantiates a new abstract domain element.
*
* @param accessor the accessor
* @param method the method
*/
public AbstractDomainElement(WrappedDomainReferenceI<E> accessor, Method method) {
this.accessor = accessor;
this.method = method;
}
/* (non-Javadoc)
* @see org.nocket.gen.domain.element.DomainElementI#getAccessor()
*/
@Override
public WrappedDomainReferenceI<E> getAccessor() {
return accessor;
}
/* (non-Javadoc)
* @see org.nocket.gen.domain.element.DomainElementI#getPath()
*/
@Override
public String getPath() {
return accessor.getRef().getPath();
}
/* (non-Javadoc)
* @see org.nocket.gen.domain.element.DomainElementI#getPropertyName()
*/
@Override
public String getPropertyName() {
return ReflectionUtil.removePrefix(getMethod().getName());
}
/**
* Combination of PATH+NAME; e.g. "someEmbeddedBean.someProperty" or just
* "someProperty"
*
* @return the wicket id
*/
@Override
public String getWicketId() {
return accessor.getClassRef().buildFullName(getPropertyName());
}
/* (non-Javadoc)
* @see org.nocket.gen.domain.element.DomainElementI#getPrompt()
*/
@Override
public String getPrompt() {
return FormBuilder.buildPrompt(accessor.getClassRef(), method, getPropertyName());
}
/**
* Returns a prompt which may have run through a decoration process,
* currently only for the purpose of indicating mandatory input.
*
* @return the prompt formatted
*/
public String getPromptFormatted() {
String prompt = getPrompt();
DomainClassReference classref = accessor.getClassRef();
if (ReflectionUtil.isGetter(method) && FormBuilder.fieldRequiresInput(method, getPropertyName(), classref)) {
DomainProperties properties = new DomainProperties(classref);
String format = (method.getReturnType() != boolean.class) ?
properties.getMandatoryIndicator() : properties.getBooleanMandatoryIndicator();
prompt = String.format(format, prompt);
}
return prompt;
}
/* (non-Javadoc)
* @see org.nocket.gen.domain.element.DomainElementI#getMethod()
*/
@Override
public Method getMethod() {
return method;
}
/* (non-Javadoc)
* @see org.nocket.gen.domain.element.DomainElementI#repeated()
*/
@Override
public boolean repeated() {
return false;
}
}