class CommandBuilder {

    public String build(PipelineConfiguration configuration, Map<SystemParams, String> sysParams) {
        String cmdTemplate = getTemplateWithFiledPipeConfiguration(configuration);

        Map<String, String> matchedSysParams = new LinkedHashMap<>();
        sysParams
            .entrySet()
            .stream()
            .filter(systemParam -> !systemParam.getKey().isSecure() && !systemParam.getKey().isHidden())
            .forEach(systemParam ->
                matchedSysParams.put(systemParam.getKey().getOptionName(), systemParam.getValue())
            );

        cmdTemplate = replaceParametersByValue(
                ParamsGroup.SYS_PARAMS, matchedSysParams, cmdTemplate
        );

        Map<String, String> matchedUserParams = new LinkedHashMap<>();
        configuration.getParameters()
                .forEach((key, value) -> matchedUserParams.put(key, value.getValue()));

        cmdTemplate = replaceParametersByBashPlaceholder(
                ParamsGroup.USER_PARAMS, matchedUserParams, cmdTemplate
        );
        checkForUnfilledParams(cmdTemplate);
        return cmdTemplate;
    }

}