Monday 27 May 2013

Device detection

Device device = DeviceDetectionUtil.detectDevice(request);

Sunday 5 May 2013

build multiple service xml files via build-common-pluginxml modification

To build multiple service xml files modify build-common-plugin.xml. Plz find modified build-common-plugin.xml of Liferay 6.1.20--ce-GA2.

<?xml version="1.0"?>
<!DOCTYPE project>

<project name="build-common-plugin" xmlns:antelope="antlib:ise.antelope.tasks">
    <import file="build-common.xml" />
    <property name="service.dir" value="${basedir}/docroot/WEB-INF" />
    <if>
        <available file="docroot/WEB-INF/liferay-plugin-package.properties" />
        <then>
            <property file="docroot/WEB-INF/liferay-plugin-package.properties" prefix="plugin-package" />

            <property name="plugin.version" value="${plugin-package.module-incremental-version}" />
            <property name="plugin.jars" value="${plugin-package.portal-dependency-jars}" />
            <property name="plugin.tlds" value="${plugin-package.portal-dependency-tlds}" />
        </then>
    </if>

    <antelope:stringutil string="${basedir}" property="plugin.name.beginindex">
        <antelope:lastindexof string="${file.separator}" />
    </antelope:stringutil>

    <antelope:math
        datatype="int"
        operand1="${plugin.name.beginindex}"
        operand2="1"
        operation="+"
        result="plugin.name.beginindex"
    />

    <antelope:stringutil string="${basedir}" property="plugin.name">
        <antelope:substring beginindex="${plugin.name.beginindex}" />
    </antelope:stringutil>

    <if>
        <antelope:endswith string="${plugin.name}" with="-client" />
        <then>
            <property name="plugin.file" value="${project.dir}/dist/${plugin.name}-${lp.version}.${plugin.version}${lp.version.file.suffix}.jar" />
            <property name="plugin.src.file" value="${project.dir}/dist/${plugin.name}-src-${lp.version}.${plugin.version}${lp.version.file.suffix}.zip" />
        </then>
        <else>
            <property name="plugin.file" value="${project.dir}/dist/${plugin.name}-${lp.version}.${plugin.version}${lp.version.file.suffix}.war" />
            <property name="plugin.src.file" value="${project.dir}/dist/${plugin.name}-src-${lp.version}.${plugin.version}${lp.version.file.suffix}.zip" />
        </else>
    </if>

    <target name="all">
        <antcall target="clean" />
        <antcall target="deploy" />
    </target>

    <target name="build-client">
        <property name="client.url" value="http://localhost:8080/${plugin.name}/api/axis" />

        <echo message="Make sure the server is listening on ${client.url}." />
        <echo message="" />

        <mkdir dir="docroot/WEB-INF/client/src" />

        <java
            classname="com.liferay.portal.tools.PortalClientBuilder"
            classpathref="portal.classpath"
            failonerror="true"
            fork="true"
            newenvironment="true"
        >
            <jvmarg value="-Dexternal-properties=com/liferay/portal/tools/dependencies/portal-tools.properties" />
            <arg value="docroot/WEB-INF/server-config.wsdd" />
            <arg value="docroot/WEB-INF/client/src" />
            <arg value="docroot/WEB-INF/client/namespace-mapping.properties" />
            <arg value="${client.url}" />
        </java>

        <mkdir dir="docroot/WEB-INF/client/classes" />

        <antcall target="compile-java">
            <param name="javac.classpathref" value="portal.classpath" />
            <param name="javac.destdir" value="docroot/WEB-INF/client/classes" />
            <param name="javac.srcdir" value="docroot/WEB-INF/client/src" />
        </antcall>

        <zip destfile="docroot/WEB-INF/client/${plugin.name}-client.jar">
            <fileset dir="docroot/WEB-INF/client/classes" />
            <fileset dir="docroot/WEB-INF/client/src" />
        </zip>

        <delete dir="docroot/WEB-INF/client/classes" />
        <delete dir="docroot/WEB-INF/client/src" />
    </target>

    <target name="build-db">
        <java
            classname="com.liferay.portal.tools.DBBuilder"
            classpathref="portal.classpath"
            fork="true"
            maxmemory="384m"
            newenvironment="true"
        >
            <arg value="-Dexternal-properties=com/liferay/portal/tools/dependencies/portal-tools.properties" />
            <arg value="db.database.name=${database.name}" />
            <arg value="db.database.types=${database.types}" />
            <arg value="db.sql.dir=docroot/WEB-INF/sql" />
        </java>

        <delete file="velocity.log" quiet="true" />
    </target>

    <target name="build-lang">
        <antcall target="build-lang-cmd">
            <param name="lang.dir" value="docroot/WEB-INF/src/content" />
            <param name="lang.file" value="Language" />
            <param name="lang.translate" value="true" />
        </antcall>
    </target>

    <target name="build-lang-cmd">
        <java
            classname="com.liferay.portal.tools.LangBuilder"
            classpathref="portal.classpath"
            fork="true"
            newenvironment="true"
        >
            <jvmarg value="-Dexternal-properties=com/liferay/portal/tools/dependencies/portal-tools.properties" />
            <jvmarg value="-Dfile.encoding=UTF-8" />
            <jvmarg value="-Duser.country=US" />
            <jvmarg value="-Duser.language=en" />
            <arg value="lang.dir=${lang.dir}" />
            <arg value="lang.file=${lang.file}" />
            <arg value="lang.plugin=true" />
            <arg value="lang.translate=${lang.translate}" />
        </java>

        <copy file="${lang.dir}/${lang.file}.properties" tofile="${lang.dir}/${lang.file}_en.properties" />
    </target>
    <!-- Custom service build start here -->
    <target name="build-service">
        <foreach target="build-service-liferay" param="service.input.file" inheritall="true" inheritrefs="true">
            <path>   
                <fileset dir="${service.dir}" includes="**/service**.xml" excludes="**/classess**/service*.xml" erroronmissingdir="false"></fileset>
            </path>
        </foreach>
    </target>
    <!-- END -->
    <target name="build-service-liferay">
        <mkdir dir="docroot/WEB-INF/classes" />
        <mkdir dir="docroot/WEB-INF/lib" />
        <mkdir dir="docroot/WEB-INF/service" />
        <mkdir dir="docroot/WEB-INF/sql" />
        <mkdir dir="docroot/WEB-INF/src" />

        <copy todir="docroot/WEB-INF/classes">
            <fileset dir="docroot/WEB-INF/src" excludes="**/*.java" />
        </copy>

        <path id="service.classpath">
            <path refid="lib.classpath" />
            <path refid="portal.classpath" />
            <fileset dir="${app.server.lib.portal.dir}" includes="commons-digester.jar,commons-lang.jar,easyconf.jar" />
            <fileset dir="docroot/WEB-INF/lib" includes="*.jar" />
            <pathelement location="docroot/WEB-INF/classes" />
        </path>

        <if>
            <not>
                <isset property="service.input.file" />
            </not>
            <then>
                <property name="service.input.file" value="${basedir}/docroot/WEB-INF/service.xml" />
            </then>
        </if>

        <java
            classname="com.liferay.portal.tools.servicebuilder.ServiceBuilder"
            classpathref="service.classpath"
            fork="true"
            newenvironment="true"
            outputproperty="service.test.output"
        >
            <jvmarg value="-Xms128m" />
            <jvmarg value="-Xmx512m" />
            <jvmarg value="-Xss2048k" />
            <jvmarg value="-XX:MaxPermSize=512m" />
            <arg value="-Dexternal-properties=com/liferay/portal/tools/dependencies/portal-tools.properties" />
            <arg value="-Dorg.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JLogger" />
            <arg value="service.input.file=${service.input.file}" />
            <arg value="service.hbm.file=${basedir}/docroot/WEB-INF/src/META-INF/portlet-hbm.xml" />
            <arg value="service.orm.file=${basedir}/docroot/WEB-INF/src/META-INF/portlet-orm.xml" />
            <arg value="service.model.hints.file=${basedir}/docroot/WEB-INF/src/META-INF/portlet-model-hints.xml" />
            <arg value="service.spring.file=${basedir}/docroot/WEB-INF/src/META-INF/portlet-spring.xml" />
            <arg value="service.spring.base.file=${basedir}/docroot/WEB-INF/src/META-INF/base-spring.xml" />
            <arg value="service.spring.cluster.file=${basedir}/docroot/WEB-INF/src/META-INF/cluster-spring.xml" />
            <arg value="service.spring.dynamic.data.source.file=${basedir}/docroot/WEB-INF/src/META-INF/dynamic-data-source-spring.xml" />
            <arg value="service.spring.hibernate.file=${basedir}/docroot/WEB-INF/src/META-INF/hibernate-spring.xml" />
            <arg value="service.spring.infrastructure.file=${basedir}/docroot/WEB-INF/src/META-INF/infrastructure-spring.xml" />
            <arg value="service.spring.shard.data.source.file=${basedir}/docroot/WEB-INF/src/META-INF/shard-data-source-spring.xml" />
            <arg value="service.api.dir=${basedir}/docroot/WEB-INF/service" />
            <arg value="service.impl.dir=${basedir}/docroot/WEB-INF/src" />
            <arg value="service.json.file=${basedir}/docroot/js/service.js" />
            <arg value="service.sql.dir=${basedir}/docroot/WEB-INF/sql" />
            <arg value="service.sql.file=tables.sql" />
            <arg value="service.sql.indexes.file=indexes.sql" />
            <arg value="service.sql.indexes.properties.file=indexes.properties" />
            <arg value="service.sql.sequences.file=sequences.sql" />
            <arg value="service.auto.namespace.tables=true" />
            <arg value="service.bean.locator.util=com.liferay.util.bean.PortletBeanLocatorUtil" />
            <arg value="service.props.util=com.liferay.util.service.ServiceProps" />
            <arg value="service.plugin.name=${plugin.name}" />
            <arg value="service.target.entity.name=${service.target.entity.name}" />
        </java>

        <echo>${service.test.output}</echo>

        <if>
            <contains string="${service.test.output}" substring="Error" />
            <then>
                <fail>Service Builder generated exceptions.</fail>
            </then>
        </if>

        <delete file="ServiceBuilder.temp" />

        <mkdir dir="docroot/WEB-INF/service-classes" />

        <path id="service.classpath">
            <fileset dir="${app.server.lib.global.dir}" includes="*.jar" />
            <fileset dir="${project.dir}/lib" includes="activation.jar,jsp-api.jar,mail.jar,servlet-api.jar" />
            <fileset dir="docroot/WEB-INF/lib" excludes="${plugin.name}-service.jar" includes="*.jar" />
        </path>

        <antcall target="compile-java">
            <param name="javac.classpathref" value="service.classpath" />
            <param name="javac.destdir" value="docroot/WEB-INF/service-classes" />
            <param name="javac.srcdir" value="docroot/WEB-INF/service" />
            <reference refid="service.classpath" torefid="service.classpath" />
        </antcall>

        <zip
            basedir="docroot/WEB-INF/service-classes"
            destfile="docroot/WEB-INF/lib/${plugin.name}-service.jar"
        />

        <delete dir="docroot/WEB-INF/service-classes" />
    </target>

    <target name="build-wsdd" depends="compile">
        <path id="wsdd.classpath">
            <path refid="lib.classpath" />
            <path refid="portal.classpath" />
            <fileset dir="docroot/WEB-INF/lib" includes="*.jar" />
            <pathelement location="docroot/WEB-INF/classes" />
        </path>

        <java
            classname="com.liferay.portal.tools.WSDDBuilder"
            classpathref="wsdd.classpath"
            fork="true"
            maxmemory="256m"
            newenvironment="true"
        >
            <jvmarg value="-Dexternal-properties=com/liferay/portal/tools/dependencies/portal-tools.properties" />
            <jvmarg value="-Dorg.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JLogger" />
            <arg value="wsdd.input.file=docroot/WEB-INF/service.xml" />
            <arg value="wsdd.server.config.file=docroot/WEB-INF/server-config.wsdd" />
            <arg value="wsdd.service.namespace=Plugin" />
            <arg value="wsdd.output.path=docroot/WEB-INF/src/" />
        </java>
    </target>

    <target name="build-wsdl">
        <for param="wsdl.full.path">
            <path>
                <fileset dir="." includes="docroot/WEB-INF/wsdl/*.wsdl" />
            </path>
            <sequential>
                <tstamp>
                    <format property="tstamp.value" pattern="yyyyMMddkkmmssSSS" />
                </tstamp>

                <mkdir dir="${tstamp.value}" />

                <taskdef classpathref="portal.classpath" resource="axis-tasks.properties" />

                <axis-wsdl2java
                    output="${tstamp.value}"
                    url="@{wsdl.full.path}"
                />

                <path id="plugin-lib.classpath">
                    <fileset dir="docroot/WEB-INF/lib" includes="*.jar" />
                    <pathelement location="docroot/WEB-INF/classes" />
                </path>

                <antcall target="compile-java">
                    <param name="javac.classpathref" value="plugin.classpath" />
                    <param name="javac.destdir" value="${tstamp.value}" />
                    <param name="javac.srcdir" value="${tstamp.value}" />
                    <reference refid="plugin-lib.classpath" torefid="plugin-lib.classpath" />
                </antcall>

                <antelope:stringutil string="@{wsdl.full.path}" property="wsdl.name.beginindex">
                    <antelope:lastindexof string="${file.separator}" />
                </antelope:stringutil>

                <antelope:math
                    datatype="int"
                    operand1="${wsdl.name.beginindex}"
                    operand2="1"
                    operation="+"
                    result="wsdl.name.beginindex"
                />

                <antelope:stringutil string="@{wsdl.full.path}" property="wsdl.file">
                    <antelope:substring beginindex="${wsdl.name.beginindex}" />
                </antelope:stringutil>

                <antelope:stringutil string="@{wsdl.full.path}" property="wsdl.name.endindex">
                    <antelope:lastindexof string="." />
                </antelope:stringutil>

                <antelope:stringutil string="@{wsdl.full.path}" property="wsdl.name">
                    <antelope:substring beginindex="${wsdl.name.beginindex}" endindex="${wsdl.name.endindex}" />
                </antelope:stringutil>

                <jar
                    basedir="${tstamp.value}"
                    jarfile="docroot/WEB-INF/lib/${wsdl.name}-ws.jar"
                />

                <delete dir="${tstamp.value}" />
            </sequential>
        </for>
    </target>

    <target name="build-xsd">
        <tstamp>
            <format property="tstamp.value" pattern="yyyyMMddkkmmssSSS" />
        </tstamp>

        <mkdir dir="${tstamp.value}" />

        <path id="plugin-lib.classpath">
            <fileset dir="${app.server.lib.portal.dir}" includes="xbean.jar" />
            <fileset dir="docroot/WEB-INF/lib" includes="*.jar" />
            <pathelement location="docroot/WEB-INF/classes" />
        </path>

        <taskdef classname="org.apache.xmlbeans.impl.tool.XMLBean" classpathref="portal.classpath" name="xmlbean" />

        <xmlbean
            classgendir="${tstamp.value}"
            classpathref="plugin-lib.classpath"
            srcgendir="${tstamp.value}"
        >
            <fileset dir="docroot/WEB-INF/xsd" includes="**/*.*" />
        </xmlbean>

        <zip
            basedir="${tstamp.value}"
            destfile="docroot/WEB-INF/lib/${plugin.name}-xbean.jar"
        />

        <delete dir="${tstamp.value}" />
    </target>

    <target name="clean" description="clean">
        <delete dir="docroot/WEB-INF/classes" />

        <if>
            <and>
                <available file="docroot/WEB-INF/.gitignore" />
            </and>
            <then>
                <loadfile property=".gitignore.content" srcFile="docroot/WEB-INF/.gitignore" />

                <if>
                    <contains string="${.gitignore.content}" substring="/lib" />
                    <then>
                        <delete dir="docroot/WEB-INF/lib" />
                    </then>
                </if>
            </then>
        </if>

        <if>
            <and>
                <available file="docroot/WEB-INF/.svn" />
                <not>
                    <available file="docroot/WEB-INF/lib/.svn" />
                </not>
            </and>
            <then>
                <delete dir="docroot/WEB-INF/lib" />
            </then>
        </if>

        <delete dir="test-classes" />
        <delete dir="test-results" />
        <delete dir="tmp" />
        <delete file="${plugin.file}" />
        <delete file="${plugin.src.file}" />

        <delete includeemptydirs="true">
            <fileset dir="docroot" includes="**/.sass-cache/**" />
            <fileset dir="docroot" includes="**/.sprite.png" />
            <fileset dir="docroot" includes="**/.sprite.properties" />
            <fileset dir="docroot" includes="**/Thumbs.db" />
        </delete>

        <antcall target="clean-portal-dependencies" />
    </target>

    <target name="clean-portal-dependencies">
        <if>
            <available file="docroot/WEB-INF/lib" />
            <then>
                <delete>
                    <fileset dir="docroot/WEB-INF/lib" includes="${required.portal.jars}" />
                    <fileset dir="docroot/WEB-INF/lib" includes="${plugin.jars}" />
                </delete>
            </then>
        </if>

        <if>
            <available file="docroot/WEB-INF/tld" />
            <then>
                <delete>
                    <fileset dir="docroot/WEB-INF/tld" includes="${plugin.tlds}" />
                </delete>
            </then>
        </if>

        <if>
            <available file="tmp/WEB-INF/lib" />
            <then>
                <delete>
                    <fileset dir="tmp/WEB-INF/lib" includes="${required.portal.jars}" />
                    <fileset dir="tmp/WEB-INF/lib" includes="${plugin.jars}" />
                </delete>
            </then>
        </if>

        <if>
            <available file="tmp/WEB-INF/tld" />
            <then>
                <delete>
                    <fileset dir="tmp/WEB-INF/tld" includes="${plugin.tlds}" />
                </delete>
            </then>
        </if>
    </target>

    <target name="compile">
        <antcall target="merge" />

        <mkdir dir="docroot/WEB-INF/classes" />
        <mkdir dir="docroot/WEB-INF/lib" />

        <copy todir="docroot/WEB-INF/lib">
            <fileset dir="${app.server.lib.portal.dir}" includes="${plugin.jars}" />
        </copy>

        <if>
            <isset property="plugin-package.required-deployment-contexts" />
            <then>
                <for list="${plugin-package.required-deployment-contexts}" param="required.deployment.context">
                    <sequential>
                        <if>
                            <available file="${project.dir}/hooks/@{required.deployment.context}/docroot/WEB-INF/lib/@{required.deployment.context}-service.jar" />
                            <then>
                                <copy
                                    file="${project.dir}/hooks/@{required.deployment.context}/docroot/WEB-INF/lib/@{required.deployment.context}-service.jar"
                                    todir="docroot/WEB-INF/lib"
                                    overwrite="true"
                                />
                            </then>
                            <elseif>
                                <available file="${project.dir}/portlets/@{required.deployment.context}/docroot/WEB-INF/lib/@{required.deployment.context}-service.jar" />
                                <then>
                                    <copy
                                        file="${project.dir}/portlets/@{required.deployment.context}/docroot/WEB-INF/lib/@{required.deployment.context}-service.jar"
                                        todir="docroot/WEB-INF/lib"
                                        overwrite="true"
                                    />
                                </then>
                            </elseif>
                            <elseif>
                                <available file="${project.dir}/webs/@{required.deployment.context}/docroot/WEB-INF/lib/@{required.deployment.context}-service.jar" />
                                <then>
                                    <copy
                                        file="${project.dir}/webs/@{required.deployment.context}/docroot/WEB-INF/lib/@{required.deployment.context}-service.jar"
                                        todir="docroot/WEB-INF/lib"
                                        overwrite="true"
                                    />
                                </then>
                            </elseif>
                        </if>
                    </sequential>
                </for>
            </then>
        </if>

        <copy todir="docroot/WEB-INF/tld">
            <fileset dir="${app.server.portal.dir}/WEB-INF/tld" includes="${plugin.tlds}" />
        </copy>

        <if>
            <available file="docroot/WEB-INF/src" />
            <then>
                <if>
                    <available file="tmp" />
                    <then>
                        <path id="plugin-lib.classpath">
                            <fileset dir="docroot/WEB-INF/lib" includes="*.jar" />
                            <fileset dir="tmp/WEB-INF/lib" includes="*.jar" />
                            <pathelement location="docroot/WEB-INF/classes" />
                            <pathelement location="tmp/WEB-INF/classes" />
                        </path>
                    </then>
                    <else>
                        <path id="plugin-lib.classpath">
                            <fileset dir="docroot/WEB-INF/lib" includes="*.jar" />
                            <pathelement location="docroot/WEB-INF/classes" />
                        </path>
                    </else>
                </if>

                <copy todir="docroot/WEB-INF/lib">
                    <fileset dir="${app.server.lib.portal.dir}" includes="${required.portal.jars}" />
                </copy>

                <if>
                    <available file="docroot/WEB-INF/lib/portal-impl.jar" />
                    <then>
                        <fail>
.

Detected inclusion of portal-impl.jar in WEB-INF/lib.

portal-impl.jar is designed with a large number of singleton classes which are
instantiated on the basis that they will exist alone in the application server.

While compile time issues may be resolved, portlets cannot be made to work by
simply adding portal-impl.jar, because doing so violates the above assumption,
and the resulting problems will be extremely difficult to debug.

Please find a solution that does not require portal-impl.jar.
                        </fail>
                    </then>
                </if>

                <antcall target="compile-java">
                    <param name="javac.classpathref" value="plugin.classpath" />
                    <param name="javac.destdir" value="docroot/WEB-INF/classes" />
                    <param name="javac.srcdir" value="docroot/WEB-INF/src" />
                    <reference refid="plugin-lib.classpath" torefid="plugin-lib.classpath" />
                </antcall>
            </then>
        </if>

        <antcall target="merge" />
    </target>

    <target name="compile-test">
        <antcall target="compile-test-integration" inheritall="false" />
        <antcall target="compile-test-unit" inheritall="false" />
    </target>

    <target name="compile-test-cmd">
        <if>
            <available file="test/${test.type}" type="dir" />
            <then>
                <mkdir dir="test-classes/${test.type}" />
                <mkdir dir="test-results/${test.type}" />

                <copy todir="test-classes/${test.type}">
                    <fileset dir="test" includes="*.properties" />
                    <fileset dir="test/${test.type}" includes="**/*.png,**/*.properties,**/*.xml" />
                </copy>

                <if>
                    <available file="tmp" />
                    <then>
                        <path id="plugin-lib.classpath">
                            <fileset dir="docroot/WEB-INF/lib" includes="*.jar" />
                            <fileset dir="tmp/WEB-INF/lib" includes="*.jar" />
                            <pathelement location="docroot/WEB-INF/classes" />
                            <pathelement location="tmp/WEB-INF/classes" />
                        </path>
                    </then>
                    <else>
                        <path id="plugin-lib.classpath">
                            <fileset dir="docroot/WEB-INF/lib" includes="*.jar" />
                            <pathelement location="docroot/WEB-INF/classes" />
                        </path>
                    </else>
                </if>

                <antcall target="compile-java">
                    <param name="javac.classpathref" value="test.classpath" />
                    <param name="javac.destdir" value="test-classes/${test.type}" />
                    <param name="javac.srcdir" value="test/${test.type}" />
                    <reference refid="plugin-lib.classpath" torefid="plugin-lib.classpath" />
                </antcall>
            </then>
        </if>
    </target>

    <target name="compile-test-integration">
        <ant target="compile-test-cmd">
            <property name="test.type" value="integration" />
        </ant>
    </target>

    <target name="compile-test-unit">
        <ant target="compile-test-cmd">
            <property name="test.type" value="unit" />
        </ant>
    </target>

    <target name="deploy" depends="war">
        <copy file="${plugin.file}" todir="${auto.deploy.dir}" />
    </target>

    <target name="direct-deploy" depends="war">
        <if>
            <antelope:endswith string="${plugin.name}" with="-ext" />
            <then>
                <java
                    classname="com.liferay.portal.tools.deploy.ExtDeployer"
                    classpathref="portal.classpath"
                    fork="true"
                    newenvironment="true"
                >

                    <!-- Required Arguments -->

                    <jvmarg value="-Dexternal-properties=com/liferay/portal/tools/dependencies/portal-tools.properties" />
                    <jvmarg value="-Dliferay.lib.portal.dir=${app.server.lib.portal.dir}" />
                    <jvmarg value="-Ddeployer.base.dir=${project.dir}/dist" />
                    <jvmarg value="-Ddeployer.dest.dir=${app.server.deploy.dir}" />
                    <jvmarg value="-Ddeployer.app.server.type=${app.server.type}" />
                    <jvmarg value="-Ddeployer.unpack.war=${auto.deploy.unpack.war}" />
                    <jvmarg value="-Ddeployer.file.pattern=${plugin.name}-*.war" />

                    <!-- Optional Arguments -->

                    <jvmarg value="-Ddeployer.tomcat.lib.dir=${app.server.tomcat.lib.global.dir}" />

                    <!-- Dependent Libraries -->

                    <arg value="${app.server.lib.portal.dir}/util-java.jar" />
                </java>
            </then>
            <elseif>
                <antelope:endswith string="${plugin.name}" with="-hook" />
                <then>
                    <java
                        classname="com.liferay.portal.tools.deploy.HookDeployer"
                        classpathref="portal.classpath"
                        fork="true"
                        newenvironment="true"
                    >

                        <!-- Required Arguments -->

                        <jvmarg value="-Dexternal-properties=com/liferay/portal/tools/dependencies/portal-tools.properties" />
                        <jvmarg value="-Dliferay.lib.portal.dir=${app.server.lib.portal.dir}" />
                        <jvmarg value="-Ddeployer.base.dir=${project.dir}/dist" />
                        <jvmarg value="-Ddeployer.dest.dir=${app.server.deploy.dir}" />
                        <jvmarg value="-Ddeployer.app.server.type=${app.server.type}" />
                        <jvmarg value="-Ddeployer.unpack.war=${auto.deploy.unpack.war}" />
                        <jvmarg value="-Ddeployer.file.pattern=${plugin.name}-*.war" />

                        <!-- Optional Arguments -->

                        <jvmarg value="-Ddeployer.tomcat.lib.dir=${app.server.tomcat.lib.global.dir}" />

                        <!-- Dependent Libraries -->

                        <arg value="${app.server.lib.portal.dir}/util-java.jar" />
                    </java>
                </then>
            </elseif>
            <elseif>
                <antelope:endswith string="${plugin.name}" with="-layouttpl" />
                <then>
                    <java
                        classname="com.liferay.portal.tools.deploy.LayoutTemplateDeployer"
                        classpathref="portal.classpath"
                        fork="true"
                        newenvironment="true"
                    >

                        <!-- Required Arguments -->

                        <jvmarg value="-Dexternal-properties=com/liferay/portal/tools/dependencies/portal-tools.properties" />
                        <jvmarg value="-Dliferay.lib.portal.dir=${app.server.lib.portal.dir}" />
                        <jvmarg value="-Ddeployer.base.dir=${project.dir}/dist" />
                        <jvmarg value="-Ddeployer.dest.dir=${app.server.deploy.dir}" />
                        <jvmarg value="-Ddeployer.app.server.type=${app.server.type}" />
                        <jvmarg value="-Ddeployer.unpack.war=${auto.deploy.unpack.war}" />
                        <jvmarg value="-Ddeployer.file.pattern=${plugin.name}-*.war" />
                    </java>
                </then>
            </elseif>
            <elseif>
                <antelope:endswith string="${plugin.name}" with="-portlet" />
                <then>
                    <java
                        classname="com.liferay.portal.tools.deploy.PortletDeployer"
                        classpathref="portal.classpath"
                        fork="true"
                        newenvironment="true"
                    >

                        <!-- Required Arguments -->

                        <jvmarg value="-Dexternal-properties=com/liferay/portal/tools/dependencies/portal-tools.properties" />
                        <jvmarg value="-Dliferay.lib.portal.dir=${app.server.lib.portal.dir}" />
                        <jvmarg value="-Ddeployer.base.dir=${project.dir}/dist" />
                        <jvmarg value="-Ddeployer.dest.dir=${app.server.deploy.dir}" />
                        <jvmarg value="-Ddeployer.app.server.type=${app.server.type}" />
                        <jvmarg value="-Ddeployer.aui.taglib.dtd=${app.server.portal.dir}/WEB-INF/tld/aui.tld" />
                        <jvmarg value="-Ddeployer.portlet.taglib.dtd=${app.server.portal.dir}/WEB-INF/tld/liferay-portlet.tld" />
                        <jvmarg value="-Ddeployer.portlet-ext.taglib.dtd=${app.server.portal.dir}/WEB-INF/tld/liferay-portlet-ext.tld" />
                        <jvmarg value="-Ddeployer.security.taglib.dtd=${app.server.portal.dir}/WEB-INF/tld/liferay-security.tld" />
                        <jvmarg value="-Ddeployer.theme.taglib.dtd=${app.server.portal.dir}/WEB-INF/tld/liferay-theme.tld" />
                        <jvmarg value="-Ddeployer.ui.taglib.dtd=${app.server.portal.dir}/WEB-INF/tld/liferay-ui.tld" />
                        <jvmarg value="-Ddeployer.util.taglib.dtd=${app.server.portal.dir}/WEB-INF/tld/liferay-util.tld" />
                        <jvmarg value="-Ddeployer.unpack.war=${auto.deploy.unpack.war}" />
                        <jvmarg value="-Ddeployer.custom.portlet.xml=${auto.deploy.custom.portlet.xml}" />
                        <jvmarg value="-Ddeployer.file.pattern=${plugin.name}-*.war" />

                        <!-- Optional Arguments -->

                        <jvmarg value="-Ddeployer.tomcat.lib.dir=${app.server.tomcat.lib.global.dir}" />

                        <!-- Dependent Libraries -->

                        <arg value="${app.server.lib.portal.dir}/util-bridges.jar" />
                        <arg value="${app.server.lib.portal.dir}/util-java.jar" />
                        <arg value="${app.server.lib.portal.dir}/util-taglib.jar" />
                    </java>
                </then>
            </elseif>
            <elseif>
                <antelope:endswith string="${plugin.name}" with="-theme" />
                <then>
                    <java
                        classname="com.liferay.portal.tools.deploy.ThemeDeployer"
                        classpathref="portal.classpath"
                        fork="true"
                        newenvironment="true"
                    >

                        <!-- Required Arguments -->

                        <jvmarg value="-Dexternal-properties=com/liferay/portal/tools/dependencies/portal-tools.properties" />
                        <jvmarg value="-Dliferay.lib.portal.dir=${app.server.lib.portal.dir}" />
                        <jvmarg value="-Ddeployer.base.dir=${project.dir}/dist" />
                        <jvmarg value="-Ddeployer.dest.dir=${app.server.deploy.dir}" />
                        <jvmarg value="-Ddeployer.app.server.type=${app.server.type}" />
                        <jvmarg value="-Ddeployer.theme.taglib.dtd=${app.server.portal.dir}/WEB-INF/tld/liferay-theme.tld" />
                        <jvmarg value="-Ddeployer.util.taglib.dtd=${app.server.portal.dir}/WEB-INF/tld/liferay-util.tld" />
                        <jvmarg value="-Ddeployer.unpack.war=${auto.deploy.unpack.war}" />
                        <jvmarg value="-Ddeployer.file.pattern=${plugin.name}-*.war" />

                        <!-- Optional Arguments -->

                        <jvmarg value="-Ddeployer.tomcat.lib.dir=${app.server.tomcat.lib.global.dir}" />

                        <!-- Dependent Libraries -->

                        <arg value="${app.server.lib.portal.dir}/util-java.jar" />
                        <arg value="${app.server.lib.portal.dir}/util-taglib.jar" />
                    </java>
                </then>
            </elseif>
        </if>
    </target>

    <target name="format-wsdl">
        <for param="wsdl.full.path">
            <path>
                <fileset
                    dir="."
                    includes="docroot/WEB-INF/wsdl/*.wsdl,docroot/WEB-INF/wsdl/**/*.wsdl"
                />
            </path>
            <sequential>
                <java
                    classname="com.liferay.portal.tools.XMLFormatter"
                    classpathref="portal.classpath"
                    fork="true"
                    newenvironment="true"
                >
                    <jvmarg value="-Dexternal-properties=com/liferay/portal/tools/dependencies/portal-tools.properties" />
                    <jvmarg value="-Dxml.formatter.file=@{wsdl.full.path}" />
                    <jvmarg value="-Dxml.formatter.strip.comments=true" />
                </java>
            </sequential>
        </for>
    </target>

    <target name="format-xsd">
        <for param="xsd.full.path">
            <path>
                <fileset
                    dir="."
                    includes="docroot/WEB-INF/xsd/*.xsd,docroot/WEB-INF/xsd/**/*.xsd"
                />
            </path>
            <sequential>
                <java
                    classname="com.liferay.portal.tools.XMLFormatter"
                    classpathref="portal.classpath"
                    fork="true"
                    newenvironment="true"
                >
                    <jvmarg value="-Dexternal-properties=com/liferay/portal/tools/dependencies/portal-tools.properties" />
                    <jvmarg value="-Dxml.formatter.file=@{xsd.full.path}" />
                    <jvmarg value="-Dxml.formatter.strip.comments=true" />
                </java>
            </sequential>
        </for>
    </target>

    <target name="merge" if="original.war.file">
        <if>
            <not>
                <uptodate srcfile="${original.war.file}" targetfile="tmp" />
            </not>
            <then>
                <delete dir="tmp" />
                <mkdir dir="tmp" />

                <mkdir dir="tmp/WEB-INF/classes" />
                <mkdir dir="tmp/WEB-INF/lib" />

                <antcall target="merge-unzip" />

                <copy todir="tmp" overwrite="true">
                    <fileset dir="docroot" />
                </copy>
            </then>
        </if>

        <copy todir="tmp">
            <fileset dir="docroot" />
        </copy>
    </target>

    <target name="merge-unzip">
        <unzip dest="tmp" src="${original.war.file}" />
    </target>

    <target name="shrink-zip-cmd">
        <tstamp>
            <format property="tstamp.value" pattern="yyyyMMddkkmmssSSS" />
        </tstamp>

        <unzip
            dest="${tstamp.value}"
            src="${zip.file.name}"
        >
            <patternset
                excludes="${zip.excludes}"
                includes="${zip.includes}"
            />
        </unzip>

        <zip
            basedir="${tstamp.value}"
            destfile="${zip.file.name}"
        />

        <delete dir="${tstamp.value}" />
    </target>

    <target name="test">
        <delete dir="test-classes" />
        <delete dir="test-results" />

        <antcall target="compile" />
        <antcall target="compile-test" />

        <if>
            <available file="tmp" />
            <then>
                <path id="plugin-lib.classpath">
                    <fileset dir="docroot/WEB-INF/lib" includes="*.jar" />
                    <fileset dir="tmp/WEB-INF/lib" includes="*.jar" />
                    <pathelement location="docroot/WEB-INF/classes" />
                    <pathelement location="tmp/WEB-INF/classes" />
                </path>
            </then>
            <else>
                <path id="plugin-lib.classpath">
                    <fileset dir="docroot/WEB-INF/lib" includes="*.jar" />
                    <pathelement location="docroot/WEB-INF/classes" />
                </path>
            </else>
        </if>

        <antcall target="test-integration" inheritrefs="true" />
        <antcall target="test-unit" inheritrefs="true" />
    </target>

    <target name="test-class" depends="compile,compile-test">
        <if>
            <available file="test/integration" type="dir" />
            <then>
                <resourcecount property="test.integration.count">
                    <fileset dir="test-classes/integration" includes="**/${class}.class" />
                </resourcecount>
            </then>
        </if>

        <if>
            <available file="test/unit" type="dir" />
            <then>
                <resourcecount property="test.unit.count">
                    <fileset dir="test-classes/unit" includes="**/${class}.class" />
                </resourcecount>
            </then>
        </if>

        <if>
            <equals arg1="${test.integration.count}" arg2="1" />
            <then>
                <var name="test.type" value="integration" />
            </then>
            <elseif>
                <equals arg1="${test.unit.count}" arg2="1" />
                <then>
                    <var name="test.type" value="unit" />
                </then>
            </elseif>
            <else>
                <var name="test.type" value="" />
            </else>
        </if>

        <ant target="test-cmd">
            <property name="test.type" value="${test.type}" />
        </ant>
    </target>

    <target name="test-cmd">
        <if>
            <available file="test/${test.type}" type="dir" />
            <then>
                <junit dir="${project.dir}" fork="on" forkmode="once" outputtoformatters="false" printsummary="on" showoutput="true">
                    <sysproperty key="net.sourceforge.cobertura.datafile" file="test-coverage/cobertura.ser" />
                    <jvmarg line="${junit.debug.jpda}" />
                    <jvmarg value="-Xmx1024m" />
                    <jvmarg value="-XX:MaxPermSize=256m" />
                    <jvmarg value="-Dexternal-properties=${test.properties}" />
                    <jvmarg value="-Dfile.encoding=UTF-8" />
                    <jvmarg value="-Djava.net.preferIPv4Stack=true" />
                    <jvmarg value="-Duser.timezone=GMT" />
                    <classpath location="test-coverage" />
                    <classpath refid="test.classpath" />
                    <formatter type="brief" usefile="false" />
                    <formatter type="xml" />
                    <batchtest todir="test-results/${test.type}">
                        <fileset dir="test-classes/${test.type}" includes="**/${class}.class" />
                    </batchtest>
                </junit>
            </then>
        </if>
    </target>

    <target name="test-integration" depends="compile,compile-test-integration">
        <property name="class" value="*Test" />

        <ant target="test-cmd" inheritrefs="true">
            <property name="test.type" value="integration" />
        </ant>
    </target>

    <target name="test-unit" depends="compile,compile-test-unit">
        <property name="class" value="*Test" />

        <ant target="test-cmd" inheritrefs="true">
            <property name="test.type" value="unit" />
        </ant>
    </target>

    <target name="war" depends="compile">
        <mkdir dir="${project.dir}/dist" />

        <if>
            <available file="tmp" />
            <then>
                <property name="docroot.dir" value="tmp" />
            </then>
            <else>
                <property name="docroot.dir" value="docroot" />
            </else>
        </if>

        <delete file="${plugin.file}" />

        <antcall target="clean-portal-dependencies" />

        <if>
            <contains string="${app.server.dir}" substring="glassfish" />
            <then>
                <zip
                    basedir="${docroot.dir}"
                    destfile="${plugin.file}"
                    excludes="**/META-INF/context.xml,${plugins.war.excludes}"
                />
            </then>
            <else>
                <zip
                    basedir="${docroot.dir}"
                    destfile="${plugin.file}"
                    excludes="${plugins.war.excludes}"
                />
            </else>
        </if>

        <if>
            <and>
                <equals arg1="${plugins.src.zip.enabled}" arg2="true" />
            </and>
            <then>
                <zip destfile="${plugin.src.file}">
                    <zipfileset
                        dir="${docroot.dir}"
                        prefix="${plugin.name}-src-${lp.version}.${plugin.version}${lp.version.file.suffix}"
                    />
                </zip>
            </then>
        </if>
    </target>
</project>