<?xml version="1.0" encoding="UTF-8"?>

    <!--
        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.
    -->

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
	<modelVersion>4.0.0</modelVersion>

	<parent>
		<groupId>org.apache.chemistry.opencmis</groupId>
		<artifactId>chemistry-opencmis</artifactId>
		<version>1.0.0-SNAPSHOT</version>
		<relativePath>../../pom.xml</relativePath>
	</parent>

	<artifactId>chemistry-opencmis-android-client</artifactId>
	<name>OpenCMIS Android Client</name>
	<packaging>jar</packaging>

	<properties>
		<parentBasedir>../../</parentBasedir>
	</properties>

	<dependencies>
		<dependency>
			<groupId>com.google.android</groupId>
			<artifactId>android</artifactId>
			<version>2.3.3</version>
			<scope>provided</scope>
		</dependency>
        <dependency>
            <groupId>com.squareup.okhttp3</groupId>
            <artifactId>okhttp</artifactId>
            <version>${okhttp.version}</version>
            <scope>provided</scope>
        </dependency>
	</dependencies>

	<build>
		<plugins>
		    <plugin>
                 <artifactId>maven-antrun-plugin</artifactId>
                 <executions>
                     <execution>
                         <phase>generate-resources</phase>
                         <configuration>
                             <target>
                          		<property name="gendir" value="${project.build.directory}/opencmis-core" />

								<property name="basedir" value="${maven.basedir}" />
                                <property name="commons-api" value="${basedir}/../../chemistry-opencmis-commons/chemistry-opencmis-commons-api" />
                                <property name="commons-impl" value="${basedir}/../../chemistry-opencmis-commons/chemistry-opencmis-commons-impl" />
                                <property name="client-bindings" value="${basedir}/../../chemistry-opencmis-client/chemistry-opencmis-client-bindings" />
                                <property name="client-api" value="${basedir}/../../chemistry-opencmis-client/chemistry-opencmis-client-api" />
                                <property name="client-impl" value="${basedir}/../../chemistry-opencmis-client/chemistry-opencmis-client-impl" />

                                <property name="sourcefiles" value="src/main/java" />
                                 
								<copy todir="${gendir}">
									<fileset dir="${commons-api}/${sourcefiles}">
										<include name="**/*.java" />
									</fileset>
								</copy>
                                
                           		<copy todir="${gendir}">
									<fileset dir="${commons-impl}/${sourcefiles}">
										<include name="**/*.java" />
										<exclude name="**/jaxb/**" />
										<exclude name="**/webservices/**" />
										<exclude name="**/impl/WSConverter.*" />
										<exclude name="**/impl/XMLConverter.*" />
										<exclude name="**/impl/XMLConverter.*" />
										<exclude name="**/impl/XMLUtils.*" />
										<exclude name="**/impl/XMLWalker.*" />										
									</fileset>
								</copy>
                                
                            	<copy todir="${gendir}">
									<fileset dir="${client-bindings}/${sourcefiles}">
										<include name="**/*.java" />
										<exclude name="**/spi/LTPAWSSecurityAuthenticationProvider.*" />
										<exclude name="**/spi/local/**" />
										<exclude name="**/spi/http/DefaultHttpInvoker.*" />
										<exclude name="**/spi/http/ApacheClientHttpInvoker.*" />
										<exclude name="**/spi/webservices/**" />
										<exclude name="**/spi/atompub/**" />
									</fileset>
								</copy>                            
                                
                            	<copy todir="${gendir}">
									<fileset dir="${client-api}/${sourcefiles}">
										<include name="**/*.java" />
									</fileset>
								</copy>                            
                                
                            	<copy todir="${gendir}">
									<fileset dir="${client-impl}/${sourcefiles}">
										<include name="**/*.java" />
										<exclude name="**/TypeUtils.java" />
										<exclude name="**/osgi/**" />
									</fileset>
								</copy>
								
								<replace dir="${gendir}" token="javax.xml.ws.handler.HandlerResolver" value="org.apache.chemistry.opencmis.client.bindings.spi.HandlerResolver" />            
                             </target>
                         </configuration>
                         <goals>
                             <goal>run</goal>
                         </goals>
                     </execution>
                 </executions>
            </plugin>
            <plugin>
				<groupId>org.codehaus.mojo</groupId>
				<artifactId>build-helper-maven-plugin</artifactId>
				<version>1.7</version>
				<executions>
					<execution>
						<phase>generate-sources</phase>
						<goals>
							<goal>add-source</goal>
						</goals>
    			        <configuration>
    			            <sources>
   								<source>${project.build.directory}/opencmis-core</source>
							</sources>
						</configuration>
					</execution>
				</executions>
			</plugin>
            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <executions>
                    <execution>
                        <id>pack</id>
                        <goals>
                            <goal>single</goal>
                        </goals>
                        <phase>package</phase>
                        <configuration>
                            <attach>true</attach>
                            <tarLongFileMode>posix</tarLongFileMode>
                            <descriptors>
                                <descriptor>
                                  src/main/assembly/assembly.xml
                                </descriptor>
                            </descriptors>
                        </configuration>
                     </execution>
                </executions>
            </plugin>
		</plugins>

	</build>
</project>