<?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 basedir="." default="netbeans" name="java/java.lsp.server">
    <description>Builds, tests, and runs the project org.netbeans.modules.java.lsp.server</description>
    <import file="../../nbbuild/templates/projectized.xml"/>
    <target name="proxy-setup" depends="test-init">
        <taskdef name="autoupdate" classname="org.netbeans.nbbuild.AutoUpdate" classpath="${nbantext.jar}"/>
        <taskdef name="configureproxy" classname="org.netbeans.nbbuild.extlibs.ConfigureProxy" classpath="${nbantext.jar}"/>
        <configureproxy connectto="https://netbeans.osuosl.org/binaries/" hostProperty="proxyHost" portProperty="proxyPort"/>
        <setproxy proxyhost="${proxyHost}" proxyPort="${proxyPort}"/>
    </target>
    <target name="build-lsp-server" depends="-set-use-jdk-javac,build,test-init,proxy-setup" description="Prepares NetBeans bits for vscode extensions">
        <ant dir="nbcode" target="build-zip" inheritall="false" inheritrefs="false" />
        <unzip src="nbcode/dist/nbcode.zip" dest="${lsp.build.dir}/../">
            <globmapper from="nbcode/nb/*" to="nbcode/nbcode/*"/>
        </unzip>
        <mkdir dir="${lsp.build.dir}/bin" />
        <copy todir="${lsp.build.dir}/bin" file="script/bin/nbcode" overwrite="true" />
        <mkdir dir="${lsp.build.dir}/etc" />
        <copy todir="${lsp.build.dir}/etc" file="script/etc/nbcode.conf" overwrite="true" />
        <copy todir="${lsp.build.dir}/etc" file="script/etc/nbcode.clusters" overwrite="true" />
        <chmod file="${lsp.build.dir}/bin/nbcode" perm="u+x" />
        <chmod file="${lsp.build.dir}/platform/lib/nbexec" perm="u+x"/>
        <chmod file="${lsp.build.dir}/java/maven/bin/mvn" perm="u+x" />
        <delete file="${lsp.build.dir}/lib/nb-javac-9-api.jar" />
        <delete file="${lsp.build.dir}/lib/nb-javac-9-impl.jar" />
        <delete file="${lsp.build.dir}/lib/org-netbeans-modules-java-source-nbjavac.jar" />

        <property name="3rdparty.modules" value="dont-install-anything"/>
        <autoupdate todir="${lsp.build.dir}/extra" updatecenter="file://${nb_all}/nb/updatecenters/build/classes/org/netbeans/modules/updatecenters/resources/3rdparty-catalog.xml">
            <modules includes="${3rdparty.modules}"/>
        </autoupdate>
    </target>
    <target name="-set-use-jdk-javac">
        <property name="test.use.jdk.javac" value="true" />
    </target>
    <target name="clean-vscode-ext" depends="clean" description="Cleans all VSCode related artifacts">
        <delete dir="${lsp.build.dir}" />
        <delete dir="vscode/node_modules" />
        <delete dir="vscode/out" />
        <ant dir="nbcode" target="clean" inheritall="false" inheritrefs="false"/>
    </target>
    <target name="build-vscode-ext" depends="build-lsp-server" description="Build the Visual Studio Code extension.">
        <property name="vsix.version" value="12.2.2"/>

        <exec executable="npm" failonerror="true" dir="vscode">
            <arg value="--allow-same-version"/>
            <arg value="version" />
            <arg value="${vsix.version}" />
        </exec>

        <exec executable="npm" failonerror="true" dir="vscode">
            <arg value="install" />
        </exec>

        <exec executable="npm" failonerror="true" dir="vscode">
            <arg value="run" />
            <arg value="compile" />
        </exec>

        <delete dir="${build.dir}/bundles" />
        <mkdir dir="${build.dir}/bundles/package" />
        <copy file="vscode/package.json" todir="${build.dir}/bundles/package" />
        <copy file="vscode/package-lock.json" todir="${build.dir}/bundles/package" />

        <exec executable="mvn" failonerror="true" dir="${nb_all}/nbbuild/misc/prepare-bundles">
            <arg value="package" />
            <arg value="exec:java" />
            <arg value="-Dexec.mainClass=org.netbeans.prepare.bundles.PrepareBundles" />
            <arg value="-Dexec.args=${build.dir}/bundles ${nb_all}" />
        </exec>
 
        <mkdir dir="${build.dir}/vsce" />
        <exec executable="npm" failonerror="true" dir="${build.dir}/vsce">
            <arg value="install" />
            <arg value="--save" />
            <arg value="vsce@1.80.0" />
        </exec>
        <exec executable="${build.dir}/vsce/node_modules/vsce/out/vsce" failonerror="true" dir="${basedir}/vscode">
            <arg value="package" />
            <arg value="--out" />
            <arg value="${build.dir}/apache-netbeans-java-${vsix.version}.vsix" />
        </exec>

        <delete dir="${build.dir}/vscode" />
        <mkdir dir="${build.dir}/vscode" />
        <delete dir="${build.dir}/vscode-mandatory" />
        <mkdir dir="${build.dir}/vscode-mandatory/licenses" />

        <unzip dest="${build.dir}/vscode" src="${build.dir}/apache-netbeans-java-${vsix.version}.vsix" />

        <taskdef name="createlicensesummary" classname="org.netbeans.nbbuild.extlibs.CreateLicenseSummary" classpath="${nbantext.jar}"/>

        <property name="config.javadoc.all" value="" />
        <resolvelist name="allmodules" path="modules.fullpath" dir="${nb_all}" list="${clusters.config.java.list}"/>

        <createlicensesummary licenseStub="${nb_all}/LICENSE"
                              noticeStub="${nb_all}/nbbuild/notice-stub.txt"
                              report="${build.dir}/createlicensesummary.xml"
                              nball="${nb_all}"
                              build="${build.dir}/vscode"
                              license="${build.dir}/vscode-mandatory/LICENSE"
                              licenseTargetDir="${build.dir}/vscode-mandatory/licenses"
                              notice="${build.dir}/vscode-mandatory/NOTICE"
                              binary="true"
                              excludes="${nb-extra-files}"
                              extraExternalDirectory="${build.dir}/bundles/bundles"
                              extraLicenseDirectory="${build.dir}/bundles/licenses"
                              includeAllFiles="true"
        />

        <zip destfile="${build.dir}/apache-netbeans-java-${vsix.version}.vsix" basedir="${build.dir}/vscode-mandatory/" update="true" />
    </target>
    <target name="test-lsp-server" description="Tests the LSP server behavior">
        <ant dir="nbcode" target="test" inheritall="false" inheritrefs="false" />
    </target>

    <target name="test-vscode-ext" depends="test-lsp-server" description="Tests the Visual Studio Code extension built by 'build-vscode-ext' target.">
        <exec executable="npm" failonerror="true" dir="vscode">
            <arg value="--allow-same-version"/>
            <arg value="run" />
            <arg value="nbjavac" />
        </exec>
        <exec executable="npm" failonerror="true" dir="vscode">
            <arg value="--allow-same-version"/>
            <arg value="run" />
            <arg value="test" />
        </exec>
    </target>
</project>
