Add manifest DTD and JAXB support
Use JAXB2 to generate Java class from manifest DTD obtained
from manifest-format.txt.
(https://gerrit.googlesource.com/git-repo/+/master/docs/manifest-format.txt)
Also added shade plugin so that JAXB will be built into a uberjar
for deployment
Change-Id: I907b7ad6fd45adcb2afcf5137a1ae3ae3eb53efc
diff --git a/pom.xml b/pom.xml
index 3b9cd58..acd413e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -28,6 +28,7 @@
<Gerrit-ApiType>plugin</Gerrit-ApiType>
<Gerrit-ApiVersion>2.9.1</Gerrit-ApiVersion>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+ <jaxb2-basics-runtime.version>0.6.4</jaxb2-basics-runtime.version>
</properties>
<build>
@@ -67,6 +68,40 @@
<encoding>UTF-8</encoding>
</configuration>
</plugin>
+ <!-- For code gen: DTD to Java class with JAXB -->
+ <!-- http://confluence.highsource.org/display/J2B/User+Guide -->
+ <plugin>
+ <groupId>org.jvnet.jaxb2.maven2</groupId>
+ <artifactId>maven-jaxb2-plugin</artifactId>
+ <version>0.7.0</version>
+ <executions>
+ <execution>
+ <goals>
+ <goal>generate</goal>
+ </goals>
+ </execution>
+ </executions>
+ <configuration>
+ <schemaDirectory>src/main/resources/schemas</schemaDirectory>
+ <schemaLanguage>DTD</schemaLanguage>
+ <schemaIncludes>
+ <schemaInclude>*.dtd</schemaInclude>
+ </schemaIncludes>
+ <generatePackage>com.amd.gerrit.plugins.manifestsubscription.manifest</generatePackage>
+ <args>
+ <arg>-XtoString</arg>
+ <arg>-Xequals</arg>
+ <arg>-Xcopyable</arg>
+ </args>
+ <plugins>
+ <plugin>
+ <groupId>org.jvnet.jaxb2_commons</groupId>
+ <artifactId>jaxb2-basics</artifactId>
+ <version>${jaxb2-basics-runtime.version}</version>
+ </plugin>
+ </plugins>
+ </configuration>
+ </plugin>
</plugins>
</build>
@@ -77,5 +112,11 @@
<version>${Gerrit-ApiVersion}</version>
<scope>provided</scope>
</dependency>
+
+ <dependency>
+ <groupId>org.jvnet.jaxb2_commons</groupId>
+ <artifactId>jaxb2-basics-runtime</artifactId>
+ <version>${jaxb2-basics-runtime.version}</version>
+ </dependency>
</dependencies>
</project>
diff --git a/src/main/resources/schemas/manifest.dtd b/src/main/resources/schemas/manifest.dtd
new file mode 100644
index 0000000..b6db9e5
--- /dev/null
+++ b/src/main/resources/schemas/manifest.dtd
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+ <!ELEMENT manifest (notice?,
+ remote*,
+ default?,
+ manifest-server?,
+ remove-project*,
+ project*,
+ extend-project*,
+ repo-hooks?,
+ include*)>
+
+ <!ELEMENT notice (#PCDATA)>
+
+ <!ELEMENT remote (EMPTY)>
+ <!ATTLIST remote name ID #REQUIRED>
+ <!ATTLIST remote alias CDATA #IMPLIED>
+ <!ATTLIST remote fetch CDATA #REQUIRED>
+ <!ATTLIST remote review CDATA #IMPLIED>
+ <!ATTLIST remote revision CDATA #IMPLIED>
+
+ <!ELEMENT default (EMPTY)>
+ <!ATTLIST default remote IDREF #IMPLIED>
+ <!ATTLIST default revision CDATA #IMPLIED>
+ <!ATTLIST default dest-branch CDATA #IMPLIED>
+ <!ATTLIST default sync-j CDATA #IMPLIED>
+ <!ATTLIST default sync-c CDATA #IMPLIED>
+ <!ATTLIST default sync-s CDATA #IMPLIED>
+
+ <!ELEMENT manifest-server (EMPTY)>
+ <!ATTLIST manifest-server url CDATA #REQUIRED>
+
+ <!ELEMENT project (annotation*,
+ project*,
+ copyfile*,
+ linkfile*)>
+ <!ATTLIST project name CDATA #REQUIRED>
+ <!ATTLIST project path CDATA #IMPLIED>
+ <!ATTLIST project remote IDREF #IMPLIED>
+ <!ATTLIST project revision CDATA #IMPLIED>
+ <!ATTLIST project dest-branch CDATA #IMPLIED>
+ <!ATTLIST project groups CDATA #IMPLIED>
+ <!ATTLIST project sync-c CDATA #IMPLIED>
+ <!ATTLIST project sync-s CDATA #IMPLIED>
+ <!ATTLIST project upstream CDATA #IMPLIED>
+ <!ATTLIST project clone-depth CDATA #IMPLIED>
+ <!ATTLIST project force-path CDATA #IMPLIED>
+
+ <!ELEMENT annotation (EMPTY)>
+ <!ATTLIST annotation name CDATA #REQUIRED>
+ <!ATTLIST annotation value CDATA #REQUIRED>
+ <!ATTLIST annotation keep CDATA "true">
+
+ <!ELEMENT copyfile (EMPTY)>
+ <!ATTLIST copyfile src CDATA #REQUIRED>
+ <!ATTLIST copyfile dest CDATA #REQUIRED>
+
+ <!ELEMENT linkfile (EMPTY)>
+ <!ATTLIST linkfile src CDATA #REQUIRED>
+ <!ATTLIST linkfile dest CDATA #REQUIRED>
+
+ <!ELEMENT extend-project (EMPTY) >
+ <!ATTLIST extend-project name CDATA #REQUIRED>
+ <!ATTLIST extend-project path CDATA #IMPLIED>
+ <!ATTLIST extend-project groups CDATA #IMPLIED>
+
+ <!ELEMENT remove-project (EMPTY)>
+ <!ATTLIST remove-project name CDATA #REQUIRED>
+
+ <!ELEMENT repo-hooks (EMPTY)>
+ <!ATTLIST repo-hooks in-project CDATA #REQUIRED>
+ <!ATTLIST repo-hooks enabled-list CDATA #REQUIRED>
+
+ <!ELEMENT include (EMPTY)>
+ <!ATTLIST include name CDATA #REQUIRED>