Package net.rim.tumbler

Source Code of net.rim.tumbler.CmdLineHandler

/*
* 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;

import java.io.File;
import java.util.Date;
import java.util.Random;
import java.util.regex.Pattern;
import java.util.List;
import java.util.ArrayList;

import net.rim.tumbler.exception.CommandLineException;
import net.rim.tumbler.exception.PackageException;
import net.rim.tumbler.log.LogType;
import net.rim.tumbler.log.Logger;
import net.rim.tumbler.session.SessionManager;

public class CmdLineHandler {
    private static final String FILE_SEP = System.getProperty( "file.separator" );
    private static final String OPTION_SOURCEDIR = "/s";
    private static final String OPTION_PASSWORD = "/g";
    private static final String OPTION_OUTPUTDIR = "/o";
    private static final String OPTION_VERBOSE = "/v";
    private static final String OPTION_HELP = "/h";
    private static final String OPTION_DEBUG = "/d";
    private static final String OPTION_SOURCEDIR_DASH = "-s";
    private static final String OPTION_PASSWORD_DASH = "-g";
    private static final String OPTION_OUTPUTDIR_DASH = "-o";
    private static final String OPTION_VERBOSE_DASH = "-v";
    private static final String OPTION_HELP_DASH = "-h";
    private static final String OPTION_DEBUG_DASH = "-d";
    private List< String > optionsList = new ArrayList< String >();

    private boolean _requireSigned;
    private String _password;
    private String _outputDir;
    private boolean _requireSource;
    private String _sourceDir;
    private boolean _debugMode;
    private boolean _isVerbose;
    private String _widgetArchive;
    private String _archiveName;

    public CmdLineHandler() {
        optionsList.add( OPTION_SOURCEDIR );
        optionsList.add( OPTION_PASSWORD );
        optionsList.add( OPTION_OUTPUTDIR );
        optionsList.add( OPTION_VERBOSE );
        optionsList.add( OPTION_HELP );
        optionsList.add( OPTION_DEBUG );
        optionsList.add( OPTION_SOURCEDIR_DASH );
        optionsList.add( OPTION_PASSWORD_DASH );
        optionsList.add( OPTION_OUTPUTDIR_DASH );
        optionsList.add( OPTION_VERBOSE_DASH );
        optionsList.add( OPTION_HELP_DASH );
        optionsList.add( OPTION_DEBUG_DASH );
    }

    public boolean parse( String[] inputParams ) throws PackageException, CommandLineException {
        // Validate at least one parameter.
        if( inputParams.length < 1 ) {
            throw new CommandLineException( "EXCEPTION_INVALID_COMMAND_LINE" );
        }

        // Get first param - exception case: /h
        String input1 = inputParams[ 0 ].toLowerCase().trim();
        if( input1.equals( OPTION_HELP ) ) {
            Logger.logMessage( LogType.NONE, "BBWP_USAGE", WidgetPackager.getVersion() );
            return false;
        }

        // Check archive format
        if( !input1.endsWith( ".zip" ) ) {
            throw new CommandLineException( "EXCEPTION_INVALID_COMMAND_LINE" );
        }

        // Parse the command line
        _widgetArchive = getAbsolutePath( input1 );
        _archiveName = parseWidgetName( _widgetArchive );

        Pattern patternWidgetName = Pattern.compile( "[a-zA-Z][a-zA-Z0-9]*" );
        if( !patternWidgetName.matcher( _archiveName ).matches() ) {
            throw new PackageException( "EXCEPTION_INVALID_ARCHIVE_NAME" );
        }

        // Parse options
        try {
            parseOptionParameters( inputParams );
        } catch( Exception e ) {
            throw new CommandLineException( "EXCEPTION_INVALID_COMMAND_LINE" );
        }
        return true;
    }

    public SessionManager createSession() throws Exception {
        // Parse location of packager
        String bbwpInstallFolder;
        String installPath = getAbsolutePath( SessionManager.BBWP_JAR_PATH );
        File p = new File( installPath );
        if( p.isDirectory() ) {
            if( installPath.lastIndexOf( FILE_SEP ) == installPath.length() - 1 ) {
                bbwpInstallFolder = installPath;
            } else {
                bbwpInstallFolder = installPath + FILE_SEP;
            }
        } else {
            installPath = installPath.substring( 0, installPath.lastIndexOf( FILE_SEP ) ) + FILE_SEP;
            bbwpInstallFolder = installPath;
        }

        SessionManager.createInstance( _archiveName, _widgetArchive, bbwpInstallFolder, _outputDir, _requireSigned, _password,
                _requireSource, _sourceDir, _debugMode, _isVerbose );
        return SessionManager.getInstance();
    }

    private String parseWidgetName( String archivePath ) {
        String name = archivePath.substring( archivePath.lastIndexOf( FILE_SEP ) + 1, archivePath.lastIndexOf( "." ) );
        return name;
    }

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

    private void parseOptionParameters( String[] params ) throws Exception {
        _requireSigned = false;
        _password = "";
        _outputDir = "";
        _requireSource = false;
        _sourceDir = "";

        int index = 1;
        while( index < params.length ) {
            String param = params[ index ];

            if( param.equals( OPTION_HELP ) || param.equals( OPTION_HELP_DASH ) ) {
                throw new Exception();
            } else if( param.equals( OPTION_DEBUG ) || param.equals( OPTION_DEBUG_DASH ) ) {
                _debugMode = true;
                index++;
            } else if( param.equals( OPTION_VERBOSE ) || param.equals( OPTION_VERBOSE_DASH ) ) {
                _isVerbose = true;
                index++;
            } else if( param.equals( OPTION_PASSWORD ) || param.equals( OPTION_PASSWORD_DASH ) ) {
                _requireSigned = true;
                if( params.length > index + 1 ) {
                    String followingParameter = params[ index + 1 ];
                    if( !optionsList.contains( followingParameter ) ) {
                        _password = followingParameter;
                        index++;
                    }
                }
                index++;
            } else if( param.equals( OPTION_OUTPUTDIR ) || param.equals( OPTION_OUTPUTDIR_DASH ) ) {
                if( params.length > index + 1 ) {
                    _outputDir = params[ index + 1 ];
                    _outputDir = getAbsolutePath( _outputDir );
                    index += 2;
                } else {
                    throw new Exception();
                }
            } else if( param.equals( OPTION_SOURCEDIR ) || param.equals( OPTION_SOURCEDIR_DASH ) ) {
                _requireSource = true;
                if( params.length > index + 1 ) {
                    String followingParameter = params[ index + 1 ];
                    if( !optionsList.contains( followingParameter ) ) {
                        _sourceDir = followingParameter;
                        _sourceDir = getAbsolutePath( _sourceDir );
                        index++;
                    }
                }

                index++;
            } else {
                throw new Exception();
            }
        }

        // Populate correct source directory
        if( !_requireSource ) {
            _sourceDir = System.getProperty( "java.io.tmpdir" ) + "widgetGen." + new Random().nextInt( 2147483647 )
                    + new Date().getTime() + ".tmp";
        } else {
            if( _sourceDir.length() != 0 ) {
                _sourceDir = _sourceDir + FILE_SEP + "src";
            } else {
                if( _outputDir.length() != 0 ) {
                    _sourceDir = _outputDir + FILE_SEP + "src";
                } else {
                    _sourceDir = _widgetArchive.substring( 0, _widgetArchive.lastIndexOf( FILE_SEP ) + 1 ) + "src";
                }
            }
        }

        // Populate correct output directory
        if( _outputDir.length() == 0 ) {
            _outputDir = _widgetArchive.substring( 0, _widgetArchive.lastIndexOf( FILE_SEP ) + 1 ) + "bin";
        }
    }
}
TOP

Related Classes of net.rim.tumbler.CmdLineHandler

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.