#!/bin/sh

LOG_PROPS="/usr/share/nsdk/log.properties"

printUsage() {
	echo "Usage: $0 [-l name] [-h] [module level]"
	echo -e "\tno arguments - log properties files is opened in vi"
	echo -e "\t-l name - list all loggers contains 'name' in name, case insensitive\n\
\t\t(-l is optional, can be used just with a name)"
	echo -e "\t-h - this help"
	echo -e "\tmodule level - set module loglevel to 'level', module name and level\n\
\t\tare case in-sensitive, level can also be just first character of log level\n\
\t\t(for example 'i' for INFO)"
}

if [ $# -eq 0 ]; then
	vi ${LOG_PROPS}
	exit $?
fi

if [ "$1" = "-h" -o "$1" = "--help" ]; then
	printUsage "$0"
	exit 0
fi

if [ "$1" = "-l" -o "$1" = "--list" -o $# -eq 1 ]; then
	if [ $# -gt 2 ]; then
		echo "Invalid number of arguments for '$1'"
		printUsage "$0"
		exit 1
	fi

	MODULE="$1"
	if [ "$1" = "-l" -o "$1" = "--list" ]; then
		MODULE="$2"
	fi

	grep -E -i "log4cplus\.logger\..*$MODULE.*=.+, console" "${LOG_PROPS}" | sed -e 's:log4cplus.logger.::' -e 's:,.*::' | sort
	exit 0
fi

if [ $# -ne 2 ]; then
	echo "Invalid number of arguments"
	printUsage "$0"
	exit 1
fi

MODULE="$1"
LEVEL=`echo $2 | tr 'a-z' 'A-Z'`

LINE=`grep -i ^log4cplus\.logger\.${MODULE}\= ${LOG_PROPS}`

if [ ! -n "$LINE" ]; then
	echo "Module ${MODULE} does not exist"
	exit 1
fi

if [ "$LEVEL" = "D" ]; then
	LEVEL="DEBUG"
elif [ "$LEVEL" = "E" ]; then
	LEVEL="ERROR"
elif [ "$LEVEL" = "F" ]; then
	LEVEL="FATAL"
elif [ "$LEVEL" = "I" ]; then
	LEVEL="INFO"
elif [ "$LEVEL" = "O" ]; then
	LEVEL="OFF"
elif [ "$LEVEL" = "T" ]; then
	LEVEL="TRACE"
elif [ "$LEVEL" = "W" ]; then
	LEVEL="WARN"
fi

case ${LEVEL} in
ALL|DEBUG|INFO|WARN|ERROR|FATAL|OFF|TRACE)
	sed -E -i "s:(.*\.)(${MODULE})=(.*),:\1\2=${LEVEL},:I" ${LOG_PROPS}
	echo "Log level changed"
	;;
*)	echo "Log level ${LEVEL} does not exist"
	;;
esac
