package fr.openwide.core.wicket.markup.html.basic; import org.apache.wicket.markup.ComponentTag; import org.apache.wicket.markup.MarkupStream; import org.apache.wicket.markup.parser.XmlTag.TagType; import org.apache.wicket.model.IModel; import org.apache.wicket.util.lang.Classes; public class EnumCoreLabel<E extends Enum<E>> extends AbstractGenericLabel<E, EnumCoreLabel<E>> { private static final long serialVersionUID = 1809672380316539749L; public EnumCoreLabel(String id, IModel<E> model) { super(id, model); } @Override protected EnumCoreLabel<E> thisAsT() { return this; } @Override public void onComponentTagBody(final MarkupStream markupStream, final ComponentTag openTag) { E value = getModelObject(); if (value != null) { replaceComponentTagBody(markupStream, openTag, getString(resourceKey(value))); } else { super.onComponentTagBody(markupStream, openTag); } } /** * Converts enum value into a resource key that should be used to lookup the text the label will * display * * @param value * @return resource key */ protected String resourceKey(E value) { return Classes.simpleName(value.getDeclaringClass()) + '.' + value.name(); } @Override protected void onComponentTag(ComponentTag tag) { super.onComponentTag(tag); // always transform the tag to <span></span> so even labels defined as <span/> render tag.setType(TagType.OPEN); } }