<!--

    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.

-->
<!DOCTYPE assembly [
        <!ELEMENT assembly (id|includeBaseDirectory|baseDirectory|formats|fileSets|dependencySets)*>
        <!ELEMENT id (#PCDATA)>
        <!ELEMENT includeBaseDirectory (#PCDATA)>
        <!ELEMENT baseDirectory (#PCDATA)>
        <!ELEMENT formats (format)*>
        <!ELEMENT format (#PCDATA)>
        <!ELEMENT fileSets (fileSet)*>
        <!ELEMENT fileSet (directory|outputDirectory|fileMode|includes)*>
        <!ELEMENT directory (#PCDATA)>
        <!ELEMENT outputDirectory (#PCDATA)>
        <!ELEMENT includes (include)*>
        <!ELEMENT include (#PCDATA)>
        <!ELEMENT dependencySets (dependencySet)*>
        <!ELEMENT dependencySet (outputDirectory|outputFileNameMapping|includes)*>
        ]>
<assembly>
    <id>bin</id>
    <includeBaseDirectory>true</includeBaseDirectory>
    <baseDirectory>${standalone.service.dist.name}</baseDirectory>
    <formats>
        <format>tar.gz</format>
        <format>zip</format>
    </formats>

    <fileSets>
        <fileSet>
            <directory>src/main/resources/distribution/bin</directory>
            <outputDirectory>bin</outputDirectory>
            <fileMode>777</fileMode>
            <includes>
                <include>*.sh</include>
            </includes>
        </fileSet>
        <fileSet>
            <directory>../plugins</directory>
            <outputDirectory>plugins</outputDirectory>
            <includes>
                <include>*.zip</include>
            </includes>
        </fileSet>
        <fileSet>
            <directory>src/main/resources/distribution/conf</directory>
            <outputDirectory>conf</outputDirectory>
            <includes>
                <include>application.properties</include>
                <include>log4j2.xml</include>
                <include>applicationContext.xml</include>
                <include>resources.json</include>
            </includes>
        </fileSet>
        <fileSet>
            <directory>./</directory>
            <outputDirectory>logs</outputDirectory>
            <excludes>
                <exclude>*/**</exclude>
            </excludes>
        </fileSet>
        <fileSet>
            <directory>target</directory>
            <outputDirectory>lib</outputDirectory>
            <includes>
                <include>*.jar</include>
            </includes>
        </fileSet>
        <fileSet>
            <directory>../services/resource-service/server/src/main/resources/distribution/conf</directory>
            <outputDirectory>conf</outputDirectory>
            <includes>
                <include>resource-service-application.properties</include></includes>
        </fileSet>
        <fileSet>
            <directory>../services/secret-service/server/src/main/resources/distribution/conf</directory>
            <outputDirectory>conf</outputDirectory>
            <includes>
                <include>secret-service-application.properties</include></includes>
        </fileSet>
    </fileSets>

    <dependencySets>
        <dependencySet>
            <useProjectArtifact>false</useProjectArtifact>
            <outputDirectory>lib</outputDirectory>
            <includes>
                <include>*</include>
            </includes>
        </dependencySet>
    </dependencySets>
</assembly>
