1 package mircoders.abuse;
\r
3 import mir.entity.Entity;
\r
4 import mir.session.Request;
\r
6 import java.util.Arrays;
\r
7 import java.util.Iterator;
\r
8 import java.util.List;
\r
11 * Instances of this filter type will match if the filter expression is a substringo
\r
12 * of the value(s) tested agains
\r
14 public class SubStringFilterType extends AbstractFilterType {
\r
15 private boolean exactMatch;
\r
16 private boolean caseSensitive;
\r
17 private int fieldKind;
\r
18 private List selectedFields;
\r
20 public static final int ENTITY_FIELDS = 0;
\r
21 public static final int REQUEST_HEADERS = 2;
\r
23 public SubStringFilterType(String aName) {
\r
24 this(aName, false, false, null);
\r
27 public SubStringFilterType(String aName, boolean aCaseSensitive, boolean anExactMatch, String[] aSelectedFields) {
\r
28 this (aName, aCaseSensitive, anExactMatch, ENTITY_FIELDS, aSelectedFields);
\r
31 public SubStringFilterType(String aName, boolean aCaseSensitive, boolean anExactMatch, int aFieldKind, String[] aSelectedFields) {
\r
34 fieldKind = aFieldKind;
\r
36 caseSensitive = aCaseSensitive;
\r
37 exactMatch = anExactMatch;
\r
38 if (aSelectedFields==null) {
\r
39 selectedFields = null;
\r
42 selectedFields = Arrays.asList(aSelectedFields);
\r
47 public FilterInstance constructFilterInstance(final String anExpression) throws AbuseExc {
\r
48 return new FilterInstance() {
\r
49 public boolean test(Entity anEntity, Request aRequest) {
\r
51 String expression = anExpression;
\r
52 if (!caseSensitive) {
\r
53 expression = anExpression.toUpperCase();
\r
56 switch (fieldKind) {
\r
57 case REQUEST_HEADERS:
\r
58 if (selectedFields != null) {
\r
59 j = selectedFields.iterator();
\r
61 while (j.hasNext()) {
\r
62 String fieldName = (String) j.next();
\r
63 String field = aRequest.getHeader(fieldName);
\r
64 if (test(field, expression)) {
\r
72 if (selectedFields != null) {
\r
73 j = selectedFields.iterator();
\r
76 j = anEntity.getFieldNames().iterator();
\r
79 while (j.hasNext()) {
\r
80 String field = anEntity.getFieldValue( (String) j.next());
\r
82 if (test(field, expression)) {
\r
90 private boolean test(String aValue, String anExpression) {
\r
91 if (!caseSensitive) {
\r
92 aValue=aValue.toUpperCase();
\r
96 if (aValue!= null && aValue.equals(anExpression)) {
\r
101 if (aValue!= null && aValue.indexOf(anExpression)>=0) {
\r
109 public String status() {
\r