<?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>zip</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>dos</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>dos</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>
