зеркало из https://github.com/mozilla/gecko-dev.git
115 строки
3.8 KiB
Java
115 строки
3.8 KiB
Java
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
|
|
*
|
|
* The contents of this file are subject to the Netscape Public License
|
|
* Version 1.0 (the "NPL"); you may not use this file except in
|
|
* compliance with the NPL. You may obtain a copy of the NPL at
|
|
* http://www.mozilla.org/NPL/
|
|
*
|
|
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
|
* for the specific language governing rights and limitations under the
|
|
* NPL.
|
|
*
|
|
* The Initial Developer of this code under the NPL is Netscape
|
|
* Communications Corporation. Portions created by Netscape are
|
|
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
|
* Reserved.
|
|
*/
|
|
package netscape.ldap.util;
|
|
|
|
import java.util.*;
|
|
import com.oroinc.text.regex.*;
|
|
|
|
/**
|
|
* Represents an Internal LDAPFilterList object. This is an internal object
|
|
* that should never be instantiated directly by the developer. We
|
|
* store all filters that have the same match pattern here.
|
|
*/
|
|
|
|
public class LDAPIntFilterList {
|
|
private Vector m_vFilter;
|
|
private String m_strMatchPattern;
|
|
// a regexp pattern of m_strMatchPattern
|
|
private Perl5Pattern m_patMatch = null;
|
|
private Perl5Matcher m_matcher;
|
|
private Perl5Compiler m_compiler;
|
|
|
|
LDAPIntFilterList ( LDAPFilter filter ) throws
|
|
BadFilterException {
|
|
m_strMatchPattern = filter.getMatchPattern();
|
|
|
|
// We're going to compile the pattern for strMatchPattern
|
|
// now, so that we can throw an exception if it is a bad
|
|
// pattern.
|
|
m_matcher = new Perl5Matcher();
|
|
m_compiler = new Perl5Compiler();
|
|
|
|
try {
|
|
m_patMatch = (Perl5Pattern)m_compiler.compile
|
|
( m_strMatchPattern );
|
|
} catch ( MalformedPatternException e ) {
|
|
|
|
throw new BadFilterException (
|
|
"The Regular Expression for this filter is bad. " +
|
|
"Line number: " + filter.getLineNumber() );
|
|
}
|
|
|
|
m_vFilter = new Vector();
|
|
m_vFilter.addElement ( filter );
|
|
}
|
|
|
|
/**
|
|
* Add a "relative" filter to an existing filter list. We do this
|
|
* becuse the ldapfilter file defines that we can have multiple
|
|
* filters per match pattern (and delimeter). This method is
|
|
* called by the parent LDAPIntFilterSet because the file specified
|
|
* a "relative" filter (a filter in the ldapfilter.conf file that
|
|
* only has 2 or 3 tokens).
|
|
*/
|
|
void AddFilter ( LDAPFilter filter ) {
|
|
m_vFilter.addElement ( filter );
|
|
}
|
|
|
|
|
|
/**
|
|
* Return the number of Filters this InternalFilterList contains.
|
|
*/
|
|
// Since we're storing the filters as a vector, just return
|
|
// Vector.size().
|
|
int numFilters () {
|
|
return m_vFilter.size();
|
|
}
|
|
|
|
|
|
public String toString() {
|
|
StringBuffer strBuf = new StringBuffer ( 100 );
|
|
strBuf.append ( " Match Pattern: \"" + m_strMatchPattern + "\"\n" );
|
|
|
|
for ( int i = 0; i < m_vFilter.size(); i++ ) {
|
|
strBuf.append ( ((LDAPFilter)m_vFilter.elementAt(i)).toString() );
|
|
strBuf.append ( "\n" );
|
|
}
|
|
return strBuf.toString();
|
|
}
|
|
|
|
/**
|
|
* Return the requested filter.
|
|
*/
|
|
LDAPFilter getFilter ( int nFilter ) {
|
|
return (LDAPFilter)m_vFilter.elementAt ( nFilter );
|
|
}
|
|
|
|
/**
|
|
* Try to match the filter to the given string. This method is called
|
|
* when the user types in data. We match the expression (stored in
|
|
* m_strMatchPattern) to the value that the user typed in (the
|
|
* parameter to this method).
|
|
*/
|
|
boolean MatchFilter ( PatternMatcherInput matcherValue ) {
|
|
matcherValue.setCurrentOffset ( matcherValue.getBeginOffset() );
|
|
return m_matcher.contains ( matcherValue, m_patMatch );
|
|
}
|
|
}
|
|
|
|
|