package fr.openwide.maven.artifact.notifier.web.application.common.component; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.model.IModel; import org.apache.wicket.model.ResourceModel; import org.springframework.util.StringUtils; public class LabelWithPlaceholder extends Label { private static final long serialVersionUID = -7506344388420093898L; private static final ResourceModel DEFAULT_EMPTY_FIELD_MODEL = new ResourceModel("common.emptyField"); private IModel<?> mainModel; private IModel<String> placeholderModel; private IModel<String> rawDataModel; private boolean hideIfEmpty = false; public LabelWithPlaceholder(String id, IModel<?> model) { this(id, model, DEFAULT_EMPTY_FIELD_MODEL); } public LabelWithPlaceholder(String id, IModel<?> model, IModel<String> placeholderModel) { super(id, model); this.mainModel = model; this.placeholderModel = placeholderModel; } @Override protected void onConfigure() { super.onConfigure(); boolean mainModelIsEmpty = !StringUtils.hasText(getDefaultModelObjectAsString(getMainModelObject())); boolean rawDataModelIsEmpty = !StringUtils.hasText(getDefaultModelObjectAsString(getRawDataModelObject())); if (!mainModelIsEmpty) { setDefaultModel(mainModel); } else if (!rawDataModelIsEmpty) { setDefaultModel(rawDataModel); } else { setDefaultModel(placeholderModel); } setVisible(!(hideIfEmpty && mainModelIsEmpty && rawDataModelIsEmpty)); } public boolean isHideIfEmpty() { return hideIfEmpty; } public void setHideIfEmpty(boolean hideIfEmpty) { this.hideIfEmpty = hideIfEmpty; } protected Object getMainModelObject() { if (mainModel != null) { return mainModel.getObject(); } return null; } protected Object getRawDataModelObject() { if (rawDataModel != null) { return rawDataModel.getObject(); } return null; } public void setRawDataModel(IModel<String> rawDataModel) { this.rawDataModel = rawDataModel; } @Override protected void onDetach() { super.onDetach(); if (mainModel != null) { mainModel.detach(); } if (placeholderModel != null) { placeholderModel.detach(); } if (rawDataModel != null) { rawDataModel.detach(); } } }