<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-parent</artifactId>
    <packaging>pom</packaging>
    <version>4.1.1-SNAPSHOT</version>
    <name>Apache POI - the Java API for Microsoft Documents</name>
    <description>Maven build of Apache POI for Sonar checks</description>
    <url>http://poi.apache.org/</url>

    <mailingLists>
        <mailingList>
            <name>POI Users List</name>
            <subscribe>user-subscribe@poi.apache.org</subscribe>
            <unsubscribe>user-unsubscribe@poi.apache.org</unsubscribe>
            <archive>http://mail-archives.apache.org/mod_mbox/poi-user/</archive>
        </mailingList>
        <mailingList>
            <name>POI Developer List</name>
            <subscribe>dev-subscribe@poi.apache.org</subscribe>
            <unsubscribe>dev-unsubscribe@poi.apache.org</unsubscribe>
            <archive>http://mail-archives.apache.org/mod_mbox/poi-dev/</archive>
        </mailingList>
    </mailingLists>

    <licenses>
        <license>
            <name>Apache License, Version 2.0</name>
            <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
        </license>
    </licenses>

    <organization>
        <name>Apache Software Foundation</name>
        <url>http://www.apache.org/</url>
    </organization>

    <issueManagement>
        <system>Bugzilla</system>
        <url>https://bz.apache.org/bugzilla/</url>
    </issueManagement>

    <scm>
        <connection>scm:svn:http://svn.apache.org/repos/asf/poi/trunk</connection>
        <developerConnection>scm:svn:https://svn.apache.org/repos/asf/poi/trunk</developerConnection>
        <url>http://svn.apache.org/viewvc/poi</url>
    </scm>

    <repositories>
        <repository>
            <id>apache-releases-repo</id>
            <name>apache releases repo</name>
            <url>https://repository.apache.org/content/repositories/releases</url>
        </repository>
    </repositories>

    <modules>
        <module>main</module>
        <module>ooxml-schema</module>
        <module>ooxml-schema-encryption</module>
        <module>ooxml-schema-security</module>
        <module>ooxml</module>
        <module>scratchpad</module>
        <module>excelant</module>
        <module>examples</module>
    </modules>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <!-- Try to disable running SVN blame as it causes errors here because the source is copied from the actual SVN location here! -->
        <sonar.scm.disabled>true</sonar.scm.disabled>

        <!-- define some of the third-party or plugin-versions globally to use the same in all modules -->
        <xmlbeans.version>3.1.0</xmlbeans.version>
        <junit.version>4.12</junit.version>
        <xmlunit.version>2.5.1</xmlunit.version>
        <mockito.version>2.13.0</mockito.version>
        <maven.plugin.resources.version>3.0.1</maven.plugin.resources.version>
        <maven.plugin.jar.version>3.0.1</maven.plugin.jar.version>
        <maven.plugin.clean.version>3.0.0</maven.plugin.clean.version>
        <maven.plugin.download.version>1.1.0</maven.plugin.download.version>
        <maven.plugin.antrun.version>1.8</maven.plugin.antrun.version>
        <maven.plugin.surefire.version>2.19.1</maven.plugin.surefire.version>
    </properties>

    <build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.5.1</version>
                    <configuration>
                        <source>1.8</source>
                        <target>1.8</target>
                    </configuration>
                </plugin>
            </plugins>
        </pluginManagement>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>${maven.plugin.surefire.version}</version>
                <dependencies>
                    <dependency>
                        <groupId>org.apache.maven.surefire</groupId>
                        <artifactId>surefire-junit47</artifactId>
                        <version>${maven.plugin.surefire.version}</version>
                    </dependency>
                </dependencies>
                <configuration>
                    <systemPropertyVariables>
                        <POI.testdata.path>../../test-data</POI.testdata.path>
                        <java.awt.headless>true</java.awt.headless>
                        <org.apache.poi.util.POILogger>org.apache.poi.util.NullLogger</org.apache.poi.util.POILogger>
                    </systemPropertyVariables>
                    <!-- use to following to analyze OOM issues:	-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp -->
                    <argLine>@{argLine} -Duser.language=en -Duser.country=US -Xmx1024m -Djava.io.tmpdir=${basedir}/target/tmp
                    </argLine>
                    <excludes>
                        <exclude>**/All*Tests.java</exclude>
                        <exclude>**/TestUnfixedBugs.java</exclude>
                        <exclude>**/TestcaseRecordInputStream.java</exclude>
                        <exclude>**/POITestCase.java</exclude>
                        <!-- TODO: error about no public construct, seems to run with JUnit 3.8... -->
                        <exclude>**/TestWordToConverterSuite*.java</exclude>
                        <exclude>**/TestExcelConverterSuite*.java</exclude>
                    </excludes>
                    <!--test>TestPPTX2PNG</test-->
                    <!--parallel>both</parallel>
                <threadCount>10</threadCount-->
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.jacoco</groupId>
                <artifactId>jacoco-maven-plugin</artifactId>
                <version>0.8.2</version>
            </plugin>
        </plugins>
    </build>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>${junit.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.xmlunit</groupId>
            <artifactId>xmlunit-core</artifactId>
            <version>${xmlunit.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.mockito</groupId>
            <artifactId>mockito-core</artifactId>
            <version>${mockito.version}</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <profiles>
        <!-- We need a fair amount of memory to compile the xml schema, -->
        <!-- but limit it in case it goes wrong!                        -->
        <!-- Pick the right amount based on 32 vs 64 bit jvm            -->
        <!-- ********************************************************** -->
        <!-- If you are using IntelliJ, you might want to check         -->
        <!-- http://stackoverflow.com/questions/24115142                -->
        <!-- ********************************************************** -->
        <profile>
            <id>32bitstuff</id>
            <activation>
                <property>
                    <name>sun.arch.data.model</name>
                    <value>32</value>
                </property>
            </activation>
            <properties>
                <maven.compiler.maxmem>512m</maven.compiler.maxmem>
                <argLine>-Xmx768m</argLine>
            </properties>
        </profile>

        <profile>
            <id>64bitstuff</id>
            <activation>
                <property>
                    <name>sun.arch.data.model</name>
                    <value>64</value>
                </property>
            </activation>
            <properties>
                <maven.compiler.maxmem>768m</maven.compiler.maxmem>
                <argLine>-Xmx1024m</argLine>
            </properties>
        </profile>

        <profile>
            <id>xmlbean</id>
            <activation>
                <file>
                    <exists>xmlbeans.marker</exists>
                </file>
            </activation>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.codehaus.mojo</groupId>
                        <artifactId>xmlbeans-maven-plugin</artifactId>
                        <version>2.3.3</version>
                        <executions>
                            <execution>
                                <phase>process-sources</phase>
                                <goals>
                                    <goal>xmlbeans</goal>
                                </goals>
                                <configuration>
                                    <schemaDirectory>${basedir}/target/schemas</schemaDirectory>
                                    <javaSource>1.5</javaSource>
                                    <noJavac>true</noJavac>
                                    <noUpa>${xmlbeans.noUpa}</noUpa>
                                    <noPvr>${xmlbeans.noPvr}</noPvr>
                                    <xmlConfigs>
                                        <xmlConfig implementation="java.io.File">
                                            ${basedir}/../../src/ooxml/resources/org/apache/poi/poifs/crypt/encryptionCertificate.xsdconfig
                                        </xmlConfig>
                                        <xmlConfig implementation="java.io.File">
                                            ${basedir}/../../src/ooxml/resources/org/apache/poi/poifs/crypt/encryptionInfo.xsdconfig
                                        </xmlConfig>
                                        <xmlConfig implementation="java.io.File">
                                            ${basedir}/../../src/ooxml/resources/org/apache/poi/poifs/crypt/encryptionPassword.xsdconfig
                                        </xmlConfig>
                                        <xmlConfig implementation="java.io.File">
                                            ${basedir}/../../src/ooxml/resources/org/apache/poi/schemas/ooxmlSchemas.xsdconfig
                                        </xmlConfig>
                                    </xmlConfigs>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>

                    <plugin>
                        <artifactId>maven-antrun-plugin</artifactId>
                        <version>${maven.plugin.antrun.version}</version>
                        <executions>
                            <execution>
                                <id>copy-xmltype-and-xsdconfig</id>
                                <phase>generate-sources</phase>
                                <goals>
                                    <goal>run</goal>
                                </goals>
                                <configuration>
                                    <target>
                                        <copy todir="${basedir}/target/schemas">
                                            <fileset dir="${basedir}/../../src/ooxml/resources/org/apache/poi/schemas"/>
                                        </copy>
                                    </target>
                                </configuration>
                            </execution>
                            <execution>
                                <id>replace-xmltypeloader</id>
                                <phase>process-sources</phase>
                                <goals>
                                    <goal>run</goal>
                                </goals>
                                <configuration>
                                    <target>
                                        <!-- the space between "public  static" is on purpose to prevent double execution -->
                                        <property name="loaderMethod"><![CDATA[
        private static java.lang.ref.SoftReference<org.apache.xmlbeans.SchemaTypeLoader> typeLoader;

        private static synchronized org.apache.xmlbeans.SchemaTypeLoader getTypeLoader() {
            org.apache.xmlbeans.SchemaTypeLoader stl = (typeLoader == null) ? null : typeLoader.get();
            if (stl == null) {
                stl = org.apache.xmlbeans.XmlBeans.typeLoaderForClassLoader(\2.class.getClassLoader());
                typeLoader = new java.lang.ref.SoftReference(stl);
            }
            return stl;
        }

        public  static \2 newInstance\(\) \{]]></property>

                                        <fileset id="xsrc" dir="${basedir}/target/generated-sources/xmlbeans" includes="**/*.java" excludes="**/impl/**"/>

                                        <replaceregexp byline="true"
                                                       match="(\s*)public static ([^ ]+) newInstance\(\) \{"
                                                       replace="${loaderMethod}">
                                            <fileset refid="xsrc"/>
                                        </replaceregexp>

                                        <replace>
                                            <fileset refid="xsrc"/>
                                            <replacetoken>org.apache.xmlbeans.XmlBeans.getContextTypeLoader
                                            </replacetoken>
                                            <replacevalue>getTypeLoader</replacevalue>
                                        </replace>

                                        <!-- remove deprecated warnings, as we prefer the array methods - see #56854 -->
                                        <replace>
                                            <fileset refid="xsrc"/>
                                            <replacetoken><![CDATA[     * @deprecated
]]></replacetoken>
                                        </replace>
                                    </target>
                                </configuration>
                            </execution>
                            <execution>
                                <id>remove-xmltypeloader-from-schema-jar</id>
                                <phase>prepare-package</phase>
                                <goals>
                                    <goal>run</goal>
                                </goals>
                                <configuration>
                                    <target>
                                        <touch file="${basedir}/target/generated-sources/xmlbeans/.staleFlag"/>
                                        <delete dir="${basedir}/target/classes/org/apache"/>
                                    </target>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>

            <dependencies>
                <dependency>
                    <groupId>org.apache.xmlbeans</groupId>
                    <artifactId>xmlbeans</artifactId>
                    <version>${xmlbeans.version}</version>
                </dependency>
            </dependencies>
        </profile>
    </profiles>
</project>
