001: /**
002: *
003: * Copyright (C) 2000-2007 Enterprise Distributed Technologies Ltd
004: *
005: * www.enterprisedt.com
006: *
007: * Change Log:
008: *
009: * $Log: ServerStrings.java,v $
010: * Revision 1.1 2007/01/12 02:04:23 bruceb
011: * string matchers
012: *
013: *
014: */package com.enterprisedt.net.ftp;
015:
016: import java.util.Vector;
017:
018: /**
019: * Manages strings that match various FTP server replies for
020: * various situations. The strings are not exact copies of server
021: * replies, but rather fragments that match server replies (so that
022: * as many servers as possible can be supported). All fragments are
023: * managed internally in upper case to make matching faster.
024: *
025: * @author Bruce Blackshaw
026: * @version $Revision: 1.1 $
027: */
028: class ServerStrings {
029:
030: private Vector strings = new Vector();
031:
032: /**
033: * Add a fragment to be managed
034: *
035: * @param string new message fragment
036: */
037: public void add(String string) {
038: strings.addElement(string.toUpperCase());
039: }
040:
041: /**
042: * Get all fragments being managed
043: *
044: * @return array of management fragments
045: */
046: public String[] getAll() {
047: String[] result = new String[strings.size()];
048: strings.copyInto(result);
049: return result;
050: }
051:
052: /**
053: * Clear all fragments being managed
054: */
055: public void clearAll() {
056: strings.removeAllElements();
057: }
058:
059: /**
060: * Fragment count
061: *
062: * @return number of fragments being managed
063: */
064: public int size() {
065: return strings.size();
066: }
067:
068: /**
069: * Remove a managed fragment. Only exact matches (ignoring case)
070: * are removed
071: *
072: * @param string string to be removed
073: * @return true if removed, false if not found
074: */
075: public boolean remove(String string) {
076: String upper = string.toUpperCase();
077: for (int i = 0; i < strings.size(); i++) {
078: String msg = (String) strings.elementAt(i);
079: if (upper.equals(msg)) {
080: strings.removeElementAt(i);
081: return true;
082: }
083: }
084: return false;
085: }
086:
087: /**
088: * Returns true if any fragment is found in the supplied
089: * string.
090: *
091: * @param reply server reply to test for matches
092: * @return true for a match, false otherwise
093: */
094: public boolean matches(String reply) {
095: String upper = reply.toUpperCase();
096: for (int i = 0; i < strings.size(); i++) {
097: String msg = (String) strings.elementAt(i);
098: if (upper.indexOf(msg) >= 0)
099: return true;
100: }
101: return false;
102: }
103:
104: }
|