public ScriptContext buildContextFor()

in src/main/java/com/epam/gmp/service/ScriptContextBuilder.java [73:125]


    public ScriptContext buildContextFor(String scriptPath, Map<String, Object> params) throws ScriptInitializationException {
        Matcher pathMatcher = SCRIPT_PATTERN.matcher(scriptPath);

        if (!pathMatcher.matches()) {
            throw new ScriptContextException("Unable to build context for: " + scriptPath);
        }
        org.springframework.core.io.Resource scriptGroupPath = GmpResourceUtils.getRelativeResource(gmpHome, "/" + SCRIPTS_FOLDER + "/" + pathMatcher.group(3) + "/");

        String scriptName = pathMatcher.group(4);
        String environment = pathMatcher.group(1);


        if (!scriptGroupPath.exists()) {
            throw new ScriptContextException("Script group folder doesn't exist: " + scriptGroupPath);
        }

        try {

            ConfigStackBuilder confBuilder = new ConfigStackBuilder();

            //Global config
            confBuilder.addLayer(new ConfigLayer(scriptGroupPath, GLOBAL_CONFIG));
            //Common config
            confBuilder.addLayer(new ConfigLayer(scriptGroupPath, COMMON_CONFIG));
            //Script config
            confBuilder.addLayer(new ConfigLayer(scriptGroupPath, scriptName));
            Map<String, Object> scriptConfigParameters = new HashMap<>();
            scriptConfigParameters.put(G_ENV, environment);
            ConfigObject scriptConfig = buildConfig(confBuilder.build(), environment, scriptConfigParameters);

            scriptName = ((Map) scriptConfig.get(EXECUTOR_FIELD)).get(SCRIPT_TO_RUN).toString();
            scriptConfig.remove(EXECUTOR_FIELD);

            //ADD logger
            HashMap<String, Object> paramMap = new HashMap<>();
            Logger scriptLogger = LoggerFactory.getLogger(scriptName.replaceAll("[.]", "_"));
            if (params != null) {
                paramMap.putAll(params);
            }
            paramMap.computeIfAbsent("cmdLine", (key -> Collections.emptyList()));
            paramMap.put("logger", scriptLogger);
            paramMap.put("gConfig", scriptConfig);
            paramMap.put(G_ENV, environment);

            if (logger.isInfoEnabled()) {
                logger.info("Groovy based script configuration:\n" + scriptName + ":" + configToString(scriptConfig));
            }
            return new ScriptContext(scriptPath, paramMap, scriptGroupPath, scriptName);

        } catch (ScriptInitializationException e) {
            throw new ScriptContextException("Unable to build context for: " + scriptPath, e);
        }
    }