All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.deblock.cucumber.datatable.backend.options.PropertiesOptions Maven / Gradle / Ivy

package com.deblock.cucumber.datatable.backend.options;

import com.deblock.cucumber.datatable.mapper.datatable.FieldResolver;
import com.deblock.cucumber.datatable.mapper.name.ColumnNameBuilder;
import com.deblock.cucumber.datatable.mapper.typemetadata.date.DateTimeService;
import io.cucumber.core.exception.CucumberException;

import java.util.Map;

import static com.deblock.cucumber.datatable.backend.options.PropertiesConstants.DATE_TIME_SERVICE_CLASS_PROPERTY_NAME;
import static com.deblock.cucumber.datatable.backend.options.PropertiesConstants.FIELD_RESOLVER_CLASS_PROPERTY_NAME;
import static com.deblock.cucumber.datatable.backend.options.PropertiesConstants.NAME_BUILDER_CLASS_PROPERTY_NAME;

public class PropertiesOptions implements FullOptions {
    private final Map properties;

    public PropertiesOptions(Map properties) {
        this.properties = properties;
    }

    @Override
    public Class getNameBuilderClass() {
        return getClassParameter(NAME_BUILDER_CLASS_PROPERTY_NAME, ColumnNameBuilder.class);
    }

    @Override
    public Class getFieldResolverClass() {
        return getClassParameter(FIELD_RESOLVER_CLASS_PROPERTY_NAME, FieldResolver.class);
    }

    @Override
    public Class getDateTimeServiceClass() {
        return getClassParameter(DATE_TIME_SERVICE_CLASS_PROPERTY_NAME, DateTimeService.class);
    }

    private  Class getClassParameter(String property, Class loaderClazz) {
        final String className = properties.get(property);
        if (className == null) {
            return null;
        }
        try {
            Class clazz = Class.forName(className);
            if (!loaderClazz.isAssignableFrom(clazz)) {
                throw new CucumberException("The class '%s' was not a subclass of '%s'.".formatted(clazz, loaderClazz));
            }
            return (Class) clazz;
        } catch (ClassNotFoundException e) {
            throw new CucumberException(
                    "The class '%s' of configuration '%s' is not found.".formatted(className, property),
                    e
            );
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy