#!/usr/bin/bash
# or
#!/bin/ksh
##
## Apache Tomcat Base Directory Creator
## Copyright (c) 2015-2020 SATOH Fumiyasu @ OSS Technology Corp., Japan
##
## License: Apache License version 3.0
##

set -u
umask 0022

perr()
{
  echo "$0: ERROR: $1" 1>&2
}

pdie()
{
  perr "$1"
  exit "${2-1}"
}

getopts_want_arg()
{
  if [[ $# -lt 2 ]]; then
    pdie "Option requires an argument: $1"
  fi
  if [[ -n ${3:+set} ]]; then
    if [[ $2 =~ $3 ]]; then
      : OK
    else
      pdie "Invalid value for option: $1: $2"
    fi
  fi
  if [[ -n ${4:+set} ]]; then
    if [[ $2 =~ $4 ]]; then
      pdie "Invalid value for option: $1: $2"
    fi
  fi
}

## ======================================================================

root=""
catalina_home="${CATALINA_HOME-/opt/osstech/share/tomcat}"
tomcat_user="${TOMCAT_USER-tomcat}"
tomcat_group="${TOMCAT_GROUP-tomcat}"
java_home="${JAVA_HOME-/usr/lib/jvm/jre-11-openjdk}"
control_port="${CONTROL_PORT--1}"
http_port="${HTTP_PORT-8080}"
ajp_port="${AJP_PORT-8009}"

chgrp="${CHGRP-/bin/chgrp}"

while [[ $# -gt 0 ]]; do
  opt="$1"; shift

  if [[ -z "${opt##-[!-]?*}" ]]; then
    set -- "-${opt#??}" ${1+"$@"}
    opt="${opt%${1#-}}"
  fi
  if [[ -z "${opt##--*=*}" ]]; then
    set -- "${opt#--*=}" ${1+"$@"}
    opt="${opt%%=*}"
  fi

  case "$opt" in
  --root)
    getopts_want_arg "$opt" ${1+"$1"} ${1+"^/.*"}
    root="$1"; shift
    ;;
  --user)
    getopts_want_arg "$opt" ${1+"$1"}
    tomcat_user="$1"; shift
    ;;
  --group)
    getopts_want_arg "$opt" ${1+"$1"}
    tomcat_group="$1"; shift
    ;;
  --)
    break
    ;;
  -*)
    pdie "Invalid option: $opt"
    ;;
  *)
    set -- "$opt" ${1+"$@"}
    break
    ;;
  esac
done

## ----------------------------------------------------------------------

if [[ $# -lt 1 ]]; then
  echo "Usage: $0 [OPTIONS] CATALINA_BASE"
  exit 1
fi

catalina_base="$1"; shift

[[ -e $root$catalina_base ]] && pdie "Base directory already exists: $catalina_base"
#getent passwd "$tomcat_user" &>/dev/null || pdie "Unknown user: $tomcat_user"
[[ -z $tomcat_group ]] && tomcat_group=`id -g "$tomcat_user"`

## ======================================================================

mkdir -p -m 0755 "$root${catalina_base%/*}" || exit $?
mkdir -p -m 0750 "$root$catalina_base" || exit $?
cd "$root$catalina_base" || exit $?

mkdir -m 0755 bin || exit $?

mkdir -p -m 0755 conf lib || exit $?
mkdir -p -m 0755 conf/tomcat.conf.d || exit $?
mkdir -p -m 0775 conf/Catalina || exit $?
mkdir -p -m 0775 conf/Catalina/localhost || exit $?
mkdir -p -m 0775 webapps || exit $?
mkdir -p -m 0770 logs logs/old work temp data || exit $?
"$chgrp" -h "$tomcat_group" conf logs logs/old temp webapps work data || exit $?
chmod g+s conf conf/Catalina conf/Catalina/localhost logs logs/old temp webapps work || exit $?
ln -s ../temp data/
ln -s ../work data/
ln -s ../logs data/

cp -p "$root$catalina_home/conf/"* conf/ || exit $?

sed \
  -e 's/\(<Server port="\)-\{0,1\}[0-9]*/\1'"$control_port/" \
  -e 's!\(<Connector port="\)[0-9]*\(" protocol="HTTP/\)!\1'"$http_port"'\2!' \
  -e 's!\(<Connector port="\)[0-9]*\(" protocol="AJP/\)!\1'"$ajp_port"'\2!' \
 "$root$catalina_home/conf/server.xml" \
>conf/server.xml || exit $?

cat <<EOF_TOMCAT_CONF >conf/tomcat.conf || exit $?
#CATALINA_HOME="$catalina_home"
#CATALINA_BASE="$catalina_base"

#JAVA_HOME="$java_home"
#JAVA_GC="G1GC"
#JAVA_METASPACESIZE="256M"
#JAVA_HEAPSIZE="2048M"

## Java Security Manager
#SECURITY_MANAGER="true"

## Java Platform Debugger Architecture
#JPDA="true"
EOF_TOMCAT_CONF

## ======================================================================

exit 0
