#/bin/sh

##############################################################################
###
### generate-application-config-insert-cql.sh
###
### A script that generates the CQL commands to INSERT validation schemas to the application_config table.
### We keep the schemas FTL files under a folder - this folder will be parsed and INSERT commands will be created.
###
### If the path is 'schemaTemplates/composition/myFile.ftl' the result KEY will be: composition.myFile .
###
### Usage:
###
###    ./generate-application-config-insert-cql.sh <namespace> <schemas-folder>
###
###
### Author: Avi Ziv
### Version 1.0 for OPENECOMP
### Date: 10 Aug 2016
###
##############################################################################

#GLOBALS

APP_CONFIG_TABLE='application_config'

#### Functions - Start  ####
usage() { echo "Usage: $0 <namespace> <schemaTemplates-folder>, for example: $0 vsp.schemaTemplates schemaTemplates/" 1>&2; exit 1; }

getFileContent()
{
        file=$1
        str=$(<$file)
        echo $str
}


main()
{
        namespace=$1
        path=$2
        for fileName in $(find ${path} -type f)
        do
                value=$(getFileContent ${fileName})
                onlyFilename=$(basename $fileName)
                name="${onlyFilename%.*}"
                tempPath=$(dirname $fileName)
                keyColumn=$(basename $tempPath).$name
                echo "INSERT INTO $APP_CONFIG_TABLE (namespace,key,value) VALUES ('$namespace', '$keyColumn', '$value');"
        done


exit 0
}

#### Functions - End    ####

# Check arguements
if [ "$#" -lt 2 ] || [ "$#" -gt 2 ]; then
        usage
fi


main $1 $2
