<?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-tutorial-store</artifactId>
        <version>1.7-SNAPSHOT</version>
        <relativePath>../pom.xml</relativePath>
    </parent>
    <artifactId>tutorial-store-db</artifactId>
    <name>Apache Tuscany SCA Store Tutorial Online Store Using DB</name>

    <repositories>
       <repository>
          <id>apache.incubator</id>
          <url>http://people.apache.org/repo/m2-incubating-repository</url>
       </repository>
    </repositories>

    <build>
       <finalName>${artifactId}</finalName>
       <sourceDirectory>${basedir}</sourceDirectory>
       <resources>
          <resource>
              <directory>${basedir}</directory>
              <excludes>
                  <exclude>**/*.java</exclude>
                  <exclude>**/.*/**</exclude>
                  <exclude>pom.xml</exclude>
                  <exclude>build*.xml</exclude>
                  <exclude>target/**</exclude>
              </excludes>
          </resource>
       </resources>
       <plugins>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>sql-maven-plugin</artifactId>
                <version>1.3</version> 

                <dependencies>
                    <dependency>
                        <groupId>org.apache.derby</groupId>
                        <artifactId>derby</artifactId>
                        <version>10.3.1.4</version>
                    </dependency>
                </dependencies>

                <executions>
                    <execution>
                        <id>create-db</id>
                        <phase>generate-resources</phase>
                        <goals>
                            <goal>execute</goal>
                        </goals>
                        <configuration>
                            <driver>org.apache.derby.jdbc.EmbeddedDriver</driver>
                            <url>jdbc:derby:${basedir}/target/cart-db;create=true</url>
                            <autocommit>true</autocommit>
                            <onError>continue</onError>
                            <onConnectionError>skip</onConnectionError>
                            <delimiter>;</delimiter>
                            <srcFiles>
                                <srcFile>${basedir}/../assets/services/db/cart.sql</srcFile>
                            </srcFiles>
                        </configuration>
                    </execution>
                    
                    <!-- Shutdown DB in order to be able to run unit tests -->
                    <!-- commented out because the unit tests don't use this database
                    <execution>
                    	<id>shutdown-database-sothat-test-can-run</id>
                    	<phase>process-test-resources</phase>
                    	<goals>
                    		<goal>execute</goal>
                    	</goals>
                    	<configuration>
                    	    <driver>org.apache.derby.jdbc.EmbeddedDriver</driver>
                    		<url>jdbc:derby:${basedir}/target/cart-db;shutdown=true</url>
                    		<skipOnConnectionError>true</skipOnConnectionError>
                    	</configuration>
                    </execution>
                    -->
                </executions>
            </plugin>	
        </plugins>	   
    </build>

</project>
