<?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>bin</id>
    <formats>
        <format>zip</format>
    </formats>
    <includeBaseDirectory>false</includeBaseDirectory>
    <fileSets>
        <fileSet>
            <directory>../artifacts/</directory>
            <outputDirectory>${project.artifactId}-${project.version}</outputDirectory>
            <includes>
                <include>**/*.xml</include>
            </includes>
            <excludes>
                <exclude>pom.xml</exclude>
                <exclude>src/**</exclude>
            </excludes>
        </fileSet>
    </fileSets>
    <files>
        <file>
            <source>${project.basedir}/README.md</source>
            <outputDirectory>${project.artifactId}-${project.version}</outputDirectory>
            <filtered>true</filtered>
            <fileMode>644</fileMode>
        </file>
        <file>
            <source>src/main/notice/NOTICE</source>
            <outputDirectory>${project.artifactId}-${project.version}</outputDirectory>
            <filtered>true</filtered>
            <fileMode>644</fileMode>
        </file>
        <file>
            <source>src/main/license/LICENSE</source>
            <outputDirectory>${project.artifactId}-${project.version}</outputDirectory>
            <filtered>true</filtered>
            <fileMode>644</fileMode>
        </file>
    </files>
    <dependencySets>
        <dependencySet>
            <outputDirectory>${project.artifactId}-${project.version}/lib</outputDirectory>
            <includes>
                <include>org.apache.stratos:org.apache.stratos.cep300.extension:jar</include>
                <include>org.apache.stratos:org.apache.stratos.cep.310.extension:jar</include>
            </includes>
        </dependencySet>
    </dependencySets>
</assembly>