<!--
    Copyright (c) 2012-2013, Sencha Inc.
    
    This file is a Sencha Cmd plugin that provides support for packages.
-->
<project name="cmd-package-plugin">
    <!-- 
    <target name="init-plugin">
        nothing to do here... yet
    </target>
    -->

    <target name="init-package-plugin">
        <property name="senchadir" value=".sencha"/>
    </target>

    <!-- ****************************************************************** -->

    <target name="generate-package" depends="init-package-plugin">
        <echo>Generating package ${args.name} of type ${args.type} to ${args.path}</echo>
        <local name="ext.rel.path"/>
        <local name="touch.rel.path"/>

        <x-get-relative-path from="${args.path}" to="${ext.dir}"
                             property="ext.rel.path"/>

        <x-get-relative-path from="${args.path}" to="${touch.dir}"
                             property="touch.rel.path"/>

        <x-generate dir="${cmd.dir}/templates/SenchaCommon"
                    todir="${args.path}/${senchadir}/package"
                    store="${args.path}/${senchadir}/package/codegen.json"
                    basedir="${args.path}">
            <param name="pkgName" value="${args.name}"/>
            <param name="pkgType" value="${args.type}"/>
            <param name="extRelPath" value="${ext.rel.path}"/>
            <param name="touchRelPath" value="${touch.rel.path}"/>
            <param name="senchadir" value="${senchadir}"/>
        </x-generate>

        <x-generate dir="${cmd.dir}/templates/package" todir="${args.path}"
                    store="${args.path}/${senchadir}/package/codegen.json"
                    basedir="${args.path}">
            <param name="pkgName" value="${args.name}"/>
            <param name="pkgType" value="${args.type}"/>
            <param name="pkgFramework" value="${args.framework}"/>
            <param name="pkgTheme" value="${args.theme}"/>
            <param name="pkgExtend" value="${args.extend}" />
            <param name="pkgToolkit" value="${args.toolkit}" />
            <param name="pkgNamespace" value="${args.namespace}" />
            <param name="extRelPath" value="${ext.rel.path}"/>
            <param name="touchRelPath" value="${touch.rel.path}"/>
            <param name="senchadir" value="${senchadir}"/>
        </x-generate>

        <x-generate dir="${cmd.dir}/templates/starter-package" todir="${args.path}"
                    store="${args.path}/${senchadir}/package/codegen.json"
                    basedir="${args.path}">
            <param name="pkgName" value="${args.name}"/>
            <param name="pkgType" value="${args.type}"/>
            <param name="extRelPath" value="${ext.rel.path}"/>
            <param name="touchRelPath" value="${touch.rel.path}"/>
            <param name="senchadir" value="${senchadir}"/>
        </x-generate>
        
        <if>
            <equals arg1="${args.isext6}" arg2="true" />
            <then>
                <x-generate dir="${framework.config.dir}/templates/starter-package" todir="${args.path}"
                            store="${args.path}/${senchadir}/package/codegen.json"
                            basedir="${args.path}">
                    <param name="pkgName" value="${args.name}"/>
                    <param name="pkgType" value="${args.type}"/>
                    <param name="extRelPath" value="${ext.rel.path}"/>
                    <param name="touchRelPath" value="${touch.rel.path}"/>
                    <param name="senchadir" value="${senchadir}"/>
                </x-generate>
            </then>
        </if>

        <if>
            <not>
                <equals arg1="${args.type}" arg2="theme" />
            </not>
            <then>
                <delete file="${args.path}/overrides/init.js" />           
            </then>
        </if>

        <x-property-file file="${args.path}/${senchadir}/package/sencha.cfg">
            <entry type="string" key="package.cmd.version" operation="="
                   value="${cmd.version}"/>
        </x-property-file>
    </target>

    <target name="package-add-to-requires">
        <if>
            <equals arg1="${args.addToRequires}" arg2="true" />
            <then>
                <local name="app.json.package.data" />
                <if>
                    <not>
                        <resourcecontains resource="${app.dir}/app.json" substring="&quot;${args.name}&quot;" />
                    </not>
                    <then>
                        <x-echo level="info">Adding package ${args.name} as app dependency</x-echo>
                        <if>
                            <resourcecontains resource="${app.dir}/app.json" substring="&quot;requires&quot;" />
                            <then>
                                <property name="app.json.package.data"><![CDATA[
        "${args.name}"
    ]]]></property>
                                <replaceregexp file="${app.dir}/app.json" match="(&quot;requires&quot;\s*:\s*\[\s*)(((&quot;.*&quot;)\,*\s*)*)(\s*\])" replace="\1\2${app.json.package.data}" />
                                <replaceregexp file="${app.dir}/app.json" match="&quot;\s*\n\s*&quot;" replace="&quot;\,${line.separator}        &quot;" />
                            </then>
                            <else>
                                <property name="app.json.package.data"><![CDATA[{
    /**
     * The list of required packages (with optional versions; default is "latest").
     *
     * For example,
     *
     *      "requires": [
     *          "charts"
     *      ]
     */
    "requires": [
        "${args.name}"
    ],
]]></property>
                                <replaceregexp file="${app.dir}/app.json" match="\{" replace="${app.json.package.data}" />
                            </else>
                        </if>
                    </then>
                </if>
            </then>
        </if>
    </target>

    <!-- ****************************************************************** -->

    <target name="package-build" depends="init-package-plugin">
        <!--default some variables to empty string if not supplied-->
        <property name="package.base.names" value=""/>
        <property name="package.requires.names" value=""/>

        <if>
            <isset property="args.clean"/>
            <then>
                <ant dir="${package.dir}"
                     inheritall="true"
                     inheritrefs="true">
                    <target name="clean"/>
                    <target name="build"/>
                </ant>
            </then>
            <else>
                <ant dir="${package.dir}"
                     inheritall="true"
                     inheritrefs="true">
                    <target name="build"/>
                </ant>
            </else>
        </if>
    </target>

    <!-- ****************************************************************** -->

    <target name="package-upgrade" depends="init-package-plugin">
        <echo>Upgrading package ${args.name} ...</echo>
        <local name="ext.rel.path"/>
        <local name="touch.rel.path"/>
        
        <x-get-relative-path from="${args.path}" to="${ext.dir}"
                             property="ext.rel.path"/>
        
        <x-get-relative-path from="${args.path}" to="${touch.dir}"
                             property="touch.rel.path"/>

        <x-generate dir="${cmd.dir}/templates/SenchaCommon"
                    todir="${args.path}/${senchadir}/package"
                    store="${args.path}/${senchadir}/package/codegen.json"
                    basedir="${args.path}">
            <param name="pkgName" value="${args.name}"/>
            <param name="pkgType" value="${args.type}"/>
            <param name="extRelPath" value="${ext.rel.path}"/>
            <param name="touchRelPath" value="${touch.rel.path}"/>
            <param name="senchadir" value="${senchadir}"/>
        </x-generate>

        <x-generate dir="${cmd.dir}/templates/package"
                    todir="${args.path}"
                    store="${args.path}/${senchadir}/package/codegen.json"
                    basedir="${args.path}">
            <param name="pkgName" value="${args.name}"/>
            <param name="pkgType" value="${args.type}"/>
            <param name="extRelPath" value="${ext.rel.path}"/>
            <param name="touchRelPath" value="${touch.rel.path}"/>
            <param name="senchadir" value="${senchadir}"/>
        </x-generate>

        <x-property-file file="${args.path}/${senchadir}/package/sencha.cfg">
            <entry type="string"
                   operation="="
                   key="package.cmd.version" 
                   value="${cmd.version}"/>
        </x-property-file>
        
        <if>
            <x-is-true value="${args.shouldAddNamespace}" />
            <then>
                <local name="package.namespace.content" />
                <property name="package.namespace.content"><![CDATA[{
    /**
     * The namespace of this package.
     *
     * As a general rule, all classes that belong to this package should be under this namespace
     * if multiple namespaces are part of this package, set this to "".
     */
    "namespace": "${args.namespace}",

]]></property>
                <replaceregexp file="${args.path}/package.json" match="\{" replace="${package.namespace.content}" />
            </then>
        </if>
    </target>

</project>
