<?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>apache-servicemix</id>

    <formats>
        <format>tar.gz</format>
    </formats>

    <baseDirectory>apache-servicemix-${version}</baseDirectory>

    <componentDescriptors>
        <componentDescriptor>target/shared/common-bin.xml</componentDescriptor>
        <componentDescriptor>target/shared/common-unix-bin.xml</componentDescriptor>
    </componentDescriptors>

    <fileSets>
       <!-- Copy over ant task definition files -->
       <fileSet>
            <directory>target/shared/ant</directory>
            <outputDirectory>/ant</outputDirectory>
            <lineEnding>unix</lineEnding>
       </fileSet>

        <!-- Copy over karaf demos to examples folder -->
        <fileSet>
            <directory>target/dependencies/unix/apache-karaf-${karaf.version}/demos</directory>
            <outputDirectory>/examples/karaf</outputDirectory>
            <lineEnding>unix</lineEnding>
        </fileSet>

        <!-- Copy over all the examples (incl. the NMR and JBI ones) -->
        <fileSet>
            <directory>${basedir}/../../examples</directory>
            <outputDirectory>/examples/</outputDirectory>
            <lineEnding>unix</lineEnding>
            <excludes>
                <exclude>pom.xml</exclude>
                <!-- we need add filtered README.txt, so exclude the raw one here -->
                <exclude>**/README.txt</exclude>
                <!-- exclude build output/IDE config/... files -->
                <exclude>**/target/**</exclude>
                <exclude>**/.classpath</exclude>
                <exclude>**/.project</exclude>
                <exclude>**/.settings/**</exclude>
                <exclude>**/*.i??</exclude>
                <!-- exclude these 3 failing demos -->
                <exclude>**/wsdl-first/**</exclude>
                <exclude>**/loan-broker-bpel/**</exclude>
                <exclude>**/web/**</exclude>
            </excludes>
        </fileSet>

        <fileSet>
            <directory>${basedir}/../../examples</directory>
            <outputDirectory>/examples/</outputDirectory>
            <lineEnding>unix</lineEnding>
            <filtered>true</filtered>
            <fileMode>0644</fileMode>
            <excludes>
                <exclude>README.txt</exclude>  <!-- don't include the main README.txt file -->
            </excludes>
            <includes>
                <include>**/README.txt</include>
            </includes>
        </fileSet>
    </fileSets>

    <!-- pick a pom.xml and README.txt file that includes the NMR and JBI examples -->
    <files>
        <file>
            <source>${basedir}/target/classes/pom.xml</source>
            <outputDirectory>/examples/</outputDirectory>
            <filtered>true</filtered>
            <fileMode>0644</fileMode>
            <lineEnding>unix</lineEnding>
        </file>
        <file>
            <source>${basedir}/target/classes/README.txt</source>
            <outputDirectory>/examples/</outputDirectory>
            <filtered>true</filtered>
            <fileMode>0644</fileMode>
            <lineEnding>unix</lineEnding>
        </file>
    </files>

</assembly>
