<?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 InitialTargets="ExtractPOMVersion" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <!--
       ########################################################################
         Extract the REEF Version from the POM file 
       ######################################################################## 
  -->
  <!--A Task that extracts the version from the pom in a given folder.-->
  <UsingTask
    TaskName="GetMavenProjectVersion"
    TaskFactory="CodeTaskFactory"
    AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll" >
    <ParameterGroup>
      <SnapshotNumber/>
      <ProjectFolder Required="true"/>
      <Version Output="true"/>
      <NugetVersion Output="true"/>
    </ParameterGroup>
    <Task>
      <Reference Include="System.Xml"/>
      <Reference Include="System.Xml.Linq"/>
      <Using Namespace="System"/>
      <Using Namespace="System.IO"/>
      <Using Namespace="System.Linq"/>
      <Using Namespace="System.Xml.Linq"/>
      <Code Type="Fragment" Language="cs">
        <![CDATA[
          Version = XDocument.Load(Path.Combine(ProjectFolder, "pom.xml")).Descendants()
            .Where(x => x.Name.ToString().Contains("version"))
            .FirstOrDefault().Value;
          var snapshotNumberAsString = ($(SnapshotNumber) >= 0 && $(SnapshotNumber) <=9) ? "0" + $(SnapshotNumber) : $(SnapshotNumber).ToString();
          NugetVersion = $(IsSnapshot) ? Version + "-" + snapshotNumberAsString : Version.Replace("-SNAPSHOT","");
        ]]>
      </Code>
    </Task>
  </UsingTask>
  <!--
    A Target that extract the REEF version from the pom and makes it available as REEF_Version
  -->
  <Target Name="ExtractPOMVersion">
    <Message Text="MSBuildProjectName is $(MSBuildProjectName)" />
    <Message Text="MSBuildProjectDirectory is $(MSBuildProjectDirectory)" />
    <Message Text="SnapshotNumber is $(SnapshotNumber)" />
    <Message Text="The root directory of the source tree is $(REEF_Source_Folder)" />
    <GetMavenProjectVersion SnapshotNumber="$(SnapshotNumber)" ProjectFolder="$(REEF_Source_Folder)">
      <Output PropertyName="REEF_Version" TaskParameter="Version"/>
      <Output PropertyName="REEF_NugetVersion" TaskParameter="NugetVersion"/>
    </GetMavenProjectVersion>
    <Message Text="Extracted the following version from the POM: $(REEF_Version)"/>
  </Target>
  <PropertyGroup>
    <BuildDotTargetsIsImported>true</BuildDotTargetsIsImported>
  </PropertyGroup>
</Project>
