<?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 website docs
    <fileSet>
      <directory>${basedir}/target/website</directory>
      <outputDirectory>/doc/website</outputDirectory>
    </fileSet>
    -->

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

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

    <!-- copy the examples -->
    <fileSet>
      <directory>../examples</directory>
      <outputDirectory>/examples</outputDirectory>
      <excludes>
        <!-- disable build, IDEA and Eclipse files -->
        <exclude>**/*.i*</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 over jar files -->
    <fileSet>
      <directory>target</directory>
      <outputDirectory>/</outputDirectory>
      <includes>
        <include>${pom.artifactId}-${pom.version}.jar</include>
      </includes>
    </fileSet>
    <fileSet>
      <directory>target</directory>
      <outputDirectory>/bin</outputDirectory>
      <includes>
        <include>run.jar</include>
      </includes>
    </fileSet>
  </fileSets>

  <dependencySets>
    <dependencySet>
      <outputDirectory>/lib</outputDirectory>
      <unpack>false</unpack>
      <scope>runtime</scope>
      <includes>
        <include>org.apache.camel:camel-amqp</include>
        <include>org.apache.camel:camel-atom</include>
        <include>org.apache.camel:camel-bam</include>
        <include>org.apache.camel:camel-core</include>
        <include>org.apache.camel:camel-csv</include>
        <include>org.apache.camel:camel-cxf</include>
        <include>org.apache.camel:camel-ftp</include>
        <include>org.apache.camel:camel-groovy</include>
        <include>org.apache.camel:camel-hamcrest</include>
        <include>org.apache.camel:camel-http</include>
        <include>org.apache.camel:camel-ibatis</include>
        <include>org.apache.camel:camel-irc</include>
        <include>org.apache.camel:camel-jaxb</include>
        <include>org.apache.camel:camel-jcr</include>
        <include>org.apache.camel:camel-jdbc</include>
        <include>org.apache.camel:camel-jetty</include>
        <include>org.apache.camel:camel-jhc</include>
        <include>org.apache.camel:camel-jing</include>
        <include>org.apache.camel:camel-jms</include>
        <include>org.apache.camel:camel-josql</include>
        <include>org.apache.camel:camel-jpa</include>
        <include>org.apache.camel:camel-juel</include>
        <include>org.apache.camel:camel-jxpath</include>
        <include>org.apache.camel:camel-mail</include>
        <include>org.apache.camel:camel-mina</include>
        <include>org.apache.camel:camel-msv</include>
        <include>org.apache.camel:camel-ognl</include>
        <include>org.apache.camel:camel-osgi</include>
        <include>org.apache.camel:camel-quartz</include>
        <include>org.apache.camel:camel-rmi</include>
        <include>org.apache.camel:camel-saxon</include>
        <include>org.apache.camel:camel-scala</include>
        <include>org.apache.camel:camel-script</include>
        <include>org.apache.camel:camel-spring</include>
        <include>org.apache.camel:camel-spring-integration</include>
        <include>org.apache.camel:camel-sql</include>
        <include>org.apache.camel:camel-stream</include>
        <include>org.apache.camel:camel-stringtemplate</include>
        <include>org.apache.camel:camel-swing</include>
        <include>org.apache.camel:camel-uface</include>
        <include>org.apache.camel:camel-velocity</include>
        <include>org.apache.camel:camel-xmlbeans</include>
        <include>org.apache.camel:camel-xmpp</include>
        <include>org.apache.camel:camel-xstream</include>
        <include>commons-logging:commons-logging</include>
        <include>javax.xml.bind:jaxb-api</include>
        <include>javax.activation:activation</include>
        <include>javax.xml.stream:stax-api</include>
        <include>com.sun.xml.bind:jaxb-impl</include>
        <!--<include>stax:stax-api</include>-->
        <include>org.springframework:spring-beans</include>
        <include>org.springframework:spring-context</include>
        <include>org.springframework:spring-core</include>
        <include>org.springframework:spring-test</include>
        <include>org.springframework:spring-web</include>
      </includes>
    </dependencySet>
    <dependencySet>
      <outputDirectory>/lib/optional</outputDirectory>
      <unpack>false</unpack>
      <scope>runtime</scope>
      <includes>
        <include>${pom.groupId}:apache-activemq</include>
        <include>commons-beanutils:commons-beanutils</include>
        <include>commons-collections:commons-collections</include>
        <include>commons-httpclient:commons-httpclient</include>
        <include>commons-dbcp:commons-dbcp</include>
        <include>commons-pool:commons-pool</include>
        <include>log4j:log4j</include>
        <include>org.apache.geronimo.specs:geronimo-j2ee-management_1.0_spec</include>
        <include>org.apache.geronimo.specs:geronimo-jms_1.1_spec</include>
        <include>org.apache.geronimo.specs:geronimo-j2ee-jacc_1.0_spec</include>
        <include>org.apache.geronimo.specs:geronimo-j2ee-connector_1.5_spec</include>
        <include>org.apache.xbean:xbean-spring</include>
      </includes>
    </dependencySet>
  </dependencySets>
</assembly>
