<?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:${atlas.guava.version}</include>
                    <include>org.codehaus.jackson:jackson-jaxrs</include>
                    <include>org.apache.httpcomponents:httpmime:jar:${httpcomponents.httpmime.version}</include>
                    <include>org.apache.hadoop:hadoop-hdfs:jar:${hadoop.version}</include>
                    <include>org.apache.solr:solr-solrj</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:${atlas.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-plugins-audit</include>
		<include>org.apache.ranger:ranger-plugins-cred</include>
		<include>org.apache.ranger:ranger-plugins-common</include>
		<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>
