Package net.rim.tumbler.session

Source Code of net.rim.tumbler.session.BBWPProperties

/*
* Copyright 2010-2011 Research In Motion Limited.
*
* 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
*
* 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 net.rim.tumbler.session;

import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;

import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;

import com.sun.org.apache.xerces.internal.parsers.DOMParser;

import net.rim.tumbler.OSUtils;
import net.rim.tumbler.exception.PackageException;
import net.rim.tumbler.exception.ValidationException;

public class BBWPProperties {
    private static final String NODE_WCP = "wcp";
    private static final String NODE_JAVA = "java";
    private static final String NODE_RAPC = "rapc";
    private static final String NODE_JAR = "jar";
    private static final String NODE_TEMPLATE = "wcp_template";
    private static final String NODE_ADDITIONAL = "additional";
    private static final String NODE_REPOSITORY = "extension_repository";
    private static final String RAPC_EXE = "rapc.exe";
    private static final String RAPC_JAR = "rapc.jar";
    private static final String JAVA_C = "javac";
    private static final String JAVA_C_EXE = "javac.exe";

    private String _rapc;
    private String _javac;
    private String _templateDir;
    private List< String > _imports;
    private String _additional;
    private String _bbwpProperties;
    private String _sessionHome;
    private String _javaHome;
    private String _repositoryDir;

    public BBWPProperties( String bbwpProperties, String sessionHome ) throws Exception {
        // Parse bbwp.properties
        _bbwpProperties = bbwpProperties;
        _sessionHome = sessionHome;
        parsePropertiesFile();

        // Quick validation of property file info
        validate();
    }

    public String getRapc() {
        return _rapc;
    }

    public String getJavac() {
        return _javac;
    }

    public String getJavaHome() {
        return _javaHome;
    }

    public String getTemplateDir() {
        return _templateDir;
    }

    public List< String > getImports() {
        return _imports;
    }

    public String getAdditional() {
        return _additional;
    }

    public String getRepositoryDir() {
        return _repositoryDir;
    }

    private void validate() throws Exception {
        // Check template and archive
        if( !( new File( _templateDir ) ).exists() ) {
            throw new ValidationException( "EXCEPTION_TEMPLATES_NOT_FOUND" );
        }

        // Check rapc path
        if( _rapc.length() == 0 ) {
            throw new ValidationException( "EXCEPTION_RAPC_NOT_FOUND" );
        } else {
            if( OSUtils.isWindows() ) {
                if( !_rapc.equals( RAPC_EXE ) && !_rapc.equals( NODE_RAPC ) ) {
                    if( !( new File( _rapc ) ).exists() ) {
                        throw new ValidationException( "EXCEPTION_RAPC_NOT_FOUND" );
                    }
                }
            } else {
                if( !_rapc.equals( RAPC_JAR ) && !_rapc.equals( NODE_RAPC ) ) {
                    if( !( new File( _rapc ) ).exists() ) {
                        throw new ValidationException( "EXCEPTION_RAPC_NOT_FOUND" );
                    }
                }
            }
        }

        // Check javac path
        if( _javac == null || _javac.length() == 0 ) {
            // For tooling, they will set _javac to empty if they find javac.exe in "Path" environment variable
            // Rapc doesn't depend on this value to locate javac.exe, either
            // throw new ValidationException("EXCEPTION_JAVAC_NOT_FOUND");
        } else {
            if( !_javac.equals( "javac.exe" ) && !_javac.equals( "javac" ) ) {
                String javac = _javac;

                if( javac.startsWith( "\"" ) && javac.endsWith( "\"" ) ) {
                    javac = javac.substring( 1, javac.length() - 1 );
                }

                if( !( new File( javac ) ).exists() ) {
                    throw new ValidationException( "EXCEPTION_JAVAC_NOT_FOUND" );
                }
            }
        }
    }

    private void parsePropertiesFile() throws Exception {
        FileInputStream fisProperties = null;
        Document docProperties = null;

        try {
            fisProperties = new FileInputStream( _bbwpProperties );
            byte[] data = new byte[ (int) ( new File( _bbwpProperties ) ).length() ];
            fisProperties.read( data );
            docProperties = createPropertiesDocument( data );
            getProperties( docProperties );
        } finally {
            fisProperties.close();
        }

        return;
    }

    private Document createPropertiesDocument( byte[] input ) throws Exception {
        ByteArrayInputStream ba = new ByteArrayInputStream( input );
        DOMParser dp = new DOMParser();

        dp.setFeature( "http://xml.org/sax/features/validation", false );
        dp.setFeature( "http://xml.org/sax/features/external-parameter-entities", false );
        dp.setFeature( "http://xml.org/sax/features/namespaces", false );
        dp.setFeature( "http://apache.org/xml/features/nonvalidating/load-external-dtd", false );

        dp.parse( new InputSource( ba ) );
        return dp.getDocument();
    }

    private void getProperties( Document dom ) throws Exception {
        _rapc = "";
        _javac = "";
        _javaHome = "";
        _templateDir = "";
        _imports = null;
        _additional = "";

        if( dom == null )
            return;

        Node root = (Node) dom.getElementsByTagName( NODE_WCP ).item( 0 );
        NodeList list = root.getChildNodes();

        for( int i = 0; i < list.getLength(); i++ ) {
            Node node = list.item( i );
            String nodename = node.getNodeName();
            if( nodename != null ) {
                if( nodename.equals( NODE_RAPC ) ) {
                    NodeList childlist = node.getChildNodes();
                    for( int j = 0; j < childlist.getLength(); j++ ) {
                        if( childlist.item( j ).getNodeType() == Node.TEXT_NODE ) {
                            _rapc = childlist.item( j ).getNodeValue();
                            if( !_rapc.equals( RAPC_EXE ) && !_rapc.equals( NODE_RAPC ) ) {
                                if( new File( _rapc ).isAbsolute() ) {
                                    _rapc = getAbsolutePath( _rapc );
                                } else {
                                    _rapc = _sessionHome + File.separator + _rapc;
                                }
                            }
                        }
                    }
                } else if( nodename.equals( NODE_JAVA ) ) {
                    NodeList childlist = node.getChildNodes();
                    for( int j = 0; j < childlist.getLength(); j++ ) {
                        if( childlist.item( j ).getNodeType() == Node.TEXT_NODE ) {
                            _javaHome = childlist.item( j ).getNodeValue();

                            if( !_javaHome.isEmpty() ) {
                                _javac = "\"" + _javaHome + "\\bin\\javac.exe" + "\"";
                            } else {
                                if( OSUtils.isWindows() ) {
                                    _javac = getAbsolutePath( JAVA_C_EXE );
                                } else {
                                    _javac = getAbsolutePath( JAVA_C );
                                }
                            }
                        }
                    }
                } else if( nodename.equals( NODE_TEMPLATE ) ) {
                    NodeList childlist = node.getChildNodes();
                    for( int j = 0; j < childlist.getLength(); j++ ) {
                        if( childlist.item( j ).getNodeType() == Node.TEXT_NODE ) {
                            _templateDir = childlist.item( j ).getNodeValue();

                            if( new File( _templateDir ).isAbsolute() ) {
                                _templateDir = getAbsolutePath( _templateDir );
                            } else {
                                _templateDir = _sessionHome + File.separator + _templateDir;
                            }
                        }
                    }
                } else if( nodename.equals( NODE_JAR ) ) {
                    NodeList childlist = node.getChildNodes();
                    for( int j = 0; j < childlist.getLength(); j++ ) {
                        if( childlist.item( j ).getNodeType() == Node.TEXT_NODE ) {
                            _imports = parseClasspath( childlist.item( j ).getNodeValue() );
                        }
                    }
                } else if( nodename.equals( NODE_ADDITIONAL ) ) {
                    NodeList childlist = node.getChildNodes();
                    for( int j = 0; j < childlist.getLength(); j++ ) {
                        if( childlist.item( j ).getNodeType() == Node.TEXT_NODE ) {
                            _additional = childlist.item( j ).getNodeValue();
                        }
                    }
                } else if( nodename.equals( NODE_REPOSITORY ) ) {
                    NodeList childlist = node.getChildNodes();
                    for( int j = 0; j < childlist.getLength(); j++ ) {
                        if( childlist.item( j ).getNodeType() == Node.TEXT_NODE ) {
                            _repositoryDir = childlist.item( j ).getNodeValue();

                            if( new File( _repositoryDir ).isAbsolute() ) {
                                _repositoryDir = getAbsolutePath( _repositoryDir );
                            } else {
                                _repositoryDir = _sessionHome + File.separator + _repositoryDir;
                            }
                        }
                    }
                }
            }
        }

        if( !OSUtils.isWindows() ) {
            _rapc = OSUtils.replaceWithForwardSlash( _rapc );
            _rapc = _rapc.replace( RAPC_EXE, RAPC_JAR );
            _javac = OSUtils.replaceWithForwardSlash( _javac );
            _javac = _javac.replace( JAVA_C_EXE, JAVA_C );
            _templateDir = OSUtils.replaceWithForwardSlash( _templateDir );
            _repositoryDir = OSUtils.replaceWithForwardSlash( _repositoryDir );
        }
    }

    private String getAbsolutePath( String filePath ) {
        try {
            return ( new File( filePath ) ).getCanonicalFile().getAbsolutePath();
        } catch( Exception e ) {
            return ( new File( filePath ) ).getAbsolutePath();
        }
    }

    private List< String > parseClasspath( String cp ) throws PackageException {
        List< String > result = new ArrayList< String >();
        StringTokenizer st = new StringTokenizer( cp, ";" );
        while( st.hasMoreTokens() ) {
            String lib = st.nextToken().trim();

            if( new File( lib ).isAbsolute() ) {
                lib = getAbsolutePath( lib );
            } else {
                lib = _sessionHome + File.separator + lib;
            }
            if( !OSUtils.isWindows() ) {
                lib = OSUtils.replaceWithForwardSlash( lib );
            }
            if( new File( lib ).exists() ) {
                result.add( lib );
            } else {
                throw new PackageException( "EXCEPTION_LIBRARY_NOT_FOUND", lib );
            }
        }
        return result;
    }
}
TOP

Related Classes of net.rim.tumbler.session.BBWPProperties

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.