CommaSeparatedConfigurator.java

/*
 * SPDX-License-Identifier: Apache-2.0
 * Copyright 2026 Nikolas Charalambidis
 */

package dev.nichar.facepalm.configurator;

import org.codehaus.plexus.classworlds.realm.ClassRealm;
import org.codehaus.plexus.component.annotations.Component;
import org.codehaus.plexus.component.configurator.BasicComponentConfigurator;
import org.codehaus.plexus.component.configurator.ComponentConfigurationException;
import org.codehaus.plexus.component.configurator.ComponentConfigurator;
import org.codehaus.plexus.component.configurator.ConfigurationListener;
import org.codehaus.plexus.component.configurator.expression.ExpressionEvaluator;
import org.codehaus.plexus.configuration.PlexusConfiguration;

/**
 * Custom Maven configurator for mapping comma-separated strings to {@link java.util.Set} parameters.
 * Enables flat XML values and CLI properties to be injected as unique, trimmed sets.
 */
@Component(role = ComponentConfigurator.class, hint = CommaSeparatedConfigurator.COMMA_SEPARATED_CONFIGURATOR)
public class CommaSeparatedConfigurator extends BasicComponentConfigurator {

    /**
     * Unique hint for linking this configurator to Maven Mojos.
     */
    public static final String COMMA_SEPARATED_CONFIGURATOR = "comma-separated-configurator";

    @Override
    public void configureComponent(final Object component,
                                   final PlexusConfiguration configuration,
                                   final ExpressionEvaluator evaluator,
                                   final ClassRealm realm,
                                   final ConfigurationListener listener) throws ComponentConfigurationException {

        // Register the specialized converter for Set-based parameters.
        converterLookup.registerConverter(new CommaSeparatedSetConverter());

        // Delegate component configuration to the base Plexus logic.
        super.configureComponent(component, configuration, evaluator, realm, listener);
    }
}