зеркало из https://github.com/mozilla/gecko-dev.git
164 строки
5.6 KiB
Java
164 строки
5.6 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.1 (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.mozilla.org/NPL/
|
|
*
|
|
* Software distributed under the License is distributed on an "AS
|
|
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
|
* implied. See the License for the specific language governing
|
|
* rights and limitations under the License.
|
|
*
|
|
* The Original Code is mozilla.org code.
|
|
*
|
|
* The Initial Developer of the Original Code is Netscape
|
|
* Communications Corporation. Portions created by Netscape are
|
|
* Copyright (C) 1999 Netscape Communications Corporation. All
|
|
* Rights Reserved.
|
|
*
|
|
* Contributor(s):
|
|
*/
|
|
package netscape.ldap.util;
|
|
|
|
import java.util.*;
|
|
import com.oroinc.text.regex.*;
|
|
/**
|
|
* Represents an LDAPIntFilterSet object. This is an internal object that
|
|
* should never be instantiated directly by the developer.
|
|
*/
|
|
|
|
public class LDAPIntFilterSet {
|
|
|
|
private Vector m_vLDAPIntFilterList;
|
|
private String m_strTag;
|
|
|
|
private PatternMatcherInput m_matcherTag = null;
|
|
private Perl5Matcher m_matcher = null;
|
|
/**
|
|
* Return a Vector of filters that match botht the tag pattern
|
|
* (in Perl5Pattern form), and the string strValue. This method
|
|
* should only be called by LDAPFilterDescriptor().
|
|
*/
|
|
|
|
// remember, we have the string (m_strTag), the pattern has
|
|
// been precompiled by the LDAPFilterDescriptor (patTag)
|
|
Vector getFilters ( Perl5Pattern patTag,
|
|
PatternMatcherInput matcherValue ) {
|
|
Vector vRet = new Vector();
|
|
|
|
if ( m_matcherTag == null ) {
|
|
m_matcher = new Perl5Matcher();
|
|
m_matcherTag = new PatternMatcherInput ( m_strTag );
|
|
} else {
|
|
m_matcherTag.setCurrentOffset ( m_matcherTag.getBeginOffset() );
|
|
}
|
|
|
|
// Check to see if the strTag (converted into patTag)
|
|
// matches the tag string from the file (converted into
|
|
// m_matcherTag)
|
|
if ( m_matcher.contains ( m_matcherTag, patTag ) ) {
|
|
LDAPIntFilterList tmpIntFilterList;
|
|
LDAPFilter tmpFilter;
|
|
for ( int i = 0; i < m_vLDAPIntFilterList.size(); i++ ) {
|
|
tmpIntFilterList =
|
|
(LDAPIntFilterList)m_vLDAPIntFilterList.elementAt ( i );
|
|
|
|
if ( tmpIntFilterList.MatchFilter ( matcherValue ) ) {
|
|
for (int j=0; j < tmpIntFilterList.numFilters(); j++ ) {
|
|
vRet.addElement ( tmpIntFilterList.getFilter ( j ));
|
|
}
|
|
// potential BUGBUG, i'm not sure if we want
|
|
// to get out of this loop now or if we just
|
|
// want to get out of the external loop. For
|
|
// now, go with the former.
|
|
return vRet;
|
|
}
|
|
}
|
|
}
|
|
|
|
return vRet;
|
|
}
|
|
|
|
/**
|
|
* Create an LDAPIntFilterSet with a given Tag string. The tag
|
|
* string specifies which applications or query types should use
|
|
* this filter set. It is normally a single token on a line by
|
|
* itself in the filter configuration file. <p>
|
|
* For more information about the filter configuration file, see
|
|
* the man page for ldapfilter.conf.
|
|
*/
|
|
public LDAPIntFilterSet ( String strTag ) {
|
|
m_strTag = strTag;
|
|
m_vLDAPIntFilterList = new Vector();
|
|
}
|
|
|
|
/**
|
|
* Add a new filter to this filter set.
|
|
*
|
|
* @exception netscape.ldap.util.BadFilterException
|
|
* If the regular expression pattern given in the first token
|
|
* is bad.
|
|
*/
|
|
void newFilter ( LDAPFilter filter ) throws BadFilterException {
|
|
LDAPIntFilterList tmpFilterList = new LDAPIntFilterList( filter );
|
|
m_vLDAPIntFilterList.addElement ( tmpFilterList );
|
|
}
|
|
|
|
/**
|
|
* Append a new filter to the existing set. This happens when the
|
|
* LDAPFilterDescriptor object reads a line from the filter
|
|
* configuration file that has 2 or 3 tokens.
|
|
*/
|
|
void appendFilter ( LDAPFilter filter ) {
|
|
((LDAPIntFilterList)m_vLDAPIntFilterList.lastElement()).AddFilter ( filter );
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
* Return true if this filter set matches the regular expression
|
|
* string that is passed in.
|
|
*/
|
|
boolean match ( String strTagPat ) {
|
|
Perl5Matcher matcher = new Perl5Matcher();
|
|
Perl5Compiler compiler = new Perl5Compiler();
|
|
PatternMatcherInput input;
|
|
Perl5Pattern patTag;
|
|
MatchResult result;
|
|
|
|
try {
|
|
patTag = (Perl5Pattern)compiler.compile ( strTagPat );
|
|
} catch ( MalformedPatternException e ) {
|
|
// Need to do something here.
|
|
return false;
|
|
}
|
|
|
|
input = new PatternMatcherInput ( m_strTag );
|
|
if ( matcher.contains ( input, patTag ) ) {
|
|
return true;
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Print out the String representation of this object. It calls
|
|
* the toString() method of all the LDAPFilter objects contained
|
|
* within it's set.
|
|
*
|
|
* @see LDAPFilter#toString()
|
|
*/
|
|
public String toString() {
|
|
StringBuffer strBuf = new StringBuffer ( 2000 );
|
|
strBuf.append ( " strTag: " + m_strTag + "\n" );
|
|
for ( int i = 0; i < m_vLDAPIntFilterList.size(); i++ ) {
|
|
strBuf.append ( " filter #: " + i + "\n" );
|
|
strBuf.append (
|
|
((LDAPIntFilterList)m_vLDAPIntFilterList.elementAt(i)).toString() );
|
|
strBuf.append ( "\n" );
|
|
}
|
|
return strBuf.toString();
|
|
}
|
|
}
|