<?xml version="1.0" encoding="UTF-8"?>
<!--
 Licensed to the Apache Software Foundation (ASF) under one
 or more contributor license agreements.  See the NOTICE file
 distributed with this work for additional information
 regarding copyright ownership.  The ASF licenses this file
 to you under the Apache License, Version 2.0 (the
 "License"); you may not use this file except in compliance
 with the License.  You may obtain a copy of the License at

 http://www.apache.org/licenses/LICENSE-2.0

 Unless required by applicable law or agreed to in writing,
 software distributed under the License is distributed on an
 "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 KIND, either express or implied.  See the License for the
 specific language governing permissions and limitations
 under the License.
-->
<!--
    Maven release plugin requires the project tag to be on a single line.
-->
<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">
    <!--
        To build the distribution files from project root:

        mvn clean compile package -Dtest=false -DfailIfNoTests=false

        To build and deploy a fully signed release with docs, run:

            mvn clean deploy -Papache-release,docbook-profile

        Note that to sign the release, you need to have "gpg" installed and
        create a key. See http://apache.org/dev/release-signing.html
    -->

    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>org.apache.openjpa</groupId>
        <artifactId>openjpa-parent</artifactId>
        <version>2.2.1</version>
    </parent>

    <groupId>org.apache.openjpa</groupId>
    <artifactId>apache-openjpa</artifactId>
    <packaging>pom</packaging>
    <name>OpenJPA Project Docs and Assemblies</name>
    <description>OpenJPA Project Docs and Assemblies</description>

    <properties>
        <openjpa.release.keyAlias>
            ${user.name}@apache.org
        </openjpa.release.keyAlias>

        <openjpa.assembly.finalName>
            ${artifactId}-${version}</openjpa.assembly.finalName>
        <openjpa.assembly.outputDirectory>
        ${project.basedir}/target/site/downloads
        </openjpa.assembly.outputDirectory>

        <openjpa.assembly.binarySuffix>binary</openjpa.assembly.binarySuffix>
        <openjpa.assembly.binaryBase>
        ${openjpa.assembly.outputDirectory}/${openjpa.assembly.finalName}-${openjpa.assembly.binarySuffix}
        </openjpa.assembly.binaryBase>
        <openjpa.assembly.binaryFile>
        ${openjpa.assembly.binaryBase}.zip
        </openjpa.assembly.binaryFile>

        <openjpa.assembly.sourceSuffix>source</openjpa.assembly.sourceSuffix>
        <openjpa.assembly.sourceBase>
        ${openjpa.assembly.outputDirectory}/${openjpa.assembly.finalName}-${openjpa.assembly.sourceSuffix}
        </openjpa.assembly.sourceBase>
        <openjpa.assembly.sourceFile>
        ${openjpa.assembly.sourceBase}.zip
        </openjpa.assembly.sourceFile>

        <parent.site.docs>
        ${project.basedir}/target/site/docs
        </parent.site.docs>

        <docbook.source>${project.basedir}/src/doc/manual</docbook.source>
        <docbook.target>${project.basedir}/target/docbook</docbook.target>
        <docbook.version>1.67.2</docbook.version>
        <local.repository>${settings.localRepository}</local.repository>

        <!-- 
            Java imaging apis are needed to include images in a PDF.
            JIMI or JAI may be used. Neither is available in a maven
            repository and should be downloaded and installed manually
            to your local repository.

            JAI can be found here:
            http://download.java.net/media/jai/builds/release/1_1_3/

            ie :
            $ mvn install:install-file -Dfile=jai_core.jar \
              -DgroupId=com.sun -DartifactId=jai_core \
              -Dversion=1.1.3 -Dpackaging=jar
            $ mvn install:install-file -Dfile=jai_codec.jar \
              -DgroupId=com.sun -DartifactId=jai_codec \
              -Dpackaging=jar -Dversion=1.1.3

            Alternatively if you have installed the JAI artifacts to an 
            internal repository you can specify it on the command line:
              -Djai.maven.repo=REPOS_URL
              -Djai.groupId=com.sun
            -->
        <jai.maven.repo>https://m2proxy.atlassian.com/repository/public</jai.maven.repo>
        <jai.groupId>com.sun</jai.groupId>
        <jai.version>1.1.3</jai.version>

        <nightly.version>latest</nightly.version>
        <!-- authentication for nightly uploads -->
        <nightly.user.name>${user.name}</nightly.user.name>
        <nightly.password>passw0rd</nightly.password>
    </properties>

    <build>
        <!-- needed to let maven pass the "compile" phase -->
        <testSourceDirectory>/none/</testSourceDirectory>

        <!-- filter site resources -->
        <resources>
            <resource>
                <directory>${project.basedir}/src/site</directory>
                <!-- targetPath is relative to target/classes/ -->
                <targetPath>../filtered-site</targetPath>
                <filtering>false</filtering>
            </resource>
        </resources>

        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <executions>
                    <execution>
                        <id>bin</id>
                        <phase>package</phase>
                        <goals>
                            <goal>attached</goal>
                        </goals>
                        <configuration>
                            <descriptors>
                                <descriptor>assembly.xml</descriptor>
                            </descriptors>
                            <outputDirectory>${openjpa.assembly.outputDirectory}</outputDirectory>
                            <workDirectory>target/work</workDirectory>
                        </configuration>
                    </execution>
                    <execution>
                        <id>sources</id>
                        <phase>package</phase>
                        <goals>
                            <goal>attached</goal>
                        </goals>
                        <configuration>
                            <descriptor>source-assembly.xml</descriptor>
                            <outputDirectory>${openjpa.assembly.outputDirectory}</outputDirectory>
                            <workDirectory>target/work</workDirectory>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

            <!--
                Copy over site files from src/site to target/filtered-site
                so we can filter resources and include other generated
                content from the openjpa-project module.
            -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-resources-plugin</artifactId>
                <executions>
                    <execution>
                        <id>prefilter-site</id>
                        <phase>site</phase>
                        <goals>
                            <goal>resources</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-site-plugin</artifactId>
                <configuration>
                    <siteDirectory>target/filtered-site</siteDirectory>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>ianal-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <goals>
                            <goal>verify-legal-files</goal>
                        </goals>
                        <configuration>
                            <!-- Do not fail the build, as ianal will fail on source zips due to included META-INF dirs -->
                            <strict>false</strict>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

    <profiles>
        <!--
            Docbook profile. Docs can be built by running:
            MAVEN_OPTS=-Xmx512m
            mvn -f openjpa-project/pom.xml process-resources -Pdocbook-profile
        -->
        <profile>
            <id>docbook-profile</id>
            <build>
                <plugins>
                    <!-- build the docs when processing resources -->
                    <plugin>
                        <groupId>com.agilejava.docbkx</groupId>
                        <artifactId>docbkx-maven-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>build-pdf-doc</id>
                                <phase>process-resources</phase>
                                <goals><goal>generate-pdf</goal></goals>
                                <configuration>
                                    <sourceDirectory>
                                        ${docbook.source}
                                    </sourceDirectory>
                                    <targetDirectory>
                                        ${docbook.target}
                                    </targetDirectory>
                                    <includes>manual.xml</includes>
                                    <foCustomization>
                                        ${docbook.source}/manual-pdf.xsl
                                    </foCustomization>
                                    <imgSrcPath>
                                        ${docbook.source}/
                                    </imgSrcPath>
                                    <postProcess>
                                        <!-- copy to parent module for
                                             expanded access in upload -->
                                        <mkdir dir="${parent.site.docs}" />
                                        <delete file="${docbook.target}/manual.fo" />
                                        <copy todir="${parent.site.docs}">
                                            <fileset dir="${docbook.target}">
                                                <include name="manual.pdf" />
                                            </fileset>
                                        </copy>
                                    </postProcess>
                                </configuration>
                            </execution>
                            <execution>
                                <id>build-chunked-doc</id>
                                <phase>process-resources</phase>
                                <goals><goal>generate-html</goal></goals>
                                <configuration>
                                    <sourceDirectory>
                                        ${docbook.source}
                                    </sourceDirectory>
                                    <targetDirectory>
                                        ${docbook.target}
                                    </targetDirectory>
                                    <includes>manual.xml</includes>
                                    <chunkedOutput>true</chunkedOutput>
                                    <chunkQuietly>false</chunkQuietly>
                                    <htmlCustomization>
                                        ${docbook.source}/manual-xhtml-chunk.xsl
                                    </htmlCustomization>
                                    <postProcess>
                                        <!-- rename manual to index -->
                                        <move file="${docbook.target}/manual/manual.html" tofile="${docbook.target}/manual/index.html" />
                                        <!-- Replace a 'base href' token to 'base target' in the index.html -->
                                        <!-- This base href was inserted by manual-xhtml-chunk.xsl parameter 'html.base' -->
                                        <replace file="${docbook.target}/manual/index.html" token="base href" value="base target" />
                                        <!-- Copy main.html from original location to docbook target  -->
                                        <copy file="${docbook.source}/main.html" tofile="${docbook.target}/manual/main.html" />
                                        <!-- copy over images and styles -->
                                        <mkdir dir="${docbook.target}/manual/img" />
                                        <copy todir="${docbook.target}/manual/img">
                                            <fileset dir="${docbook.source}/img">
                                                <include name="*.*" />
                                            </fileset>
                                        </copy>

                                        <mkdir dir="${docbook.target}/manual/css" />
                                        <copy todir="${docbook.target}/manual/css">
                                            <fileset dir="${docbook.source}/css">
                                                <include name="*.*" />
                                            </fileset>
                                        </copy>

                                        <!-- copy to parent module for
                                             expanded access in upload -->
                                        <mkdir dir="${parent.site.docs}" />
                                        <copy todir="${parent.site.docs}">
                                            <fileset dir="${docbook.target}/manual">
                                                <include name="*.*" />
                                            </fileset>
                                        </copy>
                                    </postProcess>
                                </configuration>
                            </execution>
                            <execution>
                                <id>build-single-doc</id>
                                <phase>process-resources</phase>
                                <goals><goal>generate-html</goal></goals>
                                <configuration>
                                    <sourceDirectory>
                                        ${docbook.source}
                                    </sourceDirectory>
                                    <targetDirectory>
                                        ${docbook.target}
                                    </targetDirectory>
                                    <includes>manual.xml</includes>
                                    <chunkedOutput>false</chunkedOutput>
                                    <htmlCustomization>
                                        ${docbook.source}/manual-xhtml.xsl
                                    </htmlCustomization>
                                    <postProcess>
                                        <!-- copy to parent module for
                                             expanded access in upload -->
                                        <mkdir dir="${parent.site.docs}" />
                                        <copy todir="${parent.site.docs}">
                                            <fileset dir="${docbook.target}">
                                                <include name="manual.html" />
                                            </fileset>
                                        </copy>
                                    </postProcess>
                                </configuration>
                            </execution>
                        </executions>
                        <dependencies>
                        <dependency>
                            <groupId>org.docbook</groupId>
                            <artifactId>docbook-xml</artifactId>
                            <version>4.4</version>
                            <scope>runtime</scope>
                        </dependency>
                        <dependency>
                            <groupId>${jai.groupId}</groupId>
                            <artifactId>jai_core</artifactId>
                            <version>${jai.version}</version>
                            <scope>runtime</scope>
                        </dependency>
                        <dependency>
                            <groupId>${jai.groupId}</groupId>
                            <artifactId>jai_codec</artifactId>
                            <version>${jai.version}</version>
                            <scope>runtime</scope>
                        </dependency>
                        </dependencies>
                    </plugin>
                </plugins>
            </build>
            <activation>
                <property>
                    <name>builddocs</name>
                    <value>true</value>
                </property>
            </activation>
            <pluginRepositories>
                <pluginRepository>
                    <id>agilejava</id>
                    <name>Agilejava repository (Docbook plugin)</name>
                    <url>http://agilejava.com/maven</url>
                </pluginRepository>
            </pluginRepositories>
            <repositories>
                <repository>
                    <id>jai.repository</id>
                    <name>JAI Repository (indirectly used by Docbook plugin)</name>
                    <url>${jai.maven.repo}</url>
                </repository>
            </repositories>
        </profile>
        <!-- 
          Upload distribution files, javadoc and manual to openjpa.apache.org/builds/${nightly.version}. 
          This profile is designed to be run nightly by a continuous build server, but can
          also be run manually.

          The nightly.user.name and nightly.password properties need to be set prior to using
          this profile, ie : 
          $ mvn -Dnightly.user.name=mikedd -Dnightly.password=mikesPassword -Pnightly-upload package
          or (using a profile defined in $user.home/.m2/settings.xml )
          $ mvn -Pnightly-upload,mikes-nightly-credentials package
          -->
        <profile>
            <id>nightly-upload</id>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-antrun-plugin</artifactId>
                        <executions>
                            <execution>
                                <phase>package</phase>
                                <configuration>
                                    <tasks>
                                        <ant antfile="upload.xml" target="upload" inheritRefs="true">
                                            <property name="nightly.user.name" value="${nightly.user.name}" />
                                            <property name="nightly.password" value="${nightly.password}" />
                                            <property name="nightly.keyfile" value="${nightly.keyfile}" />
                                            <property name="nightly.passphrase" value="${nightly.passphrase}" />
                                            <property name="nightly.version" value="${nightly.version}" />
                                            <property name="project.version" value="${project.version}" />
                                        </ant>
                                    </tasks>
                                </configuration>
                                <goals>
                                    <goal>run</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>

    <!-- need to explicitly list dependencies for assembly to work -->
    <dependencies>
        <dependency>
            <groupId>org.apache.openjpa</groupId>
            <artifactId>openjpa</artifactId>
            <version>${project.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.openjpa</groupId>
            <artifactId>openjpa-all</artifactId>
            <version>${project.version}</version>
        </dependency>

        <!-- included so we can include it in the distribution -->
        <dependency>
            <groupId>org.apache.derby</groupId>
            <artifactId>derby</artifactId>
        </dependency>
        <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
        </dependency>
        <dependency>
            <groupId>commons-dbcp</groupId>
            <artifactId>commons-dbcp</artifactId>
        </dependency>

        <!-- included for Apache Bean Validation provider -->
        <dependency>
            <groupId>org.apache.geronimo.specs</groupId>
            <artifactId>geronimo-validation_1.0_spec</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.bval</groupId>
            <artifactId>org.apache.bval.bundle</artifactId>
        </dependency>
        <dependency>
            <groupId>commons-beanutils</groupId>
            <artifactId>commons-beanutils</artifactId>
        </dependency>
    </dependencies>
</project>
