#! /bin/bash


# default libexecdir used to bootstrap scripts
libexecdir=${GLOBUS_LOCATION}/libexec

# default local state directory
localstatedir=${GLOBUS_LOCATION}/var

# load MDS-specific script initializer
. ${libexecdir}/grid-hostinfo-script-initializer

# save IFS for any script functions that need to change it
IFS_save="$IFS"

# source functions for working with LDAP data etc.
#. ${libexecdir}/grid-hostinfo-ldap-shell

# set default logging location
GRID_INFO_SYSTEM_LOGFILE=${localstatedir}/grid-hostinfo-system.log
GRID_INFO_SYSTEM_ERRORFILE=${localstatedir}/grid-hostinfo-system.log

_probe_cache=${localstatedir}/grid-hostinfo-cpu-cache.sh

# optional EXPR function for use when built-in arithmetic is available
grid_info_expr_func ()
{
  echo "$(( $@ ))"
}

#####################################################################
#
# common GRIS provider args parsing
#

ldap_shell_log_error ()
{
    echo "$@" >&2

}

usage_error ()
{
    ldap_shell_log_error "$@"
    echo "$0" "$@"
    exit 1
}

_dump_host_object=
_dump_devclass_object=
_dump_dev_objects=
_dump_no_objects=
_number_line_classes=

_line_class_dn=
_line_class_oc=
_line_class_av=

_fs_count=0

while [ $# -gt 0 ]
do
    case "$1" in
	-dn)
	    if [ $# -gt 1 ] 
	    then
		_suffix="$2"
		shift 1
	    else
		usage_error "$1 requires argument"
	    fi
	;;

	-log)
	    if [ $# -gt 1 ] 
	    then
		GRID_INFO_SYSTEM_LOGFILE="$2"
	  	GRID_INFO_SYSTEM_ERRORFILE="$2"
		shift 1
	    else
		usage_error "$1 requires argument"
	    fi
	;;

	-scratch)
	    if [ $# -gt 1 ] 
	    then
		eval "_fs_${_fs_count}_mount=$2"
		_fs_count=`$EXPR ${_fs_count} + 1`
		shift 1
	    else
		usage_error "$1 requires argument"
	    fi
	;;

	-hostobj)
	    _dump_host_object=true
	;;

	-devclassobj)
	    _dump_devclass_object=true
	;;

	-devobjs)
	    _dump_dev_objects=true
	;;

	-allobjs)
	    _dump_host_object=true
	    _dump_devclass_object=true
	    _dump_dev_objects=true
	;;

	-noobjs)
	    _dump_no_objects=true
	;;

	-classify)
	    _line_class_dn="0 "
	    _line_class_oc="1 "
	    _line_class_av="2 "
	;;

	-validfrom-secs)
	    if [ $# -gt 1 ] 
	    then
		_mds_validfrom_offset="$2"
		shift 1
	    else
		usage_error "$1 requires argument"
	    fi
	;;

	-validto-secs)
	    if [ $# -gt 1 ] 
	    then
		_mds_validto_offset="$2"
		shift 1
	    else
		usage_error "$1 requires argument"
	    fi
	;;

	-keepto-secs)
	    if [ $# -gt 1 ] 
	    then
		_mds_keepto_offset="$2"
		shift 1
	    else
		usage_error "$1 requires argument"
	    fi
	;;

	-ttl)
	    if [ $# -gt 1 ] 
	    then
		_mds_validto_offset="$2"
		_mds_keepto_offset="$2"
		shift 1
	    else
		usage_error "$1 requires argument"
	    fi
	;;

	*)
	    usage_error "unknown option \"$1\""
	;;
    esac

    shift 1
done

if [ "X${_dump_host_object}" = "X" ] && \
   [ "X${_dump_devclass_object}" = "X" ] && \
   [ "X${_dump_dev_objects}" = "X" ] && \
   [ "X${_dump_no_objects}" = "X" ]
then
	    _dump_host_object=true
	    _dump_devclass_object=true
	    _dump_dev_objects=true
fi

if [ "X${_mds_validfrom_offset}" = "X" ]
then
    _mds_validfrom_offset=0
fi

if [ "X${_mds_validto_offset}" = "X" ]
then
    _mds_validto_offset=0
fi

if [ "X${_mds_keepto_offset}" = "X" ]
then
    _mds_keepto_offset=0
fi

extract_mds_object_timestamps ()
{
    # $1 is validfrom
    # $2 is validto
    # $3 is keepto

    _mds_validfrom="$1"
    _mds_validto="$2"
    _mds_keepto="$3"
}

probe_mds_object_timestamps ()
{
echo > /dev/null
    #string=`${bindir}/globus-generalized-time \
    #            -offset ${_mds_validfrom_offset} \
    #            -offset ${_mds_validto_offset} \
    #            -offset ${_mds_keepto_offset} 2> /dev/null`
    #
    #extract_mds_object_timestamps $string 0 1 1

    #case "${_mds_validfrom}" in
    #	*Z) : ;;
    #	*) ldap_shell_log_error "${bindir}/globus-generalized-time failed"
    #esac
}

emit_mds_object_timestamps ()
{
cat <<EOF
${_line_class_av}Mds-validfrom: ${_mds_validfrom}
${_line_class_av}Mds-validto: ${_mds_validto}
${_line_class_av}Mds-keepto: ${_mds_keepto}
EOF
}

