package ca.janeg.cb;

import java.util.StringTokenizer;

/**
 *  A ParsedClassName takes a fully qualified class name and breaks into it's
 *  component parts using the given delimiter.
 *
 *@author     Jane Grisct jane@janeg.ca
 *@created    January 26, 2002
 */
class ParsedClassName {

    private String simple;
    private String[] pkgs;
    private String pkgName;


    ParsedClassName( final String name, final String delimiter ) {

        StringTokenizer stok  = new StringTokenizer( name, delimiter );
        int tokens            = stok.countTokens();

        if( tokens > 1 ) {
            StringBuffer buf  = new StringBuffer( name.length() );
            pkgs = new String[tokens - 1];
            String tok        = "";

            for( int i = 0; i < tokens - 1; i++ ) {
                tok = stok.nextToken();
                pkgs[i] = tok;
                buf.append( tok + '.' );
            }
            pkgName = buf.substring( 0, buf.length() - 1 );
        }
        simple = stok.nextToken();
    }


    String getSimpleName() {
        return simple;
    }


    String[] getPackages() {
        return pkgs;
    }


    String getPackageName() {
        return pkgName;
    }


    /**
     *  The main program for the ParsedClassName class; used for testing.
     *
     *@param  args  The command line arguments
     */
    public static void main( String[] args ) {
        // good example
        ParsedClassName pcn  = new ParsedClassName(
            "java.awt.text.resources.DateFormatZoneData_en", "." );
        System.out.println( pcn.getSimpleName() );
        System.out.println( pcn.getPackageName() );
        for( int i = 0; i < pcn.pkgs.length; i++ ) {
            System.out.println( pcn.pkgs[i] );
        }
        System.out.println();

        // works ok with empty tokens
        pcn = new ParsedClassName( "java..awt.Button", "." );
        System.out.println( pcn.getSimpleName() );
        System.out.println( pcn.getPackageName() );
        for( int i = 0; i < pcn.pkgs.length; i++ ) {
            System.out.println( pcn.pkgs[i] );
        }

        // works ok with ending delimiter
        System.out.println();
        pcn = new ParsedClassName( "java..awt.Frame.", "." );
        System.out.println( pcn.getSimpleName() );
        System.out.println( pcn.getPackageName() );
        for( int i = 0; i < pcn.pkgs.length; i++ ) {
            System.out.println( pcn.pkgs[i] );
        }

    }
}