CommonErrorType.java

package fr.inrae.agroclim.indicators.exception.type;

import java.util.StringJoiner;

import fr.inrae.agroclim.indicators.exception.ErrorType;

/**
 * Common methods to implements ErrorType.
 *
 * @author Olivier Maury
 */
public interface CommonErrorType extends ErrorType {
    /**
     * @return partial I18n key for messages.properties
     */
    private String getShortKey() {
        return getName().toLowerCase().replace("_", ".");
    }

    /**
     * @return parent error
     */
    CommonErrorType getParent();

    /**
     * @return error name (as {@link Enum#name()}).
     */
    String name();

    /**
     * @return Key for Resource/I18nResource.
     */
    @Override
    default String getI18nKey() {
        final String cat = getCategory().getName().toLowerCase();
        final StringJoiner sj = new StringJoiner(".", "error.", "");
        if (!getShortKey().startsWith(cat)) {
            sj.add(cat);
        }
        if (getParent() != null && !getShortKey().startsWith(getParent().getShortKey())) {
            sj.add(getParent().getShortKey());
        }
        sj.add(getShortKey());
        return sj.toString();
    }

    @Override
    default String getName() {
        return name();
    }
}