<?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.
-->
<component>
    <fileSets>
      <!-- Copy over kernel demo to examples folder -->
      <fileSet>
          <directory>target/dependencies/win/apache-karaf-${karaf.version}/demos</directory>
          <outputDirectory>/examples/karaf</outputDirectory>
          <lineEnding>dos</lineEnding>
      </fileSet>

      <!-- Copy over the examples -->
      <fileSet>
          <directory>${basedir}/../../examples</directory>
          <outputDirectory>/examples/</outputDirectory>
          <lineEnding>dos</lineEnding>
          <includes>
              <include>activemq/**</include>
              <include>activiti/**</include>
              <include>camel/**</include>
              <include>cxf/**</include>
          </includes>
          <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>
          </excludes>
      </fileSet>

        <fileSet>
            <directory>${basedir}/../../examples</directory>
            <outputDirectory>/examples</outputDirectory>
            <lineEnding>dos</lineEnding>
            <filtered>true</filtered>
            <fileMode>0644</fileMode>
            <includes>
                <include>README.txt</include>
                <include>activemq/**/README.txt</include>
                <include>activiti/**/README.txt</include>
                <include>camel/**/README.txt</include>
                <include>cxf/**/README.txt</include>
            </includes>
        </fileSet>
    </fileSets>

    <files>
        <file>
            <source>${basedir}/target/shared/pom.xml</source>
            <outputDirectory>/examples/</outputDirectory>
            <filtered>true</filtered>
            <fileMode>0644</fileMode>
            <lineEnding>dos</lineEnding>
        </file>
    </files>

</component>
