<?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.
-->
<assembly>
  <id>bin</id>
  <formats>
    <format>tar.gz</format>
    <!--format>tar.bz2</format-->  <!-- to speed up builds -->
    <format>zip</format>
  </formats>
  
  <includeBaseDirectory>true</includeBaseDirectory>
  
  <baseDirectory>/uimafit-${project.version}</baseDirectory>
    
  <dependencySets>
    <!-- uimaFIT artifacts -->
    <dependencySet>
      <useProjectArtifact>false</useProjectArtifact>
      <outputDirectory>lib</outputDirectory>
      <unpack>false</unpack>
      <useTransitiveFiltering>true</useTransitiveFiltering>
      <excludes>
        <!-- 
         - This is excluded here and not in the poms in order to avoid unwanted side-effects
         - on users' dependencies when uimaFIT is used.
         -->
        <exclude>org.springframework:spring-aop</exclude>
        <exclude>aopalliance:aopalliance</exclude>
        <exclude>org.apache.uima:uimafit-cpe</exclude>
        <exclude>org.apache.uima:uimafit-legacy-support</exclude>
      </excludes>
    </dependencySet>
    
    <!-- uimaFIT extra artifact -->
    <dependencySet>
      <useProjectArtifact>false</useProjectArtifact>
      <outputDirectory>extras</outputDirectory>
      <unpack>false</unpack>
      <useTransitiveFiltering>true</useTransitiveFiltering>
      <includes>
        <include>org.apache.uima:uimafit-cpe</include>
        <include>org.apache.uima:uimafit-legacy-support</include>
      </includes>
    </dependencySet>
  </dependencySets>  
    
  <!-- Add other files - scripts, documentation, examples -->
  <fileSets>
    <!-- copy bin distr license and notice -->
    <fileSet>
      <directory>src/main/readme</directory>
      <outputDirectory></outputDirectory>
      <fileMode>644</fileMode>
      <directoryMode>755</directoryMode>      
    </fileSet>
    
    <!-- copy standard top level files -->        
    <fileSet>
      <directory>.</directory>
      <outputDirectory></outputDirectory>
      <fileMode>644</fileMode>
      <directoryMode>755</directoryMode> 
      <includes>
        <include>README*</include>
        <include>readme*</include>
        <include>RELEASE_NOTES*</include>
        <include>Release-Notes*</include>
        <include>issuesFixed/**</include>      
      </includes>       
    </fileSet>

    <!-- copy files specific to the binary release -->        
    <fileSet>
      <directory>src/main/dist-bin</directory>
      <outputDirectory></outputDirectory>
      <fileMode>644</fileMode>
      <directoryMode>755</directoryMode> 
      <includes>
        <!-- 
          - Binary distribution includes binaries from the Spring Framework, thus there are special
          - LICENSE and NOTICE files for the binary distribution.
          -->
        <include>LICENSE*</include>
        <include>NOTICE*</include>
      </includes>       
    </fileSet>
    
    <fileSet>
      <directory>target/site/apidocs</directory>
      <outputDirectory>docs/d/api</outputDirectory>
      <excludes>
        <exclude>options</exclude>
        <exclude>packages</exclude>
        <exclude>files</exclude>
        <exclude>argfile</exclude>        
      </excludes>
      <fileMode>444</fileMode>
      <directoryMode>755</directoryMode>        
    </fileSet>

    <!-- examples -->
    <fileSet>
      <directory>uimafit-examples/src/main/java</directory>
      <outputDirectory>examples/src</outputDirectory>
      <fileMode>644</fileMode>
      <directoryMode>755</directoryMode>        
    </fileSet>
    <fileSet>
      <directory>uimafit-examples/src/main/resources</directory>
      <outputDirectory>examples/src</outputDirectory>
      <fileMode>644</fileMode>
      <directoryMode>755</directoryMode>        
    </fileSet>

    <!-- docbooks -->
    <fileSet>
      <directory>uimafit-docbook/target/site/</directory>
      <outputDirectory>docs</outputDirectory>
      <fileMode>644</fileMode>
      <directoryMode>755</directoryMode>        
    </fileSet>
  </fileSets>
</assembly>