<?xml version="1.0"?>
<!--
   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 name="storage-handlers" default="jar" xmlns:ivy="antlib:org.apache.ivy.ant" >
    <!-- Used to pass calls to storage handlers. -->
    <target name="template">
        <condition property="dist.handlers.dir" value="${dist.handlers.dir}">
            <isset property="dist.handlers.dir"/>
        </condition>
        <!-- add storage handlers here -->
        <echo>Executing storage-handler &quot;${target}&quot; for hbase</echo>
        <ant target="${target}" dir="hbase" inheritAll="false" useNativeBasedir="true"/>
    </target>

    <target name="ivy-report">
        <antcall target="template">
            <param name="target" value="_ivy-report"/>
        </antcall>
    </target>

    <target name="jar">
        <echo>Generating all handlers</echo>
        <antcall target="template">
            <param name="target" value="jar"/>
        </antcall>
    </target>

    <target name="test">
        <echo>Testing all handlers</echo>
        <antcall target="template">
            <param name="target" value="test"/>
        </antcall>
    </target>

    <target name="clean">
        <echo>Cleaning all handlers</echo>
        <antcall target="template">
            <param name="target" value="clean"/>
        </antcall>
    </target>

    <target name="package">
        <echo>Package all handlers</echo>
        <antcall target="template">
            <param name="target" value="package"/>
        </antcall>
    </target>
</project>
