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] ); } } }