1 7 8 package org.jdesktop.swing.decorator; 9 10 import java.util.ArrayList ; 11 import java.util.regex.Pattern ; 12 13 18 public class PatternFilter extends Filter implements PatternMatcher { 19 private ArrayList toPrevious, fromPrevious; 20 protected Pattern pattern = null; 21 22 public PatternFilter() { 23 this(null, 0, 0); 24 } 25 26 public PatternFilter(String regularExpr, int matchFlags, int col) { 27 super(col); 28 setPattern(regularExpr, matchFlags); 29 } 30 31 protected void init() { 32 toPrevious = new ArrayList (); 33 fromPrevious = new ArrayList (); 34 } 35 36 public void setPattern(String regularExpr, int matchFlags) { 37 if ((regularExpr == null) || (regularExpr.length() == 0)) { 38 regularExpr = ".*"; 39 } 40 setPattern(Pattern.compile(regularExpr, matchFlags)); 41 } 42 43 49 public void setPattern(Pattern pattern) { 50 this.pattern = pattern; 51 refresh(); 52 } 53 54 60 public Pattern getPattern() { 61 return pattern; 62 } 63 64 67 protected void reset() { 68 toPrevious.clear(); 69 Integer none = new Integer (-1); 70 int inputSize = getInputSize(); 71 fromPrevious = new ArrayList (inputSize); 72 for (int i = 0; i < inputSize; i++) { 73 fromPrevious.add(i, none); 74 } 75 } 76 77 80 protected void generateMappingFromPrevious() { 81 int outputSize = toPrevious.size(); 82 for (int i = 0; i < outputSize; i++) { 83 Integer index = (Integer ) toPrevious.get(i); 84 fromPrevious.set(index.intValue(), new Integer (i)); 85 } 86 } 87 88 protected void filter() { 89 if (pattern != null) { 90 int inputSize = getInputSize(); 91 for (int i = 0; i < inputSize; i++) { 92 if (test(i)) { 93 toPrevious.add(new Integer (i)); 94 } 95 } 96 } 97 } 98 99 public boolean test(int row) { 100 if (pattern == null) { 101 return false; 102 } 103 104 if (adapter.modelToView(getColumnIndex()) < 0) { 106 return false; } 108 109 Object value = getInputValue(row, getColumnIndex()); 110 111 if (value == null) { 112 return false; 113 } 114 else { 115 boolean matches = pattern.matcher(value.toString()).matches(); 116 return matches; 117 } 118 } 119 120 public int getSize() { 121 return toPrevious.size(); 122 } 123 124 135 protected int translateFromPreviousFilter(int row) { 136 return ((Integer ) fromPrevious.get(row)).intValue(); 137 } 138 139 150 protected int translateToPreviousFilter(int row) { 151 return ((Integer ) toPrevious.get(row)).intValue(); 152 } 153 } | Popular Tags |