<?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="PrintMessage" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ItemGroup>
    <PackageReference Include="RoslynCodeTaskFactory" Version="2.0.7" />
  </ItemGroup>
  <!--
       ########################################################################
         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="$(RoslynCodeTaskFactory)" Condition=" '$(RoslynCodeTaskFactory)' != '' ">
    <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="C#">
        <![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>
  
  <Target Name="PrintMessage">
    <Message Text="Roslyn code task factory is $(RoslynCodeTaskFactory)" Importance="high"/>
  </Target>
  <!--
    A Target that extract the REEF version from the pom and makes it available as REEF_Version
  -->
  <Target Name="ExtractPOMVersion" BeforeTargets="Build">
    <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>


