<?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.
-->

<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>
  
  <parent>
    <groupId>org.apache.uima</groupId>
    <artifactId>parent-pom</artifactId>
    <version>14</version>
    <relativePath />
  </parent>

  <artifactId>ruta-eclipse-update-site</artifactId>
  <packaging>pom</packaging>
  <version>3.1.0</version>

  <name>Apache UIMA Ruta Eclipse: ${project.artifactId}</name>
  <description>The UIMA Ruta Eclipse update site</description>
  <url>${uimaWebsiteUrl}</url>

  <scm>
    <connection>scm:git:https://github.com/apache/uima-ruta/</connection>
    <developerConnection>scm:git:https://github.com/apache/uima-ruta/</developerConnection>
    <url>https://github.com/apache/uima-ruta/</url>
    <tag>HEAD</tag>
  </scm>
  
  <properties>
    <uimaScmProject>${project.artifactId}</uimaScmProject>
    <eclipseUpdateSiteComponent>ruta</eclipseUpdateSiteComponent>
    <eclipseUpdateSubSite>${project.build.directory}/eclipse-update-site-v3/${eclipseUpdateSiteComponent}</eclipseUpdateSubSite>
    <dropPrevVersions>false</dropPrevVersions>
  </properties>

  <build>
    
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-dependency-plugin</artifactId>
        <executions>
          <execution>
            <id>copy-new-plugins</id>
            <goals><goal>copy</goal></goals>
            <configuration>
              <!-- ===================================================================
                                       the PLUGINS 
              ======================================================================= -->
              <artifactItems>
                <artifactItem>
                  <groupId>org.apache.uima</groupId>
                  <artifactId>ruta-ep-addons</artifactId>
                  <version>${project.version}</version>
                  <destFileName>org.apache.uima.ruta.addons_${parsedVersion.osgiVersion}.jar</destFileName>
                </artifactItem>
                <artifactItem>
                  <groupId>org.apache.uima</groupId>
                  <artifactId>ruta-ep-caseditor</artifactId>
                  <version>${project.version}</version>
                  <destFileName>org.apache.uima.ruta.caseditor_${parsedVersion.osgiVersion}.jar</destFileName>
                </artifactItem>
                <artifactItem>
                  <groupId>org.apache.uima</groupId>
                  <artifactId>ruta-ep-engine</artifactId>
                  <version>${project.version}</version>
                  <destFileName>org.apache.uima.ruta.engine_${parsedVersion.osgiVersion}.jar</destFileName>
                </artifactItem>
                <artifactItem>
                  <groupId>org.apache.uima</groupId>
                  <artifactId>ruta-ep-ide</artifactId>
                  <version>${project.version}</version>
                  <destFileName>org.apache.uima.ruta.ide_${parsedVersion.osgiVersion}.jar</destFileName>
                </artifactItem>
                <artifactItem>
                  <groupId>org.apache.uima</groupId>
                  <artifactId>ruta-ep-ide-ui</artifactId>
                  <version>${project.version}</version>
                  <destFileName>org.apache.uima.ruta.ide.ui_${parsedVersion.osgiVersion}.jar</destFileName>
                </artifactItem>
                <artifactItem>
                  <groupId>org.apache.uima</groupId>
                  <artifactId>ruta-ep-textruler</artifactId>
                  <version>${project.version}</version>
                  <destFileName>org.apache.uima.ruta.textruler_${parsedVersion.osgiVersion}.jar</destFileName>
                </artifactItem>
                <artifactItem>
                  <groupId>org.apache.uima</groupId>
                  <artifactId>ruta-ep-core-ext</artifactId>
                  <version>${project.version}</version>
                  <destFileName>org.apache.uima.ruta.core.ext_${parsedVersion.osgiVersion}.jar</destFileName>
                </artifactItem>
              </artifactItems>
              <outputDirectory>${eusWork}/plugins</outputDirectory>
            </configuration>
          </execution>
          <execution>
            <id>copy-features</id>
            <goals>
              <goal>copy</goal>
            </goals>
            <configuration>
              <!-- ===================================================================
                                         the FEATURES
                ======================================================================= -->
              <artifactItems>
                <artifactItem>
                  <groupId>org.apache.uima</groupId>
                  <artifactId>ruta-eclipse-feature</artifactId>
                  <version>${project.version}</version>
                  <destFileName>org.apache.uima.ruta.feature_${parsedVersion.osgiVersion}.jar</destFileName>
                </artifactItem>
              </artifactItems>
              <outputDirectory>${project.build.directory}/eus-work/features</outputDirectory>   
            </configuration>
          </execution>
        </executions>
      </plugin>

      <plugin>
        <artifactId>maven-antrun-plugin</artifactId>
        <executions>

           <!-- ==================================================== -->
           <!--                                                      -->
           <!--       P O S T   JAR   S I G N I N G by Digicert      -->
           <!--                                                      -->
           <!--       is not here, it was                            -->
           <!--       moved to uima-wide parent pom 10/2018          -->
           <!-- ==================================================== -->
 
          <execution>
            <id>BuildUpdateSite-pack-svnget-buildMetadata-commit-to-dev</id>
            <phase>package</phase>
            <goals>
              <goal>run</goal>
            </goals>
            <configuration combine.self="override">
              <target>
                <taskdef classname="net.sf.antcontrib.logic.IfTask" name="if" />
                
                <condition property="eclipse.home" value="${uima-maven-build-eclipse-home}">
                  <not>
                    <equals arg1="${uima-maven-build-eclipse-home}" arg2="$${uima-maven-build-eclipse-home}" />
                  </not>
                </condition>

                <property environment="envVar" />
                <condition property="eclipse.home" value="${envVar.ECLIPSE_HOME}">
                  <isset property="envVar.ECLIPSE_HOME" />
                </condition>
                
                <fail unless="eclipse.home" message="********** Please set up and use an ant property eclipse.home set to an Eclipse installation at level 3.3 or later, e.g. c:/eclipses/3.3/eclipse" />
                <fail unless="uima-eclipse-jar-processor" message="********** Please add to your settings.xml file the property uima-eclipse-jar-processor, point to this within an Eclipse installation at level 4.2 or later, e.g. \$\{uima-maven-build-eclipse-home\}/plugins/org.eclipse.equinox.p2.jarprocessor_1.0.200.v20110808-1657.jar" />
                <!--  skip this when dropping previous versions -->
                <if> 
                    <equals arg1="${dropPrevVersions}" arg2="false" />
                  <then>
	                  <if>
	                      <equals arg1="${isApacheRelease}" arg2="true" />
	                      <then>
	    
	                        <echo>checking out eclipse update subsite ${eclipseUpdateSiteComponent} from dist ...release...</echo>
	                        <delete dir="${eclipseUpdateSubSite}" quiet="true" />
	                        <exec executable="svn" failonerror="true">
	                          <arg value="checkout" />
	                          <arg value="${distsvnroot}repos/dist/release/uima/eclipse-update-site-v3/${eclipseUpdateSiteComponent}" />
	                          <arg value="${eclipseUpdateSubSite}" />
	                        </exec> 
	                        
                        <echo>Saving original content and artifacts for the site</echo>
                        <copy todir="${project.build.directory}/saved" failonerror="true">
                          <fileset dir="${eclipseUpdateSubSite}"
                            includes="content.jar,artifacts.jar" />
                        </copy>
        
	                      </then>
	                      <else>
	                        <echo>skipping checkout of current svn dist release (because not apache-release)</echo>
	                        <!-- https://issues.apache.org/jira/browse/UIMA-3501 -->
	                        <delete dir="${eclipseUpdateSubSite}" quiet="true" />
	                      </else>
	                    </if>
                   </then>
                </if>
                    
                <echo>Save conditioned Jars prior to signing, in case of redo</echo>
                <echo>-------------------------------------------------------</echo> 
                <copy todir="${project.build.directory}/saved/features" failonerror="true">
                  <fileset dir="${eusWork}/features" includes="*.jar" />                 
                </copy>
                <copy todir="${project.build.directory}/saved/plugins" failonerror="true">
                   <fileset dir="${eusWork}/plugins" includes="*.jar" />                 
                </copy>
                
                <echo>Generate the p2 metadata and publish new artifacts</echo>
                <java fork="true" maxmemory="256m" jar="${eclipse-equinox-launcher}" failonerror="true">
                  <arg line="-application org.eclipse.equinox.p2.publisher.FeaturesAndBundlesPublisher" />
                  <arg line="-metadataRepository file:///${eclipseUpdateSubSite}" />
                  <arg line="-artifactRepository file:///${eclipseUpdateSubSite}" />
                  <arg line="-source ${eusWork}" />
                  <arg line="-configs ANY.ANY.ANY" />
                  <arg line="-publishArtifacts" />
                  <arg line="-compress" />
                  <arg line="-append" />
                </java>
                <echo>Augment p2 metadata with category information</echo>
                <java fork="true" maxmemory="256m" jar="${eclipse-equinox-launcher}" failonerror="true">
                  <arg line="-application org.eclipse.equinox.p2.publisher.CategoryPublisher" />
                  <arg line="-metadataRepository file:///${eclipseUpdateSubSite}" />
                  <arg line="-categoryDefinition file:///${basedir}/category.xml" />
                  <arg line="-categoryQualifier apache-uima" />
                  <arg line="-compress" />
                </java>
                <if>
                  <equals arg2="true" arg1="${isApacheRelease}" />
                  <then>
                    <echo message="Generating checksums for new features and plugins" />
                     <checksum algorithm="SHA-512" fileext=".sha512" format="MD5SUM" forceoverwrite="yes">
                      <fileset dir="${eusWork}">
                        <include name="**/*.gz" />
                        <include name="**/*.jar" />
                      </fileset>
                    </checksum>
                    
                    <echo message="Generating gpg signatures for new features and plugins" />
                    <apply failonerror="true" dir="${eusWork}" executable="gpg">
                      <arg value="--detach-sign" />
                      <arg value="--armor" />
                      <arg value="--batch" />
                      <fileset dir="${eusWork}">
                        <include name="**/*.jar" />
                      </fileset>
                    </apply>
                    <echo message="Copying the checksums and signatures to the update subsite" />
                    <copy todir="${eclipseUpdateSubSite}" failonerror="true">
                      <fileset dir="${eusWork}">
                        <include name="**/*.asc" />
                        <include name="**/*.sha512" />
                      </fileset>
                    </copy>
                    <echo message="Clearing previous checksums and signatures for update artifacts.jar and content.jar" />
                    <delete dir="${eclipseUpdateSubSite}">
                      <include name="*.sha512" />
                      <include name="*.asc" />
                    </delete>
                    <echo message="Generating checksums for updated artifacts.jar and content.jar" />
                        <checksum algorithm="SHA-512" fileext=".sha512" format="MD5SUM" forceoverwrite="yes">
                      <fileset dir="${eclipseUpdateSubSite}">
                        <include name="*.jar" />
                      </fileset>
                    </checksum>
                    <echo message="Generating gpg signatures for artifacts.jar and content.jar" />
                    <apply failonerror="true" dir="${eclipseUpdateSubSite}" executable="gpg">
                      <arg value="--detach-sign" />
                      <arg value="--armor" />
                      <arg value="--batch" />
                      <fileset dir="${eclipseUpdateSubSite}">
                        <include name="*.jar" />
                      </fileset>
                    </apply>
                  </then>
                </if>
              </target>
            </configuration>
          </execution>
        </executions>
      </plugin>

   </plugins>
  </build>

</project>
