<?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>

    <property name="db.scripts.dir" value="${basedir}/target" />
    <property name="descriptor.dir" value="${basedir}/src/main/descriptors"/>
    <property name="scripts.dir" value="${basedir}/src/main/scripts"/>

    <path id="classpath">
      <pathelement path="${maven.runtime.classpath}"/>
    </path>

    <target name="create-schema">

    <taskdef name="mappingtool" classname="org.apache.openjpa.jdbc.ant.MappingToolTask" classpathref="classpath"/>

    <mkdir dir="target"/>
    <mkdir dir="${db.scripts.dir}" />

    <!-- Derby -->
    <create-ddl db="derby"/>

    <!-- MySQL -->
    <create-ddl db="mysql"/>

    <!-- Oracle -->
    <create-ddl db="oracle"/>

    <!-- Postgres -->
<!--
<create-ddl db="postgres"/>
-->

  </target>

  <target name="zip-derby-db">
    <zip destfile="${basedir}/target/ode-dao-jpa-ojpa-derby-${ode.version}.zip" basedir="${basedir}/target/derby" />
  </target>

  <!--
     ============================================
     Macro defs, no need to change anything below
     ============================================
  -->

  <macrodef name="create-ddl">
    <attribute name="db"/>

    <sequential>
      <echo></echo>
      <echo>=====================</echo>
      <echo>Create DDL @{db}</echo>
        <mappingtool schemaAction="build" sqlFile="${db.scripts.dir}/partial.@{db}.sql" readSchema="false">
       <config propertiesFile="${descriptor.dir}/persistence.@{db}.xml"/>
        <classpath>
           <path refid="classpath"/>
        </classpath>
        </mappingtool>
        <concat destfile="${db.scripts.dir}/@{db}.sql">
          <fileset file="${scripts.dir}/common.sql"/>
          <fileset file="${scripts.dir}/license-header.sql"/>
          <fileset file="${scripts.dir}/simplesched-@{db}.sql"/>
          <fileset file="${db.scripts.dir}/partial.@{db}.sql"/>
        </concat>
      <echo>Done.</echo>
      <echo>=====================</echo>
    </sequential>
  </macrodef>

</project>
