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

com.cucumber.utils.context.props.ScenarioProps Maven / Gradle / Ivy

package com.cucumber.utils.context.props;

import io.cucumber.guice.ScenarioScoped;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;

@ScenarioScoped
public class ScenarioProps {
    private Logger log = LogManager.getLogger();
    private Map props = new HashMap<>();

    public String getAsString(String key) {
        Object val = get(key);
        return val != null ? val.toString() : null;
    }

    public boolean containsKey(String key) {
        return props.containsKey(key);
    }

    public Object get(String key) {
        if (key == null) {
            return props.get(null);
        }
        String trimmedKey = key.trim();
        switch (trimmedKey.toLowerCase()) {
            case "uid":
                return getUUID();
            case "now":
                return getTimeInMillis();
            case "short-random":
                return (int) (Math.random() * (Short.MAX_VALUE - Short.MIN_VALUE));
            default:
                return props.get(trimmedKey) instanceof String ?
                        new ScenarioPropsParser(this, props.get(trimmedKey).toString()).result() : props.get(trimmedKey);
        }
    }

    public void put(String key, Object val) {
        String trimmedKey = (key == null) ? null : key.trim();
        if (props.get(trimmedKey) != null) {
            log.warn("Scenario property \"{}\" will be overridden with {}", trimmedKey, val);
        }
        props.put(trimmedKey, val);
    }

    public void putAll(Map props) {
        this.props.putAll(props);
    }

    private String getUUID() {
        return UUID.randomUUID().toString();
    }

    private String getTimeInMillis() {
        return String.valueOf(System.currentTimeMillis());
    }

    public enum FileExtension {
        PROPERTIES(".properties"),
        YAML(".yaml"),
        YML(".yml"),
        PROPERTY(".property"),
        JSON(".json"),
        XML(".xml"),
        TXT(".txt"),
        CSV(".csv"),
        HTML(".html"),
        TEXT(".text"),
        YANG(".yang");

        private String name;

        FileExtension(String name) {
            this.name = name;
        }

        public static String[] allExtensions() {
            return Arrays.stream(values()).map(FileExtension::value).toArray(String[]::new);
        }

        public static String[] propertyFileExtensions() {
            return Arrays.stream(allExtensions())
                    .filter(val -> val.equals(PROPERTY.value()) || val.equals(XML.value())
                            || val.equals(JSON.value()) || val.equals(TXT.value())
                            || val.equals(HTML.value()) || val.equals(TEXT.value())
                            || val.equals(CSV.value()) || val.equals(YANG.value())
                    )
                    .toArray(String[]::new);
        }

        public String value() {
            return name;
        }
    }

    @Override
    public String toString() {
        return "ScenarioProps{" +
                "props=" + props +
                '}';
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy