<?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.name}-${project.version}-hdfs-plugin</baseDirectory>
  <includeBaseDirectory>true</includeBaseDirectory>
  <moduleSets>
    
    <moduleSet>
     <binaries>
        <includeDependencies>false</includeDependencies>
        <unpack>false</unpack>
	    <directoryMode>755</directoryMode>
	    <fileMode>644</fileMode>
  	    <outputDirectory>/lib</outputDirectory>
     </binaries>
     <includes>
	  <include>org.apache.ranger:ranger-hdfs-plugin-shim</include>
	  <include>org.apache.ranger:ranger-plugin-classloader</include>
      </includes>
    </moduleSet>
    
    <moduleSet>
     <binaries>
        <includeDependencies>true</includeDependencies>
  		<dependencySets>
                <dependencySet>
                    <outputDirectory>/install/lib</outputDirectory>
                    <unpack>false</unpack>
                    <includes>
                        <include>commons-cli:commons-cli</include>
                        <include>commons-collections:commons-collections</include>
                        <include>commons-configuration:commons-configuration: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-common.version}</include>
                        <include>org.apache.hadoop:hadoop-auth:jar:${hadoop-common.version}</include>
                    </includes>
                </dependencySet>
  		</dependencySets>
        <outputDirectory>/install/lib</outputDirectory>
        <unpack>false</unpack>
     </binaries>
     <includes>
		<include>org.apache.ranger:ranger-plugins-installer</include>
        <include>org.apache.ranger:credentialbuilder</include>
     </includes>
    </moduleSet>
    
    <moduleSet>
     <binaries>
        <includeDependencies>true</includeDependencies>
        <unpack>false</unpack>
	    <directoryMode>755</directoryMode>
	    <fileMode>644</fileMode>
  		<dependencySets>
   			<dependencySet>
     			<outputDirectory>/lib/ranger-hdfs-plugin-impl</outputDirectory>
				<includes>
					<include>com.google.code.gson:gson*</include>
					<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>
				</includes>
				<unpack>false</unpack>
  			</dependencySet>
  		</dependencySets>
        <outputDirectory>/lib/ranger-hdfs-plugin-impl</outputDirectory>
     </binaries>
    <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>
    </moduleSet>
    
  </moduleSets> 	
  <fileSets>
    <!-- conf.templates for enable -->
	<fileSet>
		<outputDirectory>/install/conf.templates/enable</outputDirectory>
		<directory>hdfs-agent/conf</directory>
		<excludes>
			<exclude>*.sh</exclude>
		</excludes>
		<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>agents-common/scripts/enable-agent.sh</source>
		<outputDirectory>/</outputDirectory>
		<destName>enable-hdfs-plugin.sh</destName>
		<fileMode>755</fileMode>
	</file>
	<file>
		<source>agents-common/scripts/upgrade-plugin.sh</source>
		<outputDirectory>/</outputDirectory>
		<destName>upgrade-hdfs-plugin.sh</destName>
		<fileMode>755</fileMode>
	</file>
	<file>
		<source>agents-common/scripts/upgrade-plugin.py</source>
		<outputDirectory>/</outputDirectory>
		<fileMode>755</fileMode>
	</file>
	<file>
		<source>security-admin/scripts/ranger_credential_helper.py</source>
	  <outputDirectory>/</outputDirectory>
	  <fileMode>755</fileMode>
	</file>
	<file>
		<source>agents-common/scripts/enable-agent.sh</source>
		<outputDirectory>/</outputDirectory>
		<destName>disable-hdfs-plugin.sh</destName>
		<fileMode>755</fileMode>
	</file>
	<file>
		<source>hdfs-agent/scripts/install.properties</source>
		<outputDirectory>/</outputDirectory>
		<destName>install.properties</destName>
		<fileMode>755</fileMode>
	</file>
  </files>
</assembly>
