# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#
#   Name: storage.sh - part of the BeakerLib project
#   Description: An interface to journal persistent storage capabilities
#
#   Author: Petr Muller <muller@redhat.com>
#
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#
#   Copyright (c) 2013 Red Hat, Inc. All rights reserved.
#
#   This copyrighted material is made available to anyone wishing
#   to use, modify, copy, or redistribute it subject to the terms
#   and conditions of the GNU General Public License version 2.
#
#   This program is distributed in the hope that it will be
#   useful, but WITHOUT ANY WARRANTY; without even the implied
#   warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
#   PURPOSE. See the GNU General Public License for more details.
#
#   You should have received a copy of the GNU General Public
#   License along with this program; if not, write to the Free
#   Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
#   Boston, MA 02110-1301, USA.
#
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

: <<'=cut'
=pod

=head1 NAME

BeakerLib - storage - Internal storage helpers

=head1 DESCRIPTION

There are currently no public functions in this module

=cut


__INTERNAL_STORAGE_DEFAULT_SECTION="GENERIC"
__INTERNAL_STORAGE_DEFAULT_NAMESPACE="GENERIC"

__INTERNAL_ST_OPTION_PARSER='
  local namespace="$__INTERNAL_STORAGE_DEFAULT_NAMESPACE"
  local section="$__INTERNAL_STORAGE_DEFAULT_SECTION"
  local GETOPT=$(getopt -o : -l namespace:,section: -- "$@") || return 126
  eval set -- "$GETOPT"
  while true; do
    case $1 in
      --)          shift; break ;;
      --namespace) shift; namespace="$1" ;;
      --section)   shift; section="$1" ;;
    esac; shift
  done
  [[ -z "$1" ]] && {
    rlLogError "$FUNCNAME(): missing the Key!"
    return 1
  }
  local key="$1"
  local file="${BEAKERLIB_DIR}/storage/${namespace}/${section}/${key}"
  rlLogDebug "$FUNCNAME(): using file \"$file\""
'

__INTERNAL_ST_GET() {
  eval "$__INTERNAL_ST_OPTION_PARSER"
  if [[ -f "$file" && -r "$file" ]]; then
    local value="$(cat "$file")"
    rlLogDebug "$FUNCNAME(): got value '$value'"
    echo "$value"
  else
    rlLogDebug "$FUNCNAME(): reading unset key '$key' from section '$section' in namespace '$namespace', will return an empty string"
  fi
}

__INTERNAL_ST_PUT() {
  eval "$__INTERNAL_ST_OPTION_PARSER"
  local value="$2"
  mkdir -p "$(dirname "$file")"
  rlLogDebug "$FUNCNAME(): setting value '$value'"
  echo "$value" > "$file"
}

__INTERNAL_ST_PRUNE() {
  eval "$__INTERNAL_ST_OPTION_PARSER"
  rm -f "$file"
}
