Ver código fonte

Make rnc transform part of Gradle build

Rob Winch 12 anos atrás
pai
commit
036e0505b3

+ 6 - 0
buildSrc/build.gradle

@@ -49,6 +49,12 @@ dependencies {
             'com.springsource.bundlor:com.springsource.bundlor.blint:1.0.0.RELEASE'
 }
 
+// Trang
+dependencies {
+    compile 'com.thaiopensource:trang:20091111',
+            'net.sourceforge.saxon:saxon:9.1.0.8'
+}
+
 task ide(type: Copy)  {
     from configurations.runtime
     into 'ide'

+ 59 - 0
buildSrc/src/main/groovy/trang/TrangPlugin.groovy

@@ -0,0 +1,59 @@
+package trang;
+
+import com.thaiopensource.relaxng.translate.Driver
+
+import javax.xml.transform.Transformer
+import javax.xml.transform.TransformerFactory
+import javax.xml.transform.stream.StreamSource
+import javax.xml.transform.stream.StreamResult
+
+import org.gradle.api.*;
+import org.gradle.api.tasks.*
+import org.gradle.api.file.FileCollection
+
+/**
+ * Used for converting .rnc files to .xsd files.
+ * @author Rob Winch
+ */
+class TrangPlugin implements Plugin<Project> {
+    public void apply(Project project) {
+        Task rncToXsd = project.tasks.add('rncToXsd', RncToXsd.class)
+        rncToXsd.description = 'Converts .rnc to .xsd'
+        rncToXsd.group = 'Build'
+    }
+}
+
+/**
+ * Converts .rnc files to .xsd files using trang and then applies an xsl file to cleanup the results.
+ */
+public class RncToXsd extends DefaultTask {
+    @InputDirectory
+    File rncDir
+
+    @InputFile
+    File xslFile
+
+    @OutputDirectory
+    File xsdDir
+
+    @TaskAction
+    public final void transform() {
+        String xslPath = xslFile.absolutePath
+        rncDir.listFiles( { dir, file -> file.endsWith('.rnc')} as FilenameFilter).each { rncFile ->
+            File xsdFile = new File(xsdDir, rncFile.name.replace('.rnc', '.xsd'))
+            String xsdOutputPath = xsdFile.absolutePath
+            new Driver().run([rncFile.absolutePath, xsdOutputPath] as String[]);
+
+            TransformerFactory tFactory = new net.sf.saxon.TransformerFactoryImpl()
+            Transformer transformer =
+                    tFactory.newTransformer(new StreamSource(xslPath))
+            File temp = File.createTempFile("gradle-trang-" + xsdFile.name, ".xsd")
+            xsdFile.withInputStream { is ->
+                temp << is
+            }
+            StreamSource xmlSource = new StreamSource(temp)
+            transformer.transform(xmlSource, new StreamResult(xsdFile))
+            temp.delete()
+        }
+    }
+}

+ 1 - 0
buildSrc/src/main/resources/META-INF/gradle-plugins/trang.properties

@@ -0,0 +1 @@
+implementation-class=trang.TrangPlugin

+ 9 - 0
config/config.gradle

@@ -1,6 +1,7 @@
 // Config Module build file
 
 apply plugin: 'groovy'
+apply plugin: 'trang'
 
 compileTestJava.dependsOn(':spring-security-core:compileTestJava')
 
@@ -52,3 +53,11 @@ test {
 integrationTest {
     systemProperties['apacheDSWorkDir'] = "${buildDir}/apacheDSWork"
 }
+
+rncToXsd {
+    rncDir = file('src/main/resources/org/springframework/security/config/')
+    xsdDir = rncDir
+    xslFile = new File(rncDir, 'spring-security.xsl')
+}
+
+build.dependsOn rncToXsd

+ 0 - 11
config/convert_schema.sh

@@ -1,11 +0,0 @@
-#! /bin/sh
-
-pushd src/main/resources/org/springframework/security/config/
-
-echo "Converting rnc file to xsd ..."
-java -jar ~/bin/trang.jar spring-security-3.1.rnc spring-security-3.1.xsd
-
-echo "Applying XSL transformation to xsd ..."
-xsltproc --output spring-security-3.1.xsd spring-security.xsl spring-security-3.1.xsd
-
-popd

Diferenças do arquivo suprimidas por serem muito extensas
+ 759 - 536
config/src/main/resources/org/springframework/security/config/spring-security-3.1.xsd


+ 8 - 2
config/src/main/resources/org/springframework/security/config/spring-security.xsl

@@ -5,8 +5,8 @@
 
 -->
 
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" version="1.0">
-    <xsl:output method="xml" indent="yes"/>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" version="2.0">
+    <xsl:output method="xml"  indent="yes"/>
 
     <xsl:variable name="elts-to-inline">
         <xsl:text>,access-denied-handler,anonymous,session-management,concurrency-control,after-invocation-provider,authentication-provider,ldap-authentication-provider,user,port-mapping,openid-login,expression-handler,form-login,http-basic,intercept-url,logout,password-encoder,port-mappings,port-mapper,password-compare,protect,protect-pointcut,pre-post-annotation-handling,pre-invocation-advice,post-invocation-advice,invocation-attribute-factory,remember-me,salt-source,x509,</xsl:text>
@@ -42,4 +42,10 @@
         </xsl:copy>
     </xsl:template>
 
+    <xsl:template match="xs:documentation">
+       <xsl:element name="xs:documentation">
+         <xsl:copy-of select="@*" />
+        <xsl:value-of select="replace(concat(normalize-space(text()),' '), '(.{0,90}) ','$1&#xA;                ')"/>
+       </xsl:element>
+    </xsl:template>
 </xsl:stylesheet>

Alguns arquivos não foram mostrados porque muitos arquivos mudaram nesse diff