<?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>dist</id>
	<formats>
		<format>tar.gz</format>
		<format>tar.bz2</format>
		<format>zip</format>
	</formats>
	<includeBaseDirectory>true</includeBaseDirectory>
	<fileSets>
		<fileSet>
			<directory>${basedir}/..</directory>
			<outputDirectory>src</outputDirectory>
			<useDefaultExcludes>true</useDefaultExcludes>
			<includes>
				<include>pom.xml</include>
				<include>empire-assembly-all.xml</include>
				<include>empire-db/**</include>
				<include>empire-db-struts2/**</include>
				<include>empire-db-jsf2/**</include>
				<include>empire-db-examples/**</include>
				<include>empire-db-maven-plugin/**</include>
				<include>empire-db-codegen/**</include>
			</includes>
			<excludes>
				<exclude>**/empire-db/target/**</exclude>
				<exclude>**/empire-db-*/target/**</exclude>
				<exclude>**/.classpath/**</exclude>
				<exclude>**/.project/**</exclude>
				<exclude>**/.settings/**</exclude>
				<exclude>**/.amateras/**</exclude>
				<exclude>**/.tomcatplugin/**</exclude>
				<exclude>empire-db-examples/tutorial.pdf</exclude>
			</excludes>
		</fileSet>
		<fileSet>
			<directory>${basedir}/..</directory>
			<outputDirectory/>
			<useDefaultExcludes>true</useDefaultExcludes>
			<includes>
				<include>LICENSE.txt</include>
				<include>NOTICE.txt</include>
				<include>README.txt</include>
				<include>CHANGELOG.txt</include>
				<!-- <include>licenses/**</include> -->
			</includes>
		</fileSet>
		<fileSet>
			<directory>${basedir}/../empire-db-examples</directory>
			<outputDirectory/>
			<includes>
				<include>tutorial.pdf</include>
			</includes>
		</fileSet>
	</fileSets>
	<dependencySets>
		<dependencySet>
			<outputDirectory>doc</outputDirectory>
			<!-- <unpack>true</unpack> -->
			<useStrictFiltering>true</useStrictFiltering>
			<includes>
				<include>org.apache.empire-db:empire-db:*:javadoc</include>
				<include>org.apache.empire-db:empire-db-struts2:*:javadoc</include>
				<include>org.apache.empire-db:empire-db-jsf2:*:javadoc</include>
			</includes>
		</dependencySet>
		<dependencySet>
            <outputDirectory>bin</outputDirectory>
            <useStrictFiltering>true</useStrictFiltering>
            <includes>
                <include>org.apache.empire-db:empire-db:jar</include>
                <include>org.apache.empire-db:empire-db-struts2:jar</include>
                <include>org.apache.empire-db:empire-db-jsf2:jar</include>
            </includes>
        </dependencySet>
    </dependencySets>
</assembly>
