<!--
  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>source-release</id>
  <formats>
    <format>zip</format>
  </formats>
  <fileSets>
    <fileSet>
      <directory>${project.basedir}</directory>
      <outputDirectory>/</outputDirectory>
      <useDefaultExcludes>true</useDefaultExcludes>
      <includes>
        <include>**/DISCLAIMER</include>
        <include>**/LICENSE</include>
        <include>**/NOTICE</include>
        <include>**/README</include>
        <include>**/src/**</include>
        <include>**/results/**</include>
        <include>**/pom.xml</include>
        <include>**/build*.xml</include>
        <include>**/findbugs*.xml</include>
        <include>**/*site.xml</include>
        <include>**/*.adm</include>
        <include>**/*.json</include>
        <include>**/*.aql</include>
        <include>**/*.ddl</include>
        <include>**/*.seq</include>
        <include>**/*.rc</include>
        <include>**/*.big</include>
        <include>**/*textFileS</include>
        <include>**/*large_text</include>
        <include>**/*.csv*</include>
        <include>**/*.tbl</include>
        <include>**/*.txt</include>
        <include>**/part-*</include>
        <include>**/*.cleaned</include>
      </includes>
      <excludes>
        <exclude>**/${project.build.directory}/**</exclude>
      </excludes>
    </fileSet>
  </fileSets>
</assembly>
