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

-->

<!-- arguments below are taken form the upper ANT task -->

<!-- basedir == directory, where the localizable files are -->
<!-- destdir == directory, where will be saved final JAR file -->
<!-- locale  == a locale ... files with these locale will be added to the archive (JAR file) -->

<!-- idedir  == part in the IDE, where will be stored final file -->


<project name="Sub_beans" default="sub_beans" basedir="${dir}">

	<!-- setup the destination directory -->
	<property name="idedir" value="modules/locale" />

	<target name="sub_beans">
                <!-- create full destination directory -->
                <mkdir dir="${destdir}/${idedir}" />
                <!-- create final jar file -->
                <jar jarfile="${destdir}/${idedir}/beans_${locale}.jar" basedir="${basedir}/src" includes="**/*_${locale}.*" />
        </target>

</project>
