package fr.openwide.core.basicapp.web.application.history.renderer; import java.util.Locale; import org.apache.wicket.model.IModel; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.google.common.base.Optional; import fr.openwide.core.basicapp.core.business.history.model.HistoryDifference; import fr.openwide.core.commons.util.fieldpath.FieldPath; import fr.openwide.core.wicket.more.util.model.Models; public final class HistoryDifferencePathRenderer extends AbstractHistoryRenderer<HistoryDifference> { private static final long serialVersionUID = 1L; private static final Logger LOGGER = LoggerFactory.getLogger(HistoryDifferencePathRenderer.class); private static final HistoryDifferencePathRenderer INSTANCE = new HistoryDifferencePathRenderer(); public static HistoryDifferencePathRenderer get() { return INSTANCE; } private HistoryDifferencePathRenderer() { } @Override public String render(HistoryDifference difference, Locale locale) { FieldPath path = difference.getAbsolutePath(); if (path.size() == 1 && path.isItem()) { return HistoryValueRenderer.get().render(difference.getPath().getKey(), locale); } String pathResourceKeyPart = getFieldPathKeyPart(path); IModel<?> keyDataModel = Models.transientModel(difference.getPath()); String entityResourceKeyPart = getEntityResourceKeyPart(difference); Optional<String> result = getStringOptional( JOINER.join(HISTORY_DIFFERENCE_ROOT, entityResourceKeyPart, pathResourceKeyPart), locale, keyDataModel ); if (!result.isPresent()) { result = getStringOptional(JOINER.join(BUSINESS_ROOT, entityResourceKeyPart, pathResourceKeyPart), locale, keyDataModel); if (!result.isPresent()) { result = getStringOptional(JOINER.join(HISTORY_DIFFERENCE_ROOT, ".common", pathResourceKeyPart), locale, keyDataModel); if (!result.isPresent()) { result = getStringOptional(JOINER.join(BUSINESS_ROOT, pathResourceKeyPart), locale, keyDataModel); } } } if (result.isPresent()) { return result.get(); } else { LOGGER.error("Unable to find a localization key for the HistoryDifference (entity : '{}', path : '{}')", entityResourceKeyPart, pathResourceKeyPart); return pathResourceKeyPart; } } }