<?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>atlas-plugin</id>
  <formats>
     <format>tar.gz</format>
	 <format>zip</format>
  </formats>
  <baseDirectory>${project.name}-${project.version}-atlas-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-atlas-plugin-shim</include>	  							 
	  <include>org.apache.ranger:ranger-plugin-classloader</include>
      </includes>
    </moduleSet>
    
    <moduleSet>
     <binaries>
        <includeDependencies>true</includeDependencies>
        <unpack>false</unpack>
	    <directoryMode>755</directoryMode>
	    <fileMode>644</fileMode>
        <dependencySets>
            <dependencySet>
                <outputDirectory>/lib/ranger-atlas-plugin-impl</outputDirectory>
                <includes>
                    <include>org.eclipse.persistence:eclipselink</include>
                    <include>org.eclipse.persistence:javax.persistence</include>
                    <include>com.sun.jersey:jersey-bundle</include>
                    <include>com.google.guava:guava:jar:${google.guava.version}</include>
                    <include>org.codehaus.jackson:jackson-jaxrs</include>
                    <include>org.apache.httpcomponents:httpmime:jar:${httpcomponents.httpmime.version}</include>
                    <include>org.apache.solr:solr-solrj</include>
                    <include>org.apache.ranger:ranger-plugins-audit</include>
                    <include>org.apache.ranger:ranger-plugins-cred</include>
                    <include>org.apache.ranger:ranger-plugins-common</include>
		    	</includes>
                <unpack>false</unpack>
            </dependencySet>
            <dependencySet>
						<outputDirectory>/install/lib</outputDirectory>
						<unpack>false</unpack>
						<directoryMode>755</directoryMode>
						<fileMode>644</fileMode>
						<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:jar:${commons.lang.version}</include>
							<include>commons-logging:commons-logging</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.apache.ranger:ranger-plugins-cred</include>
							<include>org.apache.ranger:credentialbuilder</include>
						</includes>
			</dependencySet>
        </dependencySets>
        <outputDirectory>/lib/ranger-atlas-plugin-impl</outputDirectory>
     </binaries>
     <includes>
		<include>org.apache.ranger:ranger-atlas-plugin</include>
     </includes>
    </moduleSet>
    <moduleSet>
     <binaries>
        <includeDependencies>false</includeDependencies>
        <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>
  </moduleSets> 	
  <fileSets>
   <!-- conf.templates for enable -->
    <fileSet>
        <outputDirectory>/install/conf.templates/enable</outputDirectory>
        <directory>plugin-atlas/conf</directory>
        <excludes>
            <exclude>*.sh</exclude>
        </excludes>
        <fileMode>700</fileMode>
    </fileSet>
    <fileSet>
        <outputDirectory>/install/conf.templates/default</outputDirectory>
        <directory>plugin-atlas/template</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>agents-common/scripts/enable-agent.sh</source>
        <outputDirectory>/</outputDirectory>
        <destName>enable-atlas-plugin.sh</destName>
        <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-atlas-plugin.sh</destName>
        <fileMode>755</fileMode>
    </file>
    <file>
        <source>plugin-atlas/scripts/install.properties</source>
        <outputDirectory>/</outputDirectory>
        <destName>install.properties</destName>
        <fileMode>755</fileMode>
    </file>
  </files>
</assembly>
