diff --git a/src/main/kotlin/no/item/xp/plugin/GenerateCodePlugin.kt b/src/main/kotlin/no/item/xp/plugin/GenerateCodePlugin.kt index c063abf..94457fc 100644 --- a/src/main/kotlin/no/item/xp/plugin/GenerateCodePlugin.kt +++ b/src/main/kotlin/no/item/xp/plugin/GenerateCodePlugin.kt @@ -1,6 +1,7 @@ package no.item.xp.plugin import no.item.xp.plugin.phrases.GenerateI18nPhrasesTask +import no.item.xp.plugin.util.IGNORED_XML_FILE_NAMES import no.item.xp.plugin.util.getTargetFile import org.gradle.api.Plugin import org.gradle.api.Project @@ -14,7 +15,7 @@ abstract class GenerateCodePlugin : Plugin { javaExt.sourceSets .getAt("main") .resources - .filter { it.extension == "xml" && it.name != "application.xml" && it.name != "styles.xml" } + .filter { it.extension == "xml" && it.name !in IGNORED_XML_FILE_NAMES } .files val targetDir = File(project.rootDir.absolutePath + File.separator + ".xp-codegen") diff --git a/src/main/kotlin/no/item/xp/plugin/util/JarUtils.kt b/src/main/kotlin/no/item/xp/plugin/util/JarUtils.kt index 7d58d85..256c1a6 100644 --- a/src/main/kotlin/no/item/xp/plugin/util/JarUtils.kt +++ b/src/main/kotlin/no/item/xp/plugin/util/JarUtils.kt @@ -9,7 +9,7 @@ fun getXmlFilesInJars(config: Configuration): List { val zipFile = JarFile(jarFile) zipFile.entries().asSequence() - .filter { jarEntry -> jarEntry.name.startsWith("site") && jarEntry.name.endsWith(".xml") } + .filter { jarEntry -> !jarEntry.isDirectory && isDescriptorInJar(jarEntry.name) } .map { XmlFileInJar(zipFile, it) } } } diff --git a/src/main/kotlin/no/item/xp/plugin/util/XmlFileFilters.kt b/src/main/kotlin/no/item/xp/plugin/util/XmlFileFilters.kt new file mode 100644 index 0000000..bf3169a --- /dev/null +++ b/src/main/kotlin/no/item/xp/plugin/util/XmlFileFilters.kt @@ -0,0 +1,19 @@ +package no.item.xp.plugin.util + +// Xml-files in an Enonic XP application that are not descriptors with forms +val IGNORED_XML_FILE_NAMES = setOf("application.xml", "styles.xml") + +// Directories in an Enonic XP application that contains descriptors +val XP_DESCRIPTOR_DIRECTORIES = listOf("site", "admin", "services", "tasks", "idprovider") + +/** + * Returns true if [entryName] (a path in a jar-file, using "/" as separator) is a descriptor that code should be + * generated for + */ +fun isDescriptorInJar(entryName: String): Boolean { + val fileName = entryName.substringAfterLast('/') + + return entryName.endsWith(".xml") && + fileName !in IGNORED_XML_FILE_NAMES && + XP_DESCRIPTOR_DIRECTORIES.any { entryName.startsWith("$it/") } +} diff --git a/src/test/kotlin/no/item/xp/plugin/util/IsDescriptorInJarTest.kt b/src/test/kotlin/no/item/xp/plugin/util/IsDescriptorInJarTest.kt new file mode 100644 index 0000000..aded3ed --- /dev/null +++ b/src/test/kotlin/no/item/xp/plugin/util/IsDescriptorInJarTest.kt @@ -0,0 +1,32 @@ +package no.item.xp.plugin.util + +import org.junit.jupiter.api.Test +import kotlin.test.assertFalse +import kotlin.test.assertTrue + +class IsDescriptorInJarTest { + @Test + fun `accept descriptors in XP directories`() { + listOf( + "site/content-types/article/article.xml", + "site/site.xml", + "admin/tools/my-tool/my-tool.xml", + "admin/widgets/my-widget/my-widget.xml", + "services/search/search.xml", + "tasks/cleanup/cleanup.xml", + "idprovider/idprovider.xml", + ).forEach { assertTrue(isDescriptorInJar(it), it) } + } + + @Test + fun `reject other files`() { + listOf( + "site/styles.xml", + "application.xml", + "META-INF/maven/no.item/app/pom.xml", + "lib/my-lib/config.xml", + "sites/content-types/article/article.xml", + "site/content-types/article/article.html", + ).forEach { assertFalse(isDescriptorInJar(it), it) } + } +}