<!--
   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.
-->
<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
  <id>src</id>
  <formats>
    <format>tar.gz</format>
  </formats>
  <includeBaseDirectory>true</includeBaseDirectory>
  <fileSets>
    <fileSet>
      <directory>.</directory>
      <useDefaultExcludes>true</useDefaultExcludes>
      <includes>
        <include>**/README.md</include>
        <include>**/LICENSE</include>
        <include>**/DISCLAIMER</include>
        <include>**/NOTICE</include>
        <include>**/pom.xml</include>
        <include>**/src/**</include>
        <include>**/conf/**</include>
        <include>**/bin/**</include>
        <include>**/*.txt</include>
        <include>doc/*</include>
      </includes>
      <excludes>
        <exclude>.git/**</exclude>
        <exclude>**/.gitignore</exclude>
        <exclude>**/.svn</exclude>
        <exclude>**/*.iws</exclude>
        <exclude>**/*.ipr</exclude>
        <exclude>**/*.iml</exclude>
        <exclude>**/.classpath</exclude>
        <exclude>**/.project</exclude>
        <exclude>**/.settings</exclude>
        <exclude>**/target/**</exclude>
        <!-- until the code that does this is fixed -->
        <exclude>**/*.log</exclude>
        <exclude>**/build/**</exclude>
        <exclude>**/file:/**</exclude>
        <exclude>**/SecurityAuth.audit*</exclude>
      </excludes>
    </fileSet>
    <fileSet>
      <directory>target/site/apidocs</directory>
      <outputDirectory>doc/apidocs</outputDirectory>
    </fileSet>
  </fileSets>
</assembly>
