Package org.odftoolkit.odfxsltrunnertask

Source Code of org.odftoolkit.odfxsltrunnertask.ODFXSLTRunnerTask$Factory

/************************************************************************
*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER
*
* Copyright 2008, 2010 Oracle and/or its affiliates. All rights reserved.
*
* Use is subject to license terms.
*
* Licensed 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. You can also
* obtain a copy of the License at http://odftoolkit.org/docs/license.txt
*
* 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.
*
************************************************************************/

package org.odftoolkit.odfxsltrunnertask;

// IMPORTANT! You need to compile this class against ant.jar.
// The easiest way to do this is to add ${ant.core.lib} to your project's classpath.
// For example, for a plain Java project with no other dependencies, set in project.properties:
// javac.classpath=${ant.core.lib}

import java.io.File;
import java.util.Iterator;
import java.util.Vector;
import org.odftoolkit.odfxsltrunner.Logger;
import org.odftoolkit.odfxsltrunner.ODFXSLTRunner;
import org.odftoolkit.odfxsltrunner.XSLTParameter;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Task;

import org.apache.tools.ant.taskdefs.Mkdir;

/**
* Ant Taks for applying XSLT style sheets to ODF packages.
*/
public class ODFXSLTRunnerTask extends Task {

    private File m_aStyleSheet = null;
    private File m_aInput = null;
    private File m_aInputFile = null;
    private File m_aOutput = null;
    private File m_aOutputFile = null;
    private String m_aPath = "content.xml";
    private Vector<XSLTParameter> m_aParams = null;
    private Factory m_aFactory = null;
    boolean m_bForce = false;
    boolean m_bTemplate = false;
   
    /**
     * Set input package. The specified path within the package is the source of
     * the transformation.
     *
     * @param aIn Input package
     */
    public void setIn( File aIn )
    {
        m_aInput = aIn;
    }

    /**
     * Set input file. This (XML) file is used directly as source of the
     * transformation.
     *
     * @param aInFile Input File
     */
    public void setInFile( File aInFile )
    {
        m_aInputFile = aInFile;
    }

    /**
     * Set output package. The source of the transformation is stored in a
     * package with this name.
     *
     * @param aOut
     */
    public void setOut( File aOut )
    {
        m_aOutput = aOut;
    }

    /**
     * Set output file. The source of the transformation is stored under this
     * name as plain (XML) file.
     *
     * @param aOutFile
     */
    public void setOutFile( File aOutFile )
    {
        m_aOutputFile = aOutFile;
    }

    /**
     * Set the style sheet to apply.
     *
     * @param aStyle
     */
    public void setStyle( File aStyle )
    {
        m_aStyleSheet = aStyle;
    }

    /**
     * Sets template mode. In template mode, the output package must exist,
     * and the specified path within the output file is replaced with the result
     * of the transformation
     *
     * @param bTemplate Template mode
     */
    public void setTemplate( boolean bTemplate )
    {
        m_bTemplate = bTemplate;
    }
   
    /**
     * Set force mode. In this mode, the style sheet is applied even if the
     * output file or package is newer than the source and the style sheet.
     *
     * @param bForce
     */
    public void setForce( boolean bForce )
    {
        m_bForce = bForce;
    }


    /**
     * Paramter class for nested <param> elements.
     */
    public static class Param implements XSLTParameter
    {
        private String m_aName = null;
        private String m_aValue = null;

        Param()
        {
        }

        /**
         * Set parameter name.
         * @param aName
         */
        public void setName( String aName )
        {
            m_aName = aName;
        }

        /**
         * Set parameter expression.
         *
         * @param aValue
         */
        public void setExpression( String aValue )
        {
            m_aValue = aValue;
        }

        /**
         * Get paramter name.
         *
         * @return paramter name
         */
        public String getName()
        {
            return m_aName;
        }

        /**
         * Get paramter value.
         *
         * @return paramter value.
         */
        public String getValue()
        {
            return m_aValue;
        }
    }

    /**
     * Paramter class for nested <factory> elements.
     */
    public static class Factory
    {
        private String m_aName = null;

        Factory()
        {
        }

        /**
         * Set factory name.
         * @param aName
         */
        public void setName( String aName )
        {
            m_aName = aName;
        }

        /**
         * Get factory name.
         *
         * @return paramter name
         */
        public String getName()
        {
            return m_aName;
        }

    }


    /**
     * Create a new paramter for a nested <param> element.
     *
     * @return new paramter.
     */
    public Param createParam()
    {
        Param aParam = new Param();
        if( m_aParams == null )
            m_aParams = new Vector<XSLTParameter>();
        m_aParams.add( aParam );
        return aParam;
    }

    /**
     * Create a new factory for a nested <factory> element.
     *
     * @return new paramter.
     */
    public Factory createFactory()
    {
        m_aFactory = new Factory();
        return m_aFactory;
    }
   

    public @Override void execute() throws BuildException {
   
        if( m_aStyleSheet == null )
            throw new BuildException( "style attribute must be set", getLocation() );
        if( !m_aStyleSheet.exists() )
            throw new BuildException( "style sheet " + m_aStyleSheet.getAbsolutePath() + " does not exist", getLocation() );

        int m_aInputMode = ODFXSLTRunner.INPUT_MODE_PACKAGE;
        if( m_aInput == null && m_aInputFile == null )
            throw new BuildException( "in or infile attribute must be set", getLocation() );
        else if( m_aInput != null && m_aInputFile != null )
            throw new BuildException( "in and infile attributes must not be set simultaneously", getLocation() );
        if( m_aInputFile != null )
        {
            m_aInput = m_aInputFile;
            m_aInputMode = ODFXSLTRunner.INPUT_MODE_FILE;
        }
        if( !m_aInput.exists() )
            throw new BuildException( "input file " + m_aInput.getAbsolutePath() + " does not exist", getLocation() );
       
        int m_aOutputMode = ODFXSLTRunner.OUTPUT_MODE_COPY_INPUT_PACKAGE;
        if( m_aOutput == null && m_aOutputFile == null )
            throw new BuildException( "out or outfile attribute must be set", getLocation() );
        if( m_aOutput != null && m_aOutputFile != null )
            throw new BuildException( "out and outfile attribute must not be set simultaneously", getLocation() );
        if( m_bTemplate && m_aOutput == null )
            throw new BuildException( "out attribute must be set if template attribute is set", getLocation() );

        if( m_aOutputFile != null )
        {
            m_aOutput = m_aOutputFile;
            m_aOutputMode = ODFXSLTRunner.OUTPUT_MODE_FILE;
        }
        else if( m_bTemplate )
        {
            m_aOutputMode = ODFXSLTRunner.OUTPUT_MODE_TEMPLATE_PACKAGE;
            if( !m_aOutput.exists() )
                throw new BuildException( "output file " + m_aStyleSheet.getAbsolutePath() + " does not exist", getLocation() );
        }
       
        if( m_aParams != null )
        {
            Iterator<XSLTParameter> aIter = m_aParams.iterator();
            while( aIter.hasNext() )
            {
                XSLTParameter aParam = aIter.next();
                if( aParam.getName() == null )
                    throw new BuildException( "parameter name attribute must be set", getLocation() );

                if( aParam.getValue() == null )
                    throw new BuildException( "parameter expression attribute must be set", getLocation() );
            }
        }

        String aFactory = null;
        if( m_aFactory != null )
        {
            aFactory = m_aFactory.getName();
            if( aFactory == null )
                throw new BuildException( "factory name attribute must be set", getLocation() );
        }
       
        if( !m_bForce && m_aOutput.exists() &&
            m_aOutput.lastModified() > m_aInput.lastModified() &&
            m_aOutput.lastModified() > m_aStyleSheet.lastModified())
            return;

        if( !m_aOutput.exists() )
        {
            File aParentFile = m_aOutput.getParentFile();
            if( aParentFile != null )
            {
                Mkdir aMKDir = (Mkdir)getProject().createTask("mkdir");
                aMKDir.setDir(aParentFile);
                aMKDir.init();
                aMKDir.setLocation(getLocation());
                aMKDir.execute();
            }
        }
       
        boolean bError = false;
        try
        {
            ODFXSLTRunner aRunner = new ODFXSLTRunner();
            Logger aLogger = new AntLogger( getProject() );
            bError = aRunner.runXSLT( m_aStyleSheet, m_aParams, m_aInput, m_aInputMode, m_aOutput, m_aOutputMode, m_aPath, aFactory, null, aLogger  );
        }
        catch( Exception e )
        {
            throw new BuildException( e, getLocation() );
        }
        if( bError )
            throw new BuildException( "transformation failed", getLocation() );
    }

}
TOP

Related Classes of org.odftoolkit.odfxsltrunnertask.ODFXSLTRunnerTask$Factory

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.