<?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>
    <parent>
        <groupId>org.apache.tuscany.das</groupId>
        <artifactId>tuscany-das</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <artifactId>tuscany-das-plugin</artifactId>
    <packaging>maven-plugin</packaging>
    <name>Tuscany DAS Maven Plugin</name>

    <dependencies>
        <dependency>
            <groupId>org.apache.maven</groupId>
            <artifactId>maven-plugin-api</artifactId>
            <version>2.0.4</version>
            <scope>compile</scope>
        </dependency>
	<dependency>
	    <groupId>org.apache.maven</groupId>
	    <artifactId>maven-model</artifactId>
	    <version>2.0.4</version>
	</dependency>
        <dependency>
            <groupId>org.apache.maven</groupId>
            <artifactId>maven-project</artifactId>
            <version>2.0.4</version>
            <scope>compile</scope>
        </dependency>       
        <dependency>
            <groupId>org.apache.maven</groupId>
            <artifactId>maven-plugin-descriptor</artifactId>
            <version>2.0.4</version>
            <scope>compile</scope>
        </dependency>                

        <dependency>
            <groupId>org.apache.derby</groupId>
            <artifactId>derby</artifactId>
            <version>10.2.2.0</version>
        </dependency>

        <dependency>
		    <groupId>torque</groupId>
		    <artifactId>torque-gen</artifactId>
		    <version>3.3-RC2</version>
		</dependency>

        <dependency>
            <groupId>org.apache.tuscany.das</groupId>
            <artifactId>tuscany-das-tools</artifactId>
            <version>${das.version}</version>
            <scope>compile</scope>
        </dependency>
    </dependencies>
       
    <profiles>
        <profile>
			<id>plugin-test</id>       
           <build>
			<plugins>
			    <plugin>
				<groupId>org.apache.tuscany.das</groupId>
				<artifactId>tuscany-das-plugin</artifactId>
				<version>${das.version}</version>
				<executions>
				    <execution>
					<id>dbToxsd</id>
				    	<phase>generate-resources</phase>
					<configuration>
					    <schemaFile>${basedir}/target/schema.xml</schemaFile>
					    <modelFile>${basedir}/target/sdoModel.xsd</modelFile>
					    <driverClass>org.apache.derby.jdbc.EmbeddedDriver</driverClass>
					    <databaseURL>jdbc:derby:${basedir}/../rdb/target/dastest</databaseURL>
					    <schemaName>APP</schemaName>
					</configuration>			
					<goals>
					    <goal>generate</goal>
					</goals>
				    </execution>
				  </executions>		    
			    </plugin>	   
			</plugins>
    	</build>
    </profile>
   </profiles>
    	 
</project>