FileDocCategorySizeDatePackage
ClassnameFilterList.javaAPI DocJ2ME CLDC 1.12339Wed Feb 05 15:56:04 GMT 2003util

ClassnameFilterList.java

/*
 *    ClassnameFilterList.java    1.3    03/01/14 SMI
 *
 * Copyright © 2003 Sun Microsystems, Inc. All rights reserved.
 * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
 */

package util;

import java.util.Vector;

/*
 * A ClassnameFilterList stores a list of ClassnameFilter objects.
 * It is used for mapping a classname into group, such as "JNI"
 */

public
class ClassnameFilterList {

    public ClassnameFilterList() {
    groups = new Vector();
    filters = new Vector();
    }

    public void addTypePatterns(String group, String patterns ) {
    boolean conditional;
    // If a pattern starts with '-', it matches only if there
    // were no earlier matches
    if (patterns.charAt(0) == '-') {
        conditional = true;
        patterns = patterns.substring(1);
    } else {
        conditional = false;
    }
    ClassnameFilter f = new ClassnameFilter(conditional);
    parseClassList( patterns, f );
    groups.addElement(group.intern());
    filters.addElement(f);
    }

    public String[] getTypes(String classname) {
    Vector types = new Vector(1);
    int l = groups.size();
    for (int i = 0; i < l; ++i) {
        String name = (String)groups.elementAt(i);
        ClassnameFilter f = (ClassnameFilter)filters.elementAt(i);
        // If a pattern is conditional, it matches only if there
        // were no earlier matches
        if (types.size() == 0 || !f.conditional) {
        if (f.accept(null, classname)) {
            types.addElement(name);
        }
        }
    }
    String[] strings = new String[types.size()];
    types.copyInto(strings);
    return strings;
    }

    public boolean isType(String classname, String type) {
    String[] types = getTypes(classname);
    for (int i = 0; i < types.length; ++i) {
        if (types[i] == type.intern()) {
        return true;
        }
    }
    return false;
    }

    // Parse the rest of the string as a list of classes.
    private void parseClassList(String val, ClassnameFilter filter) {
    java.util.StringTokenizer tkn =
        new java.util.StringTokenizer(val, " ,", false );
    while ( tkn.hasMoreTokens() ){
        String classname =
        util.LinkerUtil.sanitizeClassname( tkn.nextToken() );
        filter.includeName(classname);
    }
    }

    private Vector groups;
    private Vector filters;

}