<?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>kms-plugin</id>
  <formats>
     <format>tar.gz</format>
	 <format>zip</format>
  </formats>
  <baseDirectory>${project.name}-${project.version}-kms-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-kms-plugin-shim</include>
	  <include>org.apache.ranger:ranger-plugin-classloader</include>
      </includes>
  	</moduleSet>
    <moduleSet>
     <binaries>
        <includeDependencies>false</includeDependencies>
        <unpack>false</unpack>
	    <directoryMode>755</directoryMode>
	    <fileMode>644</fileMode>
        <dependencySets>
            <dependencySet>
                <outputDirectory>/lib/ranger-kms-plugin-impl</outputDirectory>
                <unpack>false</unpack>
                <includes>
                    <include>commons-configuration:commons-configuration:jar:${commons.pool.version}</include>
                    <include>org.apache.hadoop:hadoop-common:jar:${hadoop.version}</include>
                    <include>com.google.code.gson:gson</include>
                    <include>org.eclipse.persistence:eclipselink</include>
                    <include>org.eclipse.persistence:javax.persistence</include>
                    <include>commons-collections:commons-collections</include>
		    <include>commons-logging:commons-logging:jar:${commons.logging.version}</include>
                    <include>com.google.guava:guava:jar:${google.guava.version}</include>
		    <include>org.apache.httpcomponents:httpclient:jar:${httpcomponents.httpclient.version}</include>
		    <include>org.apache.httpcomponents:httpcore:jar:${httpcomponents.httpcore.version}</include>
		    <include>org.apache.httpcomponents:httpmime:jar:${httpcomponents.httpmime.version}</include>
		    <include>org.noggit:noggit:jar:${noggit.version}</include>
		    <include>org.apache.zookeeper:zookeeper:jar:${zookeeper.version}</include>
		    <include>org.apache.solr:solr-solrj</include>
                </includes>
            </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.pool.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: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.apache.ranger:ranger-plugins-cred</include>
			<include>org.apache.ranger:credentialbuilder</include>
                    </includes>
            </dependencySet>
        </dependencySets>
        <outputDirectory>/lib/ranger-kms-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-kms-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-kms/conf</directory>
        <excludes>
            <exclude>*.sh</exclude>
        </excludes>
        <fileMode>700</fileMode>
    </fileSet>
    <fileSet>
        <outputDirectory>/install/conf.templates/disable</outputDirectory>
        <directory>plugin-kms/disable-conf</directory>
        <fileMode>700</fileMode>
    </fileSet>
    <fileSet>
        <outputDirectory>/install/conf.templates/default</outputDirectory>
        <directory>plugin-kms/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-kms-plugin.sh</destName>
        <fileMode>755</fileMode>
    </file>    
    <file>
        <source>plugin-kms/scripts/install.properties</source>
        <outputDirectory>/</outputDirectory>
        <destName>install.properties</destName>
        <fileMode>755</fileMode>
    </file>
    <file>
        <source>plugin-kms/scripts/kms-plugin-install.properties</source>
        <outputDirectory>/</outputDirectory>
        <destName>kms-plugin-install.properties</destName>
        <fileMode>755</fileMode>
    </file>
  </files>
</assembly>
