# Copyright 1999-2026 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

EAPI=8

JAVA_PKG_IUSE="doc source test"
JAVA_TESTING_FRAMEWORKS="junit-4"

inherit desktop java-pkg-2 java-pkg-simple verify-sig xdg

DESCRIPTION="XML Graphics Batik"
HOMEPAGE="https://xmlgraphics.apache.org/batik/"
SRC_URI="mirror://apache/xmlgraphics/batik/source/batik-src-${PV}.tar.gz
	verify-sig? ( mirror://apache/xmlgraphics/batik/source/batik-src-${PV}.tar.gz.asc )"
S="${WORKDIR}/${P}"

LICENSE="Apache-2.0"
SLOT="0"
KEYWORDS="~amd64 ~arm64 ~ppc64"

BDEPEND="verify-sig? ( sec-keys/openpgp-keys-apache-xmlgraphics )"

CP_DEPEND="
	>=dev-java/rhino-1.9.1:0
	dev-java/xml-commons-external:1.4
	~dev-java/xmlgraphics-commons-2.12:0
"

DEPEND="
	${CP_DEPEND}
	>=virtual/jdk-11:*
"

RDEPEND="
	${CP_DEPEND}
	>=virtual/jre-1.8:*
"

DOCS=( CHANGES NOTICE README )

JAVA_RESOURCE_DIRS="resources"
JAVA_SRC_DIR=( ! -path '*test*/src/*' ! -path '*/jacl/*' -path '*/src/main/java/**.java' )
JAVA_TEST_EXCLUDES=(
	# JAXP00010003: The length of entity "%SVG.Presentation.attrib" is "15,002"
	# that exceeds the "15,000" limit set by "jdk.xml.maxParameterEntitySizeLimit".
	org.apache.batik.svg.ValidateDTDTestCase
	# org.apache.batik.test.TestException: Cannot build Test instance of class : . Got exception of class :
	# java.lang.IllegalArgumentException with messages test-references/samples/anne.png and stack trace :
	# java.lang.IllegalArgumentException: test-references/samples/anne.png
	org.apache.batik.test.xml.JUnitRunnerTestCase
)
JAVA_TEST_GENTOO_CLASSPATH="junit-4"
JAVA_TEST_RESOURCE_DIRS=( batik-util/src/test/resources test-resources )
JAVA_TEST_SRC_DIR=( -path '*/src/test/java/**/*TestCase*.java' )
VERIFY_SIG_OPENPGP_KEY_PATH="/usr/share/openpgp-keys/apache-xmlgraphics.asc"

src_prepare() {
	java-pkg_clean
	java-pkg-2_src_prepare
	# We drop support for jython due to bug #825486.
	rm batik-script/src/main/java/org/apache/batik/script/jpython/JPythonInterpreter.java || die
	rm batik-script/src/main/java/org/apache/batik/script/jpython/JPythonInterpreterFactory.java || die

	cat > "batik-squiggle.desktop" <<-EOF || die
		[Desktop Entry]
		Name=Squiggle
		Comment=SVG browser
		Exec=batik-squiggle
		Icon=init
		Terminal=false
		Type=Application
		Categories=Graphics;VectorGraphics;
		MimeType=image/svg+xml
	EOF

	mkdir resources || die "mkdir"
	# collect resources from all those modules' directories
	local module
	for module in $(find ! -path '*test*/src/*' -path '*/src/main/resources'); do
		pushd "${module}" >/dev/null || die
		find -type f ! -name '*.java' ! -name 'LICENSE' -printf '%P\n' |
			xargs cp --parent -t "${S}"/resources || die "copy resources"
		popd >/dev/null || die
	done

	mkdir -p src/test/resources || die "test-resources"
	mv {batik-bridge/,}src/test/resources/circular.svg || die "circular.svg"
}

src_test() {
	einfo "building batik-test.jar"
	JAVA_GENTOO_CLASSPATH_EXTRA="batik.jar:batik-test.jar"
	JAVA_JAR_FILENAME="batik-test.jar"
	JAVA_SRC_DIR=( -path '**/*test*/**/*.java' )
	java-pkg-simple_src_compile

	einfo "compiling and running tests"
	java-pkg-simple_src_test

	# a mistake in java-pkg-simple.eclass suppresses this test-class
	# but we can run it separately
	JAVA_TEST_RUN_ONLY=( org.apache.batik.util.Base64TestCases )
	java-pkg-simple_src_test
}

src_install() {
	JAVA_JAR_FILENAME="batik.jar" # avoid installing 'batik-test.jar'
	JAVA_SRC_DIR=( batik-* )
	java-pkg-simple_src_install
	domenu "batik-squiggle.desktop"
	newicon -s scalable \
		batik-svgbrowser/src/main/resources/org/apache/batik/apps/svgbrowser/resources/init.svg \
		squiggle.svg

	grep mainClass */pom.xml |
		sed -n 's:.*<mainClass>\(.*\)</mainClass>:\1:p' |
		sort | uniq | while read line
		do
			local launcher=$(echo "${line}" | cut -d. -f 5) || die
			java-pkg_dolauncher "batik-${launcher}" --main "${line}"
		done

	# java_policy_file is copied from previous version
	local java_policy_file="${JAVA_PKG_SHAREPATH}/etc/${PN}.policy"
	insinto "$(dirname "${java_policy_file}")"
	newins - "$(basename "${java_policy_file}")" <<- _EOF_
		grant codeBase "file:${EPREFIX}${JAVA_PKG_JARDEST}/-" {
			permission java.security.AllPermission;
		};
	_EOF_
	java-pkg_register-environment-variable \
		gjl_java_args \
		"\$gjl_java_args -Djava.security.policy=file:${EPREFIX}${java_policy_file}"
}
