<?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>src</id>
    <formats>
        <format>tar.gz</format>
    </formats>
    <fileSets>
        <!-- Copy license and other files from root -->
        <fileSet>
            <directory>${basedir}/..</directory>
            <outputDirectory>/</outputDirectory>
            <includes>
                <include>BUILDING.txt</include>
                <include>README.txt</include>
                <include>RELEASE*.txt</include>
            </includes>
            <lineEnding>unix</lineEnding>
        </fileSet>

        <!-- Binary Files -->
        <fileSet>
            <directory>${basedir}/..</directory>
            <outputDirectory>src</outputDirectory>
            <includes>
                <include>**/*.jpeg</include>
                <include>**/*.jpg</include>
                <include>**/*.gif</include>
                <include>**/*.png</include>
                <include>**/*.exe</include>
                <include>**/*.dll</include>
                <include>**/*.jar</include>
                <include>**/*.so</include>
                <include>**/*.ks</include>
                <include>**/*.ts</include>
                <include>**/*.keystore</include>
                <include>**/*.bin</include>
                <include>**/*.jnilib</include>
                <include>**/*.cert</include>
                <include>apache-servicemix/src/main/release/bin/*/wrapper</include>
            </includes>
            <excludes>
                <exclude>**/eclipse-classes/**</exclude>
                <exclude>**/target/**</exclude>
            </excludes>
        </fileSet>

        <!-- Text Files -->
        <fileSet>
            <directory>${basedir}/..</directory>
            <outputDirectory>src</outputDirectory>
            <includes>
                <include>**/*</include>
            </includes>
            <excludes>
                <exclude>**/*.jpeg</exclude>
                <exclude>**/*.jpg</exclude>
                <exclude>**/*.gif</exclude>
                <exclude>**/*.png</exclude>
                <exclude>**/*.exe</exclude>
                <exclude>**/*.dll</exclude>
                <exclude>**/*.jar</exclude>
                <exclude>**/*.so</exclude>
                <exclude>**/*.ks</exclude>
                <exclude>**/*.ts</exclude>
                <exclude>**/*.keystore</exclude>
                <exclude>**/*.bin</exclude>
                <exclude>**/*.jnilib</exclude>
                <exclude>**/*.cert</exclude>
                <exclude>apache-servicemix/src/main/release/bin/*/wrapper</exclude>
                <exclude>**/target/**</exclude>
                <exclude>**/build/**</exclude>
                <exclude>activemq-data/**</exclude>
                <exclude>*/activemq-data/**</exclude>
                <exclude>**/eclipse-classes/**</exclude>
                <exclude>**/.*</exclude>
                <exclude>**/.*/**</exclude>

                <exclude>**/surefire*</exclude>
                <exclude>**/svn-commit*</exclude>

                <exclude>**/*.iml</exclude>
                <exclude>**/*.ipr</exclude>
                <exclude>**/*.iws</exclude>

                <exclude>**/cobertura.ser</exclude>

            </excludes>
            <lineEnding>unix</lineEnding>
        </fileSet>
    </fileSets>
    <files>
        <file>
            <source>${basedir}/target/maven-shared-archive-resources/META-INF/LICENSE</source>
            <outputDirectory>/</outputDirectory>
            <destName>LICENSE.txt</destName>
            <fileMode>0644</fileMode>
            <lineEnding>unix</lineEnding>
        </file>
        <file>
            <source>${basedir}/target/maven-shared-archive-resources/META-INF/NOTICE</source>
            <outputDirectory>/</outputDirectory>
            <destName>NOTICE.txt</destName>
            <fileMode>0644</fileMode>
            <lineEnding>unix</lineEnding>
        </file>
    </files>
</assembly>
