1 18 19 package org.apache.tools.ant.types.selectors; 20 21 import java.io.BufferedReader ; 22 import java.io.File ; 23 import java.io.IOException ; 24 import java.io.InputStreamReader ; 25 26 import org.apache.tools.ant.BuildException; 27 import org.apache.tools.ant.Project; 28 import org.apache.tools.ant.types.Parameter; 29 import org.apache.tools.ant.types.Resource; 30 import org.apache.tools.ant.types.resources.FileResource; 31 import org.apache.tools.ant.types.resources.selectors.ResourceSelector; 32 import org.apache.tools.ant.util.FileUtils; 33 34 40 public class ContainsSelector extends BaseExtendSelector implements ResourceSelector { 41 42 private String contains = null; 43 private boolean casesensitive = true; 44 private boolean ignorewhitespace = false; 45 46 public static final String EXPRESSION_KEY = "expression"; 47 48 public static final String CONTAINS_KEY = "text"; 49 50 public static final String CASE_KEY = "casesensitive"; 51 52 public static final String WHITESPACE_KEY = "ignorewhitespace"; 53 54 55 59 public ContainsSelector() { 60 } 61 62 65 public String toString() { 66 StringBuffer buf = new StringBuffer ("{containsselector text: "); 67 buf.append('"').append(contains).append('"'); 68 buf.append(" casesensitive: "); 69 buf.append(casesensitive ? "true" : "false"); 70 buf.append(" ignorewhitespace: "); 71 buf.append(ignorewhitespace ? "true" : "false"); 72 buf.append("}"); 73 return buf.toString(); 74 } 75 76 81 public void setText(String contains) { 82 this.contains = contains; 83 } 84 85 90 public void setCasesensitive(boolean casesensitive) { 91 this.casesensitive = casesensitive; 92 } 93 94 100 public void setIgnorewhitespace(boolean ignorewhitespace) { 101 this.ignorewhitespace = ignorewhitespace; 102 } 103 104 110 public void setParameters(Parameter[] parameters) { 111 super.setParameters(parameters); 112 if (parameters != null) { 113 for (int i = 0; i < parameters.length; i++) { 114 String paramname = parameters[i].getName(); 115 if (CONTAINS_KEY.equalsIgnoreCase(paramname)) { 116 setText(parameters[i].getValue()); 117 } else if (CASE_KEY.equalsIgnoreCase(paramname)) { 118 setCasesensitive(Project.toBoolean( 119 parameters[i].getValue())); 120 } else if (WHITESPACE_KEY.equalsIgnoreCase(paramname)) { 121 setIgnorewhitespace(Project.toBoolean( 122 parameters[i].getValue())); 123 } else { 124 setError("Invalid parameter " + paramname); 125 } 126 } 127 } 128 } 129 130 135 public void verifySettings() { 136 if (contains == null) { 137 setError("The text attribute is required"); 138 } 139 } 140 141 150 public boolean isSelected(File basedir, String filename, File file) { 151 return isSelected(new FileResource(file)); 152 } 153 154 161 public boolean isSelected(Resource r) { 162 163 validate(); 165 166 if (r.isDirectory()) { 167 return true; 168 } 169 170 String userstr = contains; 171 if (!casesensitive) { 172 userstr = contains.toLowerCase(); 173 } 174 if (ignorewhitespace) { 175 userstr = SelectorUtils.removeWhitespace(userstr); 176 } 177 BufferedReader in = null; 178 try { 179 in = new BufferedReader (new InputStreamReader (r.getInputStream())); 180 } catch (Exception e) { 181 throw new BuildException("Could not get InputStream from " 182 + r.toLongString(), e); 183 } 184 try { 185 String teststr = in.readLine(); 186 while (teststr != null) { 187 if (!casesensitive) { 188 teststr = teststr.toLowerCase(); 189 } 190 if (ignorewhitespace) { 191 teststr = SelectorUtils.removeWhitespace(teststr); 192 } 193 if (teststr.indexOf(userstr) > -1) { 194 return true; 195 } 196 teststr = in.readLine(); 197 } 198 return false; 199 } catch (IOException ioe) { 200 throw new BuildException("Could not read " + r.toLongString()); 201 } finally { 202 FileUtils.close(in); 203 } 204 } 205 206 } 207 208 | Popular Tags |