001: /*
002: * Copyright 2001 Sun Microsystems, Inc. All rights reserved.
003: * PROPRIETARY/CONFIDENTIAL. Use of this product is subject to license terms.
004: */
005:
006: package com.sun.portal.search.robot;
007:
008: import java.util.*;
009: import com.sun.portal.search.util.PBlock;
010: import java.util.StringTokenizer;
011:
012: public class FilterRule {
013: public String id;
014: public boolean enable = false;
015: public String nickname = "";
016: public boolean default_ad = false; //true: allow, false: deny
017: public boolean quickcf = false;
018: public static final String methods_labels[] = { "is", "contains",
019: "begins with", "ends with", "regular expression" };
020: public static final String filter_methods[] = { "by-exact",
021: "by-substr", "by-prefix", "by-suffix", "by-regex" };
022: public static final String srcs_labels[] = { "URL", "protocol",
023: "host", "path", "MIME type" };
024: public static final String filter_srcs[] = { "url", "protocol",
025: "host", "uri", "type" };
026: public ArrayList comments = null;
027: public ArrayList pre_comments = null;
028: public ArrayList filters = null;
029:
030: public FilterRule(String tag) {
031: HashMap avs = new HashMap();
032: String valueText = null;
033: try {
034: PBlock.str2pblock(tag, avs);
035: } catch (Exception e) {
036: System.out.println("PBlockstr2pblock:Exception:"
037: + e.getMessage());
038: }
039: valueText = (String) avs.get("id");
040: if (valueText != null) {
041: id = valueText;
042: }
043: valueText = (String) avs.get("enable");
044: if (valueText != null
045: && valueText.compareToIgnoreCase("TRUE") == 0) {
046: enable = true;
047: }
048: valueText = (String) avs.get("quikcf");
049: if (valueText != null
050: && valueText.compareToIgnoreCase("TRUE") == 0) {
051: quickcf = true;
052: }
053: valueText = (String) avs.get("default");
054: if (valueText != null
055: && valueText.compareToIgnoreCase("ALLOW") == 0) {
056: default_ad = true;
057: }
058: valueText = (String) avs.get("nickname");
059: if (valueText != null) {
060: nickname = valueText;
061: }
062: filters = new ArrayList();
063:
064: }
065:
066: public FilterRule(String id, boolean ena, String nick, boolean ad,
067: boolean quikcf) {
068: this .id = id;
069: enable = ena;
070: nickname = nick;
071: default_ad = ad;
072: this .quickcf = quikcf;
073: filters = new ArrayList();
074: }
075:
076: public boolean Match(String u) {
077: for (int i = 0; i < filters.size(); i++) {
078: StringFilter sf = (StringFilter) filters.get(i);
079: if (sf.isMatch(u)) {
080: return true;
081: }
082: }
083: return false;
084: }
085:
086: public String toXMLString() {
087: StringBuffer sb = new StringBuffer("<Rule id=\"" + id
088: + "\" enable=\"" + RobotConfig.BtoString(enable)
089: + "\" default=\"" + RobotConfig.ADtoString(default_ad)
090: + "\" nickname=\"" + nickname + "\" >\n");
091: for (int i = 0; i < filters.size(); i++) {
092: StringFilter sf = (StringFilter) filters.get(i);
093: sb.append(sf.toXMLString());
094: }
095: return sb.toString();
096: }
097:
098: public String toConfigString() {
099: StringBuffer sb = new StringBuffer();
100: if (this .pre_comments != null) {
101: for (int i = 0; i < this .pre_comments.size(); i++) {
102: String comm = (String) this .pre_comments.get(i);
103: sb.append("# " + comm + "\n");
104: }
105: }
106: sb.append("<Rule id=" + id + " enable="
107: + RobotConfig.BtoString(enable) + " quikcf="
108: + RobotConfig.BtoString(quickcf) + " default="
109: + RobotConfig.ADtoString(default_ad) + " nickname=\""
110: + nickname + "\" >\n");
111: if (this .comments != null) {
112: for (int i = 0; i < this .comments.size(); i++) {
113: String comm = (String) this .comments.get(i);
114: sb.append("# " + comm + "\n");
115: }
116: }
117: for (int i = 0; i < filters.size(); i++) {
118: StringFilter sf = (StringFilter) filters.get(i);
119: sb.append(sf.toConfigString());
120: }
121: sb.append("</Rule>\n");
122: return sb.toString();
123: }
124:
125: public void addComment(String comm) {
126: if (this .comments == null) {
127: this .comments = new ArrayList();
128: }
129: this .comments.add(comm);
130: }
131:
132: public void addPreComment(ArrayList comm) {
133: this .pre_comments = comm;
134: }
135:
136: public boolean addFilter(String src, String method, String text) {
137: for (int i = 0; i < FilterRule.filter_methods.length; i++) {
138: if (FilterRule.filter_methods[i]
139: .compareToIgnoreCase(method) == 0) {
140: StringFilter sf = new StringFilter(src, i, text);
141: filters.add(sf);
142: return true;
143: }
144: }
145: return false;
146: }
147:
148: public boolean delFilterByIndex(int index) {
149: if (index >= 0 && index < this .filters.size()) {
150: if (this .filters.remove(index) != null) {
151: return true;
152: }
153: }
154: return false;
155: }
156:
157: public void removeAllFilter() {
158: filters.clear();
159: }
160:
161: public void addFilter(String s) {
162: HashMap avs = new HashMap();
163: String valueText = null;
164: int method_ndx;
165: try {
166: PBlock.str2pblock(s, avs);
167: } catch (Exception e) {
168: System.out.println("[addFilter]PBlockstr2pblock:Exception:"
169: + e.getMessage());
170: }
171:
172: String src = (String) avs.get("src");
173: String method = null;
174: for (method_ndx = 0; method_ndx < this .filter_methods.length; method_ndx++) {
175: if (avs.containsKey(this .filter_methods[method_ndx])) {
176: break;
177: }
178: }
179: if (method_ndx == this .filter_methods.length) { //invalid filter tag
180: return;
181: }
182: String text = (String) avs.get(this .filter_methods[method_ndx]);
183: StringFilter sf = new StringFilter(src, method_ndx, text);
184: filters.add(sf);
185:
186: }
187:
188: public static int StringtoMethodIndex(String method) {
189: for (int method_ndx = 0; method_ndx < filter_methods.length; method_ndx++) {
190: if (method.compareToIgnoreCase(filter_methods[method_ndx]) == 0) {
191: return method_ndx;
192: }
193: }
194: return -1;
195: }
196:
197: public static String getMethodText(int ndx) {
198: if (ndx < 0 && ndx > filter_methods.length) {
199: return Integer.toString(ndx);
200: }
201: return filter_methods[ndx];
202: }
203:
204: public int numberOfStringFilters() {
205: return this .filters.size();
206: }
207:
208: public String getComments() {
209: if (this .comments == null) {
210: return "";
211: }
212: StringBuffer sb = new StringBuffer();
213: for (int i = 0; i < this .comments.size(); i++) {
214: sb.append((String) comments.get(i) + "\n");
215: }
216: return sb.toString();
217: }
218:
219: public void setComments(String comm) {
220: if (comm == null)
221: return;
222: if (comments == null) {
223: comments = new ArrayList();
224: } else {
225: comments.clear();
226: }
227: StringTokenizer st = new StringTokenizer(comm, "\n");
228: while (st.hasMoreTokens()) {
229: String comms = st.nextToken().trim();
230: if (comms.length() > 0) {
231: this.comments.add(comms);
232: }
233: }
234: }
235:
236: }
|