<?xml version="1.0"?>
<!--
    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 name="solr-webapp" default="default">
  <description>Solr webapp</description>

  <property name="rat.additional-includes" value="**"/>
  <property name="rat.additional-excludes" value="web/img/**"/>

  <import file="../common-build.xml"/>

  <property name="exclude.from.webapp" value="*slf4j*,log4j-*,*javax.servlet*" />
 
  <!-- this module has no javadocs -->
  <target name="javadocs"/>

  <!-- this module has no jar either -->
  <target name="jar-core"/>

  <!-- nothing to compile -->
  <target name="compile-core"/>
  <target name="compile-test"/>
  <target name="test"/>
  <target name="test-nocompile"/>

  <target name="dist"
          description="Creates the Webapp folder for distribution."
          depends="dist-core, dist-solrj, lucene-jars-to-solr">
    <ant dir="${common-solr.dir}" inheritall="false" target="contribs-add-to-webapp"/>
    <mkdir dir="${server.dir}/solr-webapp/webapp"/>
    <copy todir="${server.dir}/solr-webapp/webapp">
      <fileset dir="web" excludes="${exclude.from.webapp}, libs/angular-cookies.js, libs/angular-route.js, libs/angular-sanitize.js, libs/angular-utf8-base.js, libs/angular.js, libs/chosen.jquery.js"/>
      <fileset dir="${dest}/web" excludes="${exclude.from.war}"/> <!-- contribs' additions -->
    </copy>
    <mkdir dir="${server.dir}/solr-webapp/webapp/WEB-INF/lib"/>
    <copy todir="${server.dir}/solr-webapp/webapp/WEB-INF/lib">
      <fileset dir="${common-solr.dir}/core/lib" excludes="${exclude.from.webapp},${common.classpath.excludes}"/>
      <fileset dir="${common-solr.dir}/solrj/lib" excludes="${exclude.from.webapp},${common.classpath.excludes}"/>
      <fileset dir="${lucene-libs}" excludes="${exclude.from.webapp},${common.classpath.excludes}" />
      <fileset dir="${dist}" excludes="${exclude.from.webapp},${common.classpath.excludes}">
        <include name="solr-solrj-${version}.jar" />
        <include name="solr-core-${version}.jar" />
      </fileset>
    </copy>
  </target>

  <!-- nothing to do -->
  <target name="-dist-maven"/>

  <!-- nothing to do -->
  <target name="-install-to-maven-local-repo"/>

  <!-- nothing to do -->
  <target name="-validate-maven-dependencies"/>
</project>
