
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 extends ColumnNameBuilder> getNameBuilderClass() {
return getClassParameter(NAME_BUILDER_CLASS_PROPERTY_NAME, ColumnNameBuilder.class);
}
@Override
public Class extends FieldResolver> getFieldResolverClass() {
return getClassParameter(FIELD_RESOLVER_CLASS_PROPERTY_NAME, FieldResolver.class);
}
@Override
public Class extends DateTimeService> 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