<?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>admin</id> 
  <formats>
     <format>tar.gz</format>
     <format>zip</format>
  </formats>
  <baseDirectory>${project.name}-${project.version}-admin</baseDirectory>
  <includeBaseDirectory>true</includeBaseDirectory>
  <moduleSets>

    <moduleSet>
     <binaries>
        <includeDependencies>false</includeDependencies>
        <unpack>true</unpack>
        <outputDirectory>/ews/webapp</outputDirectory>
     </binaries>
     <includes>
		<include>org.apache.ranger:security-admin-web</include>
     </includes>
    </moduleSet>

    <moduleSet>
     <binaries>
        <includeDependencies>false</includeDependencies>
        <unpack>false</unpack>
        <outputDirectory>/ews/ranger_jaas</outputDirectory>
     </binaries>
     <includes>
		<include>org.apache.ranger:unixauthclient</include>
     </includes>
    </moduleSet>

    <moduleSet>
     <binaries>
        <includeDependencies>false</includeDependencies>
        <outputDirectory>/ews/lib</outputDirectory>
        <unpack>false</unpack>
        <directoryMode>755</directoryMode>
        <fileMode>644</fileMode>
        <dependencySets>
            <dependencySet>
                <outputDirectory>/ews/lib</outputDirectory>
                <includes>
                    <include>org.apache.tomcat.embed:tomcat-embed*</include>
                    <include>org.eclipse.jdt.core.compiler:ecj:jar:P20140317-1600</include>
                </includes>
                <unpack>false</unpack>
            </dependencySet>
        </dependencySets>
     </binaries>
     <includes>
	    <include>org.apache.ranger:embeddedwebserver</include>
     </includes>
    </moduleSet>


    <moduleSet>
     <binaries>
        <includeDependencies>false</includeDependencies>
        <outputDirectory>/cred/lib</outputDirectory>
        <unpack>false</unpack>
        <directoryMode>755</directoryMode>
        <fileMode>644</fileMode>
        <dependencySets>
            <dependencySet>
                <outputDirectory>/cred/lib</outputDirectory>
                <unpack>false</unpack>
   				<includes>
                    <include>commons-cli:commons-cli</include>
                    <include>commons-collections:commons-collections</include>
                    <include>commons-configuration:commons-configuration</include>
                    <include>commons-lang:commons-lang</include>
                    <include>commons-logging:commons-logging</include>
                    <include>com.google.guava:guava</include>
                    <include>org.hamcrest:hamcrest-all</include>
                    <include>junit:junit</include>
                    <include>org.slf4j:slf4j-api</include>
                    <include>org.apache.hadoop:hadoop-common</include>
                    <include>org.apache.hadoop:hadoop-auth</include>
				</includes>
            </dependencySet>
        </dependencySets>
     </binaries>
     <includes>
	    <include>org.apache.ranger:credentialbuilder</include>
     </includes>
    </moduleSet>
<moduleSet>
     <binaries>
        <includeDependencies>false</includeDependencies>
        <outputDirectory>/jisql/lib</outputDirectory>
        <unpack>false</unpack>
        <directoryMode>755</directoryMode>
        <fileMode>644</fileMode>
        <dependencySets>
            <dependencySet>
                <outputDirectory>/jisql/lib</outputDirectory>
                <unpack>false</unpack>
				<includes>
                    <include>net.sourceforge.javacsv:javacsv</include>
                    <include>net.sf.jopt-simple:jopt-simple</include>
				</includes>
            </dependencySet>
        </dependencySets>
     </binaries>
     <includes>
	    <include>org.apache.ranger:jisql</include>
     </includes>
    </moduleSet>
  </moduleSets> 	

  <fileSets>
	<fileSet>
		<outputDirectory>/ews</outputDirectory>
		<directory>embeddedwebserver/scripts</directory>
		<fileMode>544</fileMode>
	</fileSet>
	<fileSet>
		<outputDirectory>/ews/webapp/WEB-INF/classes/conf.dist</outputDirectory>
		<directory>embeddedwebserver/conf</directory>
		<fileMode>700</fileMode>
	</fileSet>
<!--
	<fileSet>
		<outputDirectory>/ews/lib</outputDirectory>
		<directory>embeddedwebserver/lib</directory>
	</fileSet>
-->
	<fileSet>
		<outputDirectory>/unixauth-config</outputDirectory>
		<directory>security-admin/unixauth-config</directory>
		<fileMode>544</fileMode>
	</fileSet>

	<fileSet>
		<outputDirectory>/db</outputDirectory>
		<directory>security-admin/db</directory>
		<fileMode>544</fileMode>
	</fileSet>
	<fileSet>
		<outputDirectory>/</outputDirectory>
		<directory>security-admin/scripts</directory>
		<includes>
			<include>install.properties</include>
		</includes>
		<fileMode>700</fileMode>
	</fileSet>
	<fileSet>
		<outputDirectory>/</outputDirectory>
		<directory>security-admin/scripts</directory>
		<includes>
			<include>setup.sh</include>
			<include>setup_authentication.sh</include>
			<include>set_globals.sh</include>
		</includes>
		<fileMode>544</fileMode>
	</fileSet>
	<fileSet>
		<outputDirectory>/</outputDirectory>
		<directory>security-admin</directory>
		<includes>
			<include>3rd_party_licenses.txt</include>
			<include>3rd_party_licenses_text.txt</include>
		</includes>
		<fileMode>444</fileMode>
	</fileSet>
	<fileSet>
		<outputDirectory>/</outputDirectory>
		<directory>${project.build.directory}</directory>
		<includes>
			<include>version</include>
		</includes>
		<fileMode>444</fileMode>
	</fileSet>
   <fileSet>
        <directory>security-admin/src/bin</directory>
        <outputDirectory>bin</outputDirectory>
        <fileMode>0755</fileMode>
        <directoryMode>0755</directoryMode>
    </fileSet>
  </fileSets>
</assembly>
