# Copyright 2014 stepping stone GmbH, Switzerland
# Distributed under the terms of the GNU Affero General Public License v3
# $Header: $

EAPI="6"

inherit eutils java-pkg-2 user

MY_PN="wildfly"
MY_PV="${PV}.Final"
MY_P="${MY_PN}-${MY_PV}"

DESCRIPTION="WildFly is a flexible, lightweight, managed application runtime"
HOMEPAGE="http://www.wildfly.org"
SRC_URI="http://download.jboss.org/${MY_PN}/${MY_PV}/${MY_P}.tar.gz"

LICENSE="LGPL"
SLOT="8"
KEYWORDS="~amd64"
IUSE=""

RDEPEND=">=virtual/jdk-1.7"
DEPEND=""

S="${WORKDIR}/${MY_P}"

WILDFLY_USER="wildfly"
WILDFLY_GROUP="wildfly"

WILDFLY_NAME="${PN}-${SLOT}"
WILDFLY_HOME_DIR="/opt/${WILDFLY_NAME}"

DEFAULT_INSTANCE_NAME="default"

WILDFLY_BASE_ROOT="/var/lib/${WILDFLY_NAME}"
WILDFLY_CONF_ROOT="/etc/${WILDFLY_NAME}"
WILDFLY_LOG_ROOT="/var/log/${WILDFLY_NAME}"
WILDFLY_TMP_ROOT="/var/tmp/${WILDFLY_NAME}"

WILDFLY_DEFAULT_BASE_DIR="${WILDFLY_BASE_ROOT}/${DEFAULT_INSTANCE_NAME}"
WILDFLY_DEFAULT_CONF_DIR="${WILDFLY_CONF_ROOT}/${DEFAULT_INSTANCE_NAME}"
WILDFLY_DEFAULT_LOG_DIR="${WILDFLY_LOG_ROOT}/${DEFAULT_INSTANCE_NAME}"
WILDFLY_DEFAULT_TMP_DIR="${WILDFLY_TMP_ROOT}/${DEFAULT_INSTANCE_NAME}"

pkg_setup() {
	enewgroup "${WILDFLY_GROUP}"
	enewuser "${WILDFLY_USER}" "-1" "-1" "-1" "${WILDFLY_GROUP}"
}

java-pkg-2_src_compile() {
	# Nothing to build for this bin package
	return 0
}

src_install() {
	# Wildfly core installation
	java-pkg_dojar jboss-modules.jar

	insinto "${WILDFLY_DEFAULT_CONF_DIR}/appclient"
	doins appclient/configuration/*.xml appclient/configuration/*.properties

	exeinto "${WILDFLY_HOME_DIR}/bin"
	doexe bin/jconsole.sh

	# Install configuration files in the conf directory instead of bin
	insinto "${WILDFLY_DEFAULT_CONF_DIR}"
	doins bin/appclient.conf bin/*.xml bin/*.properties

	insinto "${WILDFLY_HOME_DIR}/bin/client"
	doins bin/client/*.jar

	# Install Gentooified launchers instead of the origianl shell scripts
	local java_args="
		-Djboss.home.dir=${WILDFLY_HOME_DIR}
		-Djboss.server.base.dir=${WILDFLY_BASE_ROOT}/\${WILDFLY_INSTANCE:=${DEFAULT_INSTANCE_NAME}}/standalone
		-Djboss.server.config.dir=${WILDFLY_CONF_ROOT}/\${WILDFLY_INSTANCE:=${DEFAULT_INSTANCE_NAME}}/standalone
		-Djboss.server.config.user.dir=${WILDFLY_CONF_ROOT}/\${WILDFLY_INSTANCE:=${DEFAULT_INSTANCE_NAME}}/standalone
		-Djboss.server.log.dir=${WILDFLY_LOG_ROOT}/\${WILDFLY_INSTANCE:=${DEFAULT_INSTANCE_NAME}}/standalone
		-Djboss.server.temp.dir=${WILDFLY_TMP_ROOT}/\${WILDFLY_INSTANCE:=${DEFAULT_INSTANCE_NAME}}/standalone
		-Djboss.domain.base.dir=${WILDFLY_BASE_ROOT}/\${WILDFLY_INSTANCE:=${DEFAULT_INSTANCE_NAME}}/domain
		-Djboss.domain.config.dir=${WILDFLY_CONF_ROOT}/\${WILDFLY_INSTANCE:=${DEFAULT_INSTANCE_NAME}}/domain
		-Djboss.domain.config.user.dir=${WILDFLY_CONF_ROOT}/\${WILDFLY_INSTANCE:=${DEFAULT_INSTANCE_NAME}}/domain
		-Djboss.domain.log.dir=${WILDFLY_LOG_ROOT}/\${WILDFLY_INSTANCE:=${DEFAULT_INSTANCE_NAME}}/domain
		-Djboss.domain.temp.dir=${WILDFLY_TMP_ROOT}/\${WILDFLY_INSTANCE:=${DEFAULT_INSTANCE_NAME}}/domain"

	# add-user.sh launcher
	java-pkg_dolauncher \
		add-user.sh \
		--main org.jboss.modules.Main \
		--java_args "\${JAVA_OPTS} ${java_args}" \
		--pkg_args \
			"-mp ${WILDFLY_HOME_DIR}/modules org.jboss.as.domain-add-user" \
		-into "${WILDFLY_HOME_DIR}"

	# appclient.sh launcher
	java-pkg_dolauncher \
		appclient.sh \
		--main org.jboss.modules.Main \
		--java_args \
			"\${JAVA_OPTS}
			${java_args}
		    -Dorg.jboss.boot.log.file=${WILDFLY_LOG_ROOT}/\${WILDFLY_INSTANCE:=${DEFAULT_INSTANCE_NAME}}/appclient.log
			-Dlogging.configuration=file:${WILDFLY_CONF_ROOT}/\${WILDFLY_INSTANCE:=${DEFAULT_INSTANCE_NAME}}/appclient/logging.properties" \
		--pkg_args "-mp ${WILDFLY_HOME_DIR}/modules org.jboss.as.appclient" \
		-into "${WILDFLY_HOME_DIR}"

	# jboss-cli.sh launcher
	java-pkg_dolauncher \
		jboss-cli.sh \
		--main org.jboss.modules.Main \
		--java_args \
			"\${JAVA_OPTS}
			${java_args}
			-Djboss.cli.config=${WILDFLY_CONF_ROOT}/\${WILDFLY_INSTANCE:=${DEFAULT_INSTANCE_NAME}}/jboss-cli.xml
			-Dlogging.configuration=file:${WILDFLY_CONF_ROOT}/\${WILDFLY_INSTANCE:=${DEFAULT_INSTANCE_NAME}}/jboss-cli-logging.properties" \
		--pkg_args "-mp ${WILDFLY_HOME_DIR}/modules org.jboss.as.cli" \
		-into "${WILDFLY_HOME_DIR}"

	# jdr.sh launcher
	java-pkg_dolauncher \
		jdr.sh \
		--main org.jboss.modules.Main \
		--java_args "\${JAVA_OPTS} ${java_args}" \
		--pkg_args "-mp ${WILDFLY_HOME_DIR}/modules org.jboss.as.jdr" \
		-into "${WILDFLY_HOME_DIR}"

	# vault.sh launcher
	java-pkg_dolauncher \
		vault.sh \
		--main org.jboss.modules.Main \
		--java_args "\${JAVA_OPTS} ${java_args}" \
		--pkg_args "-mp ${WILDFLY_HOME_DIR}/modules org.jboss.as.vault-tool" \
		-into "${WILDFLY_HOME_DIR}"

	# wsconsume.sh launcher
	java-pkg_dolauncher \
		wsconsume.sh \
		--main org.jboss.modules.Main \
		--java_args \
			"\${JAVA_OPTS}
			${java_args}
			-Dprogram.name=wsconsume.sh" \
		--pkg_args \
			"-mp ${WILDFLY_HOME_DIR}/modules org.jboss.ws.tools.wsconsume" \
		-into "${WILDFLY_HOME_DIR}"

	# wsprovide.sh launcher
	java-pkg_dolauncher \
		wsprovide.sh \
		--main org.jboss.modules.Main \
		--java_args \
			"\${JAVA_OPTS}
			${java_args}
			-Dprogram.name=wsprovide.sh" \
		--pkg_args \
			"-mp ${WILDFLY_HOME_DIR}/modules org.jboss.ws.tools.wsprovide" \
		-into "${WILDFLY_HOME_DIR}"


	insinto "${WILDFLY_HOME_DIR}"
	doins -r modules

	insinto "${WILDFLY_HOME_DIR}"
	doins -r welcome-content

	dodoc -r docs/* README.txt

	# Wildfly domain and standalone mode common installation
	local dir
	for dir in domain standalone; do
		# Wildfly needs to create directories and write it's own 
		# configuration files.
		insopts --owner=${WILDFLY_USER} --group=${WILDFLY_GROUP}
		diropts --owner=${WILDFLY_USER} --group=${WILDFLY_GROUP}

		dodir "${WILDFLY_DEFAULT_CONF_DIR}/${dir}"

		insinto "${WILDFLY_DEFAULT_CONF_DIR}/${dir}"
		doins ${dir}/configuration/*
		fperms 660 ${WILDFLY_DEFAULT_CONF_DIR}/${dir}/application-roles.properties \
				   ${WILDFLY_DEFAULT_CONF_DIR}/${dir}/application-users.properties \
				   ${WILDFLY_DEFAULT_CONF_DIR}/${dir}/mgmt-groups.properties \
				   ${WILDFLY_DEFAULT_CONF_DIR}/${dir}/mgmt-users.properties

		dodir ${WILDFLY_DEFAULT_BASE_DIR}/${dir}/lib/ext

		dodir ${WILDFLY_DEFAULT_BASE_DIR}/${dir}/data

		dodir "${WILDFLY_DEFAULT_TMP_DIR}/${dir}"
		dodir "${WILDFLY_DEFAULT_TMP_DIR}/${dir}/auth"
		fperms 750 "${WILDFLY_DEFAULT_TMP_DIR}/${dir}/auth"

		dodir "${WILDFLY_DEFAULT_LOG_DIR}/${dir}"
	done


	# Wildfly standalone mode unique directory installation
	dir="standalone"
	
	insinto "${WILDFLY_DEFAULT_BASE_DIR}/${dir}"
	doins -r ${dir}/deployments

	# init script installation
	newconfd "${FILESDIR}/${PN}.confd" ${PN}-${SLOT}
	newinitd "${FILESDIR}/${PN}.initd" ${PN}-${SLOT}

	sed -i -e "s|@SLOT@|${SLOT}|g" "${D}/etc/conf.d/${PN}-${SLOT}" || \
		die "SLOT pattern replacement failed"
}

pkg_postinst() {
	einfo "To access the management console, add a user to the ManagementRealm:"
	einfo "${WILDFLY_HOME_DIR}/bin/add-user.sh"
	einfo ""
	einfo "Afterwards you can access the console at http://localhost:9990"
	einfo ""
	einfo "The configuration is located at:"
	einfo "${WILDFLY_DEFAULT_CONF_DIR}/[domain|standalone]"
}