AuditModuleResolver.java

package com.licensis.notaire.audit;

import java.util.Map;

/**
 * Translates a controller class name (e.g. {@code EscrituraController}) into a
 * user-facing module name (e.g. {@code Escrituras}) used in the
 * {@code registro_auditoria.modulo} column.
 *
 * <p>Centralising the mapping in a single helper avoids scattering the
 * controller-to-module translation across the audit aspect and keeps the
 * Spanish, plural, business-friendly names consistent.
 */
public final class AuditModuleResolver {

    private static final Map<String, String> CONTROLLER_TO_MODULE = Map.ofEntries(
            Map.entry("EscrituraController", "Escrituras"),
            Map.entry("PersonaController", "Personas"),
            Map.entry("PresupuestoController", "Presupuestos"),
            Map.entry("ConceptoController", "Conceptos"),
            Map.entry("UsuarioController", "Usuarios"),
            Map.entry("PagoController", "Pagos"),
            Map.entry("TramiteController", "Tramites"),
            Map.entry("CopiaController", "Copias"),
            Map.entry("TestimonioController", "Testimonios"),
            Map.entry("FolioController", "Folios"),
            Map.entry("ItemController", "Items"),
            Map.entry("InmuebleController", "Inmuebles"),
            Map.entry("HistorialController", "Historial"),
            Map.entry("DocumentoPresentadoController", "Documentos"),
            Map.entry("GestionController", "Gestiones"),
            Map.entry("EstadoDeGestionController", "EstadosDeGestion"),
            Map.entry("MovimientoTestimonioController", "MovimientosTestimonio"),
            Map.entry("SuplenciaController", "Suplencias"),
            Map.entry("PlantillaPresupuestoController", "PlantillasPresupuesto"),
            Map.entry("PlantillaTramiteController", "PlantillasTramite"),
            Map.entry("TipoDeDocumentoController", "TiposDeDocumento"),
            Map.entry("TipoDeFolioController", "TiposDeFolio"),
            Map.entry("TipoDeTramiteController", "TiposDeTramite"),
            Map.entry("TipoIdentificacionController", "TiposIdentificacion"),
            Map.entry("ReporteController", "Reportes")
    );

    private static final String CONTROLLER_SUFFIX = "Controller";
    private static final String DEFAULT_MODULE = "General";

    private AuditModuleResolver() {
        // Utility class.
    }

    /**
     * Resolve a friendly module name for the given controller class.
     *
     * @param controllerSimpleName simple class name (e.g. {@code EscrituraController})
     * @return business-friendly module label, never {@code null}
     */
    public static String resolve(String controllerSimpleName) {
        if (controllerSimpleName == null || controllerSimpleName.isBlank()) {
            return DEFAULT_MODULE;
        }
        String mapped = CONTROLLER_TO_MODULE.get(controllerSimpleName);
        if (mapped != null) {
            return mapped;
        }
        if (controllerSimpleName.endsWith(CONTROLLER_SUFFIX)) {
            return controllerSimpleName.substring(0,
                    controllerSimpleName.length() - CONTROLLER_SUFFIX.length());
        }
        return controllerSimpleName;
    }
}