<?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.    
-->
<project>
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.apache.tuscany.sca</groupId>
		<artifactId>tuscany-itest</artifactId>
		<version>1.7-SNAPSHOT</version>
		<relativePath>../pom.xml</relativePath>
	</parent>
	<artifactId>itest-wsdl2java</artifactId>
	<name>Apache Tuscany SCA iTest WSDL2Java</name>
	
	<dependencies>
		<dependency>
			<groupId>org.apache.tuscany.sca</groupId>
			<artifactId>tuscany-host-embedded</artifactId>
			<version>1.7-SNAPSHOT</version>
		</dependency>
		<dependency>
			<groupId>org.apache.tuscany.sca</groupId>
			<artifactId>tuscany-implementation-java-runtime</artifactId>
			<version>1.7-SNAPSHOT</version>
			<scope>runtime</scope>
		</dependency>
		<dependency>
			<groupId>org.apache.tuscany.sca</groupId>
			<artifactId>tuscany-interface-wsdl</artifactId>
			<version>1.7-SNAPSHOT</version>
			<scope>runtime</scope>
		</dependency>
		<dependency>
			<groupId>org.apache.tuscany.sca</groupId>
			<artifactId>tuscany-binding-ws-axis2</artifactId>
			<version>1.7-SNAPSHOT</version>
			<scope>runtime</scope>
		</dependency>
		<dependency>
			<groupId>org.apache.tuscany.sca</groupId>
			<artifactId>tuscany-databinding-sdo</artifactId>
			<version>1.7-SNAPSHOT</version>
			<scope>runtime</scope>
		</dependency>
		<dependency>
			<groupId>org.apache.tuscany.sca</groupId>
			<artifactId>tuscany-databinding-axiom</artifactId>
			<version>1.7-SNAPSHOT</version>
			<scope>runtime</scope>
		</dependency>
		<dependency>
			<groupId>org.apache.tuscany.sca</groupId>
			<artifactId>tuscany-host-jetty</artifactId>
			<version>1.7-SNAPSHOT</version>
			<scope>runtime</scope>
		</dependency>
		<dependency>
			<groupId>org.apache.tuscany.sdo</groupId>
			<artifactId>tuscany-sdo-impl</artifactId>
			<version>1.1.1</version>
			<scope>compile</scope>
		</dependency>
	</dependencies>
	<build>
		<plugins>
			<plugin>
				<groupId>org.codehaus.mojo</groupId>
				<artifactId>build-helper-maven-plugin</artifactId>
				<version>1.0</version>
				<executions>
					<execution>
						<id>add-test-source</id>
						<phase>generate-sources</phase>
						<goals>
							<goal>add-test-source</goal>
						</goals>
						<configuration>
							<sources>
								<source>target/sdo-source</source>
							</sources>
						</configuration>
					</execution>
				</executions>
			</plugin>
			<plugin>
				<groupId>org.apache.tuscany.sdo</groupId>
				<artifactId>tuscany-sdo-plugin</artifactId>
				<version>1.1.1</version>
				<executions>
					<execution>
						<id>generate-sdo-account-service</id>
						<phase>generate-sources</phase>
						<configuration>
							<schemaFile>
								${basedir}/src/test/resources/AccountService.wsdl</schemaFile>
							<targetDirectory>
								${basedir}/target/sdo-source</targetDirectory>
							<javaPackage>com.bigbank.account</javaPackage>
							<prefix>Account</prefix>
							<noNotification>true</noNotification>
							<noContainer>true</noContainer>
							<noUnsettable>true</noUnsettable>
						</configuration>
						<goals>
							<goal>generate</goal>
						</goals>
					</execution>
					<execution>
						<id>generate-sdo-stock-exception</id>
						<phase>generate-sources</phase>
						<configuration>
							<schemaFile>
								${basedir}/src/test/resources/StockExceptionTest.wsdl</schemaFile>
							<targetDirectory>
								${basedir}/target/sdo-source</targetDirectory>
							<prefix>Stock</prefix>
							<noInterfaces>true</noInterfaces>
							<noNotification>true</noNotification>
							<noContainer>true</noContainer>
							<noUnsettable>true</noUnsettable>
						</configuration>
						<goals>
							<goal>generate</goal>
						</goals>
					</execution>
					<!--execution>
                        <id>generate-sdo-echo-service-xsd</id>
                        <phase>generate-sources</phase>
                        <configuration>
                            <schemaFile>${basedir}/src/test/resources/EchoService.xsd</schemaFile>
                            <targetDirectory>${basedir}/target/sdo-source</targetDirectory>
                            <prefix>Stock</prefix>
                            <noInterfaces>true</noInterfaces>
                            <noNotification>true</noNotification>
                            <noContainer>true</noContainer>
                            <noUnsettable>true</noUnsettable>
                        </configuration>
                        <goals>
                            <goal>generate</goal>
                        </goals>
                    </execution-->
				</executions>
			</plugin>
			<plugin>
				<groupId>org.apache.tuscany.sca</groupId>
				<artifactId>tuscany-maven-wsdl2java</artifactId>
				<version>1.7-SNAPSHOT</version>
				<executions>
					<execution>
						<configuration>
							<wsdlFiles>
								<wsdlFile>
									<fileName>
										${basedir}/src/test/resources/AccountService.wsdl</fileName>
								</wsdlFile>
								<wsdlFile>
									<fileName>
										${basedir}/src/test/resources/StockExceptionTest.wsdl</fileName>
								</wsdlFile>
								<!--wsdlFile>
									<fileName>${basedir}/src/test/resources/EchoService.wsdl</fileName>
								</wsdlFile-->
							</wsdlFiles>
						</configuration>
						<goals>
							<goal>generate</goal>
						</goals>
					</execution>
				</executions>
			</plugin>
		</plugins>
	</build>
</project>
