<?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>tagsync</id>
  <formats>
     <format>tar.gz</format>
	 <format>zip</format>
  </formats>
  <baseDirectory>${project.name}-${project.version}-tagsync</baseDirectory>
  <includeBaseDirectory>true</includeBaseDirectory>
  <moduleSets>
    <moduleSet>
     <binaries>
        <includeDependencies>false</includeDependencies>
        <unpack>false</unpack>
	    <directoryMode>755</directoryMode>
	    <fileMode>644</fileMode>
  		<dependencySets>
   			<dependencySet>
     			<outputDirectory>/lib</outputDirectory>
				<includes>
					<include>com.101tec:zkclient</include>
					<include>com.google.code.gson:gson:jar:${gson.version}</include>
					<include>com.google.guava:guava:jar:${google.guava.version}</include>
					<include>com.google.inject:guice:jar:${guice.version}</include>
					<include>com.google.inject.extensions:guice-multibindings:jar:${guice.version}</include>
					<include>com.sun.jersey:jersey-bundle:jar:${jersey-bundle.version}</include>
					<include>com.sun.jersey.contribs:jersey-multipart:jar:${sun-jersey-bundle.version}</include>
					<include>com.thoughtworks.paranamer:paranamer:jar:${paranamer.version}</include>
					<include>com.yammer.metrics:metrics-core</include>
					<include>org.apache.atlas:atlas-notification:jar:${atlas.version}</include>
					<include>org.apache.atlas:atlas-typesystem:jar:${atlas.version}</include>
					<include>org.apache.atlas:atlas-client:jar:${atlas.version}</include>
					<include>org.apache.atlas:atlas-client-common:jar:${atlas.version}</include>
					<include>org.apache.atlas:atlas-client-v2:jar:${atlas.version}</include>
					<include>org.apache.atlas:atlas-common:jar:${atlas.version}</include>
					<include>org.apache.atlas:atlas-intg:jar:${atlas.version}</include>
					<include>org.apache.commons:commons-compress:jar:${atlas.commons.compress.version}</include>
					<include>org.apache.hadoop:hadoop-auth</include>
					<include>org.apache.hadoop:hadoop-common</include>
					<include>org.apache.kafka:kafka_${scala.binary.version}:jar:${kafka.version}</include>
					<include>org.apache.kafka:kafka-clients:jar:${kafka.version}</include>
					<include>org.apache.ranger:credentialbuilder</include>
					<include>org.apache.ranger:ranger-plugins-cred</include>
					<include>org.apache.ranger:ranger-plugins-common</include>
					<include>org.apache.ranger:ranger-util</include>
					<include>org.apache.zookeeper:zookeeper:jar:${zookeeper.version}</include>
					<include>org.codehaus.jackson:jackson-core-asl:jar:${codehaus.jackson.version}</include>
					<include>org.codehaus.jackson:jackson-jaxrs:jar:${codehaus.jackson.version}</include>
					<include>org.codehaus.jackson:jackson-mapper-asl:jar:${codehaus.jackson.version}</include>
					<include>org.codehaus.jackson:jackson-xc:jar:${codehaus.jackson.version}</include>
					<include>org.codehaus.jettison:jettison:jar:${jettison.version}</include>
					<include>org.json4s:json4s-native_${scala.binary.version}:jar:${json4s.version}</include>
					<include>org.json4s:json4s-core_${scala.binary.version}:jar:${json4s.version}</include>
					<include>org.json4s:json4s-ast_${scala.binary.version}:jar:${json4s.version}</include>
					<include>org.scala-lang:scala-library:jar:${scala.version}</include>
					<include>org.scala-lang:scalap:jar:${scala.version}</include>
					<include>org.scala-lang:scala-compiler:jar:${scala.version}</include>
					<include>org.scala-lang:scala-reflect:jar:${scala.version}</include>
					<include>org.scala-lang.modules:scala-xml_${scala.binary.version}:jar:${scala.xml.version}</include>
					<include>org.scala-lang.modules:scala-parser-combinators_${scala.binary.version}:jar:${scala.xml.version}</include>
					<include>org.slf4j:slf4j-api</include>
					<include>aopalliance:aopalliance:jar:${aopalliance.version}</include>
					<include>commons-cli:commons-cli:jar:${commons.cli.version}</include>
					<include>commons-collections:commons-collections:jar:${commons.collections.version}</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:jar:${commons.logging.version}</include>
					<include>javax.inject:javax.inject:jar:${javax-inject.version}</include>
					<include>joda-time:joda-time:jar:${joda-time.version}</include>
					<include>log4j:log4j:jar:${log4j.version}</include>
				</includes>
				<unpack>false</unpack>
  			</dependencySet>
  		</dependencySets>
        <outputDirectory>/dist</outputDirectory>
     </binaries>
     <includes>
		<include>org.apache.ranger:ranger-tagsync</include>
     </includes>
    </moduleSet>
  </moduleSets>
  <fileSets>
	<fileSet>
	    	<directoryMode>755</directoryMode>
	    	<fileMode>644</fileMode>
		<outputDirectory>/conf.dist</outputDirectory>
		<directory>tagsync/conf.dist</directory>
	</fileSet>
	<fileSet>
	    	<directoryMode>755</directoryMode>
	    	<fileMode>644</fileMode>
		<outputDirectory>/conf.dist/etc/ranger/data</outputDirectory>
		<directory>tagsync/src/main/resources/etc/ranger/data</directory>
	</fileSet>
	<fileSet>
	    	<directoryMode>755</directoryMode>
		<fileMode>544</fileMode>
		<outputDirectory>/</outputDirectory>
		<directory>tagsync/scripts</directory>
		<excludes>
			<exclude>ranger-tagsync.sh</exclude>
		</excludes>
	</fileSet>
	<fileSet>
		<directoryMode>755</directoryMode>
		<fileMode>444</fileMode>
		<outputDirectory>/templates</outputDirectory>
		<directory>tagsync/conf/templates</directory>
	</fileSet>
        <fileSet>
	    	<directoryMode>755</directoryMode>
                <outputDirectory>/</outputDirectory>
                <directory>${project.build.directory}</directory>
                <includes>
                        <include>version</include>
                </includes>
		<fileMode>444</fileMode>
        </fileSet>
  </fileSets>
  <files>
      <file>
		<source>tagsync/scripts/ranger-tagsync.sh</source>
		<outputDirectory>/</outputDirectory>
		<destName>ranger-tagsync</destName>
		<fileMode>755</fileMode>
      </file>
   </files>
</assembly>
