<?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>hdfs-plugin</id>
  <formats>
     <format>tar.gz</format>
     <format>zip</format>
  </formats>
  <baseDirectory>${project.parent.name}-${project.version}-hdfs-plugin</baseDirectory>
  <includeBaseDirectory>true</includeBaseDirectory>
  <moduleSets>
    <moduleSet>
      <useAllReactorProjects>true</useAllReactorProjects>
      <includes>
        <include>org.apache.ranger:ranger-hdfs-plugin-shim</include>
        <include>org.apache.ranger:ranger-plugin-classloader</include>
      </includes>
      <binaries>
        <outputDirectory>lib</outputDirectory>
        <includeDependencies>false</includeDependencies>
        <unpack>false</unpack>
        <directoryMode>755</directoryMode>
        <fileMode>644</fileMode>
     </binaries>
    </moduleSet>
    
    <moduleSet>
      <useAllReactorProjects>true</useAllReactorProjects>
      <includes>
        <include>org.apache.ranger:ranger-plugins-installer</include>
        <include>org.apache.ranger:credentialbuilder</include>
      </includes>
      <binaries>
        <outputDirectory>install/lib</outputDirectory>
        <includeDependencies>true</includeDependencies>
        <unpack>false</unpack>
        <includes>
          <include>commons-cli:commons-cli</include>
          <include>commons-collections:commons-collections</include>
          <include>org.apache.commons:commons-configuration2:jar:${commons.configuration.version}</include>
          <include>commons-io:commons-io:jar:${commons.io.version}</include>
          <include>commons-lang:commons-lang</include>
          <include>commons-logging:commons-logging:jar:${commons.logging.version}</include>
          <include>com.google.guava:guava:jar:${google.guava.version}</include>
          <include>org.slf4j:slf4j-api:jar:${slf4j-api.version}</include>
          <include>org.apache.hadoop:hadoop-common:jar:${hadoop.version}</include>
          <include>org.apache.hadoop:hadoop-auth:jar:${hadoop.version}</include>
          <include>org.codehaus.woodstox:stax2-api</include>
          <include>com.fasterxml.woodstox:woodstox-core</include>
          <include>org.apache.htrace:htrace-core4</include>
        </includes>
     </binaries>
    </moduleSet>
    
    <moduleSet>
      <useAllReactorProjects>true</useAllReactorProjects>
      <includes>
        <include>org.apache.ranger:ranger-plugins-audit</include>
        <include>org.apache.ranger:ranger-plugins-cred</include>
        <include>org.apache.ranger:ranger-plugins-common</include>
        <include>org.apache.ranger:ranger-hdfs-plugin</include>
      </includes>
      <binaries>
        <outputDirectory>lib/ranger-hdfs-plugin-impl</outputDirectory>
        <includeDependencies>true</includeDependencies>
        <unpack>false</unpack>
        <directoryMode>755</directoryMode>
        <fileMode>644</fileMode>
        <includes>
          <include>org.eclipse.persistence:javax.persistence</include>
          <include>org.eclipse.persistence:eclipselink</include>
          <include>org.apache.httpcomponents:httpmime:jar:${httpcomponents.httpmime.version}</include>
          <include>org.apache.httpcomponents:httpclient:jar:${httpcomponents.httpclient.version}</include>
          <include>org.apache.httpcomponents:httpcore:jar:${httpcomponents.httpcore.version}</include>
          <include>org.noggit:noggit:jar:${noggit.version}</include>
          <include>org.apache.solr:solr-solrj</include>
          <include>com.kstruct:gethostname4j:jar:${kstruct.gethostname4j.version}</include>
          <include>net.java.dev.jna:jna:jar:${jna.version}</include>
          <include>net.java.dev.jna:jna-platform:jar:${jna-platform.version}</include>
        </includes>
      </binaries>
    </moduleSet>
  </moduleSets>

  <fileSets>
    <!-- conf.templates for enable -->
    <fileSet>
        <outputDirectory>install/conf.templates/enable</outputDirectory>
        <directory>${project.parent.basedir}/hdfs-agent/conf</directory>
        <excludes>
            <exclude>*.sh</exclude>
        </excludes>
        <fileMode>700</fileMode>
    </fileSet>
    <fileSet>
        <outputDirectory>install/conf.templates/disable</outputDirectory>
        <directory>${project.parent.basedir}/hdfs-agent/disable-conf</directory>
        <fileMode>700</fileMode>
    </fileSet>
    <!-- version file -->
    <fileSet>
        <outputDirectory></outputDirectory>
        <directory>${project.build.outputDirectory}</directory>
        <includes>
            <include>version</include>
        </includes>
        <fileMode>444</fileMode>
    </fileSet>
  </fileSets>
  <!-- enable/disable script for plugin -->
  <files>
    <file>
        <source>${project.parent.basedir}/agents-common/scripts/enable-agent.sh</source>
        <outputDirectory></outputDirectory>
        <destName>enable-hdfs-plugin.sh</destName>
        <fileMode>755</fileMode>
    </file>
    <file>
        <source>${project.parent.basedir}/agents-common/scripts/upgrade-plugin.sh</source>
        <outputDirectory></outputDirectory>
        <destName>upgrade-hdfs-plugin.sh</destName>
        <fileMode>755</fileMode>
    </file>
    <file>
        <source>${project.parent.basedir}/agents-common/scripts/upgrade-plugin.py</source>
        <outputDirectory></outputDirectory>
        <fileMode>755</fileMode>
    </file>
    <file>
        <source>${project.parent.basedir}/security-admin/scripts/ranger_credential_helper.py</source>
      <outputDirectory></outputDirectory>
      <fileMode>755</fileMode>
    </file>
    <file>
        <source>${project.parent.basedir}/agents-common/scripts/enable-agent.sh</source>
        <outputDirectory></outputDirectory>
        <destName>disable-hdfs-plugin.sh</destName>
        <fileMode>755</fileMode>
    </file>
    <file>
        <source>${project.parent.basedir}/hdfs-agent/scripts/install.properties</source>
        <outputDirectory></outputDirectory>
        <destName>install.properties</destName>
        <fileMode>755</fileMode>
    </file>
  </files>
</assembly>
