<!-- * Copyright 2001-2009 The Apache Software Foundation. * * Licensed 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>docs</id>
	<formats>
		<format>tar.gz</format>
		<format>zip</format>
	</formats>
	<includeBaseDirectory>false</includeBaseDirectory>
	<fileSets>
		<fileSet>
			<directory>${parent.basedir}/db</directory>
			<outputDirectory>db</outputDirectory>
		</fileSet>
		<fileSet>
			<directory>${parent.basedir}/uddi3-specification</directory>
			<includes>
				<include>*.pdf</include>
				<include>*.txt</include>
			</includes>
			<outputDirectory>uddi3-specification</outputDirectory>
		</fileSet>
	</fileSets>
	<dependencySets>
		<!-- The jUDDI documentation -->
		<dependencySet>
			<outputDirectory>docs/juddi-guide</outputDirectory>
			<includes>
				<include>org.apache.juddi.juddi-docs:juddi-guide:jdocbook</include>
			</includes>
			<useProjectArtifact>false</useProjectArtifact>
			<useProjectAttachments>false</useProjectAttachments>
			<useTransitiveDependencies>false</useTransitiveDependencies>
			<useTransitiveFiltering>false</useTransitiveFiltering>
			<directoryMode>0755</directoryMode>
			<fileMode>0755</fileMode>
			<unpack>true</unpack>
			<unpackOptions>
				<excludes>
					<exclude>**/META-INF/**</exclude>
				</excludes>
			</unpackOptions>
		</dependencySet>
		<!-- The jUDDI client documentation -->
		<dependencySet>
			<outputDirectory>docs/juddi-client-guide</outputDirectory>
			<includes>
				<include>org.apache.juddi.juddi-docs:juddi-client-guide:jdocbook
				</include>
			</includes>
			<useProjectArtifact>false</useProjectArtifact>
			<useProjectAttachments>false</useProjectAttachments>
			<useTransitiveDependencies>false</useTransitiveDependencies>
			<useTransitiveFiltering>false</useTransitiveFiltering>
			<directoryMode>0755</directoryMode>
			<fileMode>0755</fileMode>
			<unpack>true</unpack>
			<unpackOptions>
				<excludes>
					<exclude>**/META-INF/**</exclude>
				</excludes>
			</unpackOptions>
		</dependencySet>
	</dependencySets>
</assembly>
