- /*
- * Copyright 2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- package org.apache.commons.net.ftp.parser;
-
- import org.apache.commons.net.ftp.FTPFileEntryParserImpl;
- import org.apache.oro.text.regex.MalformedPatternException;
- import org.apache.oro.text.regex.MatchResult;
- import org.apache.oro.text.regex.Pattern;
- import org.apache.oro.text.regex.PatternMatcher;
- import org.apache.oro.text.regex.Perl5Compiler;
- import org.apache.oro.text.regex.Perl5Matcher;
-
- /**
- * This abstract class implements both the older FTPFileListParser and
- * newer FTPFileEntryParser interfaces with default functionality.
- * All the classes in the parser subpackage inherit from this.
- *
- * This is the base for all regular based FTPFileEntryParser
- *
- * @author Steve Cohen <scohen@apache.org>
- */
- public abstract class RegexFTPFileEntryParserImpl extends FTPFileEntryParserImpl
- {
- /**
- * internal pattern the matcher tries to match, representing a file
- * entry
- */
- private Pattern pattern = null;
-
- /**
- * internal match result used by the parser
- */
- private MatchResult result = null;
-
- /**
- * Internal PatternMatcher object used by the parser. It has protected
- * scope in case subclasses want to make use of it for their own purposes.
- */
- protected PatternMatcher _matcher_ = null;
-
-
- /**
- * The constructor for a RegexFTPFileEntryParserImpl object.
- *
- * @param regex The regular expression with which this object is
- * initialized.
- *
- * @exception IllegalArgumentException
- * Thrown if the regular expression is unparseable. Should not be seen in
- * normal conditions. It it is seen, this is a sign that a subclass has
- * been created with a bad regular expression. Since the parser must be
- * created before use, this means that any bad parser subclasses created
- * from this will bomb very quickly, leading to easy detection.
- */
- public RegexFTPFileEntryParserImpl(String regex)
- {
- super();
-
- try
- {
- _matcher_ = new Perl5Matcher();
- pattern = new Perl5Compiler().compile(regex);
- }
- catch (MalformedPatternException e)
- {
- throw new IllegalArgumentException (
- "Unparseable regex supplied: " + regex);
- }
- }
-
-
- /**
- * Convenience method delegates to the internal MatchResult's matches()
- * method.
- *
- * @param s the String to be matched
- * @return true if s matches this object's regular expression.
- */
- public boolean matches(String s)
- {
- this.result = null;
- if (_matcher_.matches(s.trim(), this.pattern))
- {
- this.result = _matcher_.getMatch();
- }
- return null != this.result;
- }
-
- /**
- * Convenience method delegates to the internal MatchResult's groups()
- * method.
- *
- * @return the number of groups() in the internal MatchResult.
- */
- public int getGroupCnt()
- {
- if (this.result == null)
- {
- return 0;
- }
- return this.result.groups();
- }
-
- /**
- * Convenience method delegates to the internal MatchResult's group()
- * method.
- *
- * @param matchnum match group number to be retrieved
- *
- * @return the content of the <code>matchnum'th<code> group of the internal
- * match or null if this method is called without a match having
- * been made.
- */
- public String group(int matchnum)
- {
- if (this.result == null)
- {
- return null;
- }
- return this.result.group(matchnum);
- }
-
- /**
- * For debugging purposes - returns a string shows each match group by
- * number.
- *
- * @return a string shows each match group by number.
- */
- public String getGroupsAsString()
- {
- StringBuffer b = new StringBuffer();
- for (int i = 1; i <= this.result.groups(); i++)
- {
- b.append(i).append(") ").append(this.result.group(i))
- .append(System.getProperty("line.separator"));
- }
- return b.toString();
-
- }
- }
-
- /* Emacs configuration
- * Local variables: **
- * mode: java **
- * c-basic-offset: 4 **
- * indent-tabs-mode: nil **
- * End: **
- */