<?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>windows-bin</id>
  <formats>
    <format>zip</format>
  </formats>
  
  <fileSets>
    <!-- Copy over everything that needs to get dos line endings -->
    <fileSet>
      <directory>src/main/release</directory>
      <outputDirectory></outputDirectory>
      <excludes>
        <!--<exclude>bin/**</exclude>-->
      </excludes>
      <lineEnding>dos</lineEnding>
    </fileSet>

    <!-- copy the examples -->
    <fileSet>
      <directory>../examples</directory>
      <outputDirectory>${file.separator}examples</outputDirectory>
      <excludes>
        <!-- disable build, IDEA and Eclipse files -->
        <exclude>**/*.i??</exclude>
        <exclude>**/.idea/**</exclude>
        <exclude>**/eclipse-classes/**</exclude>
        <exclude>**/.project</exclude>
        <exclude>**/.classpath</exclude>
        <exclude>**/target/</exclude>
        <exclude>**/target/*</exclude>
        <exclude>**/*.ser</exclude>
        <exclude>**/*.log</exclude>
      </excludes>
      <lineEnding>dos</lineEnding>
    </fileSet>

    <!-- copy the manual docs -->
    <fileSet>
      <directory>${basedir}/../tooling/camel-manual/target/site/manual/</directory>
      <outputDirectory>${file.separator}doc${file.separator}manual</outputDirectory>
      <includes>
        <include>*.html</include>
      </includes>
    </fileSet>

   <!-- copy the java docs -->
   <fileSet>
    <directory>${basedir}/target/javadoc/</directory>
      <outputDirectory>${file.separator}doc${file.separator}javadoc</outputDirectory>
      <includes>
        <include>**/**</include>
      </includes>
   </fileSet>
  </fileSets>

  <componentDescriptors>
    <componentDescriptor>src/main/descriptors/common-bin.xml</componentDescriptor>
  </componentDescriptors>  
    
</assembly>
