1 28 29 package com.idaremedia.antx; 30 31 import org.apache.tools.ant.BuildException; 32 import org.apache.tools.ant.Project; 33 import org.apache.tools.ant.taskdefs.condition.Condition; 34 import org.apache.tools.ant.types.RegularExpression; 35 import org.apache.tools.ant.util.regexp.RegexpMatcher; 36 37 import com.idaremedia.antx.parameters.IgnoreCaseEnabled; 38 import com.idaremedia.antx.parameters.TrimEnabled; 39 import com.idaremedia.antx.parameters.ValueMatchEnabled; 40 41 56 57 public final class StringEquality extends AssertableProjectComponent 58 implements Condition, IgnoreCaseEnabled, TrimEnabled, ValueMatchEnabled 59 { 60 61 public static final String OP_EQUALS= "equals"; 62 63 public static final String OP_STARTSWITH= "startswith"; 64 65 public static final String OP_ENDSWITH= "endswith"; 66 67 public static final String OP_CONTAINS= "contains"; 68 69 public static final String OP_MATCHES= "matches"; 70 71 72 75 public StringEquality() 76 { 77 super(); 78 m_knownArg.setLenient(false); 79 m_unknownArg.setLenient(false); 80 } 81 82 83 87 public StringEquality(String known) 88 { 89 this(); 90 setKnownArg(known); 91 } 92 93 94 99 public StringEquality(String known, boolean isP) 100 { 101 this(); 102 setKnownArg(known,isP); 103 } 104 105 106 110 public void setProject(Project P) 111 { 112 super.setProject(P); 113 m_knownArg.setProject(P); 114 m_unknownArg.setProject(P); 115 } 116 117 118 122 public final boolean isUndefined() 123 { 124 return m_knownArg.isUndefined() || m_unknownArg.isUndefined(); 125 } 126 127 128 131 public final void setKnownArg(String arg1) 132 { 133 setKnownArg(arg1,false); 134 } 135 136 137 143 public void setKnownArg(String arg1, boolean isP) 144 { 145 m_knownArg.set(arg1); 146 m_knownArg.setIsLiteral(); 147 m_knownArg.setIsProperty(isP); 148 } 149 150 151 156 public final String getKnownArg() 157 { 158 return m_knownArg.get(); 159 } 160 161 162 167 public final String getKnownValue() 168 { 169 return m_knownArg.getValue(); 170 } 171 172 173 178 public final void setMatch(String pattern) 179 { 180 setKnownArg(pattern,false); 181 setOperator(OP_MATCHES); 182 } 183 184 185 188 public final void setUnknownArg(String arg2) 189 { 190 setUnknownArg(arg2, false); 191 } 192 193 194 200 public void setUnknownArg(String arg1, boolean isP) 201 { 202 m_unknownArg.set(arg1); 203 m_unknownArg.setIsLiteral(); 204 m_unknownArg.setIsProperty(isP); 205 } 206 207 208 213 public final String getUnknownArg() 214 { 215 return m_unknownArg.get(); 216 } 217 218 219 224 protected final String getUnknownValue() 225 { 226 return m_unknownArg.getValue(); 227 } 228 229 230 235 public final void setValue(String value) 236 { 237 setUnknownArg(value); 238 } 239 240 241 245 public final void setOperator(String op) 246 { 247 require_(op!=null,"setOp- nonzro op"); 248 if (OP_EQUALS.equals(op)) { m_Op=0; } 249 else if (OP_CONTAINS.equals(op)) { m_Op=1; } 250 else if (OP_STARTSWITH.equals(op)) { m_Op=2; } 251 else if (OP_MATCHES.equals(op)) { m_Op=3; } 252 else if (OP_ENDSWITH.equals(op)) { m_Op=4; } 253 else { require_(false, "setOp- known operator"); } 254 } 255 256 257 261 public void setTrim(boolean trim) 262 { 263 m_knownArg.setTrim(trim); 264 m_unknownArg.setTrim(trim); 265 } 266 267 268 272 public boolean willTrim() 273 { 274 return m_knownArg.isTrimmed(); 275 } 276 277 278 283 public void setIgnoreCase(boolean b) 284 { 285 m_knownArg.setIgnoreCase(b); 286 m_unknownArg.setIgnoreCase(b); 287 } 288 289 290 294 public boolean isIgnoreCase() 295 { 296 return m_knownArg.isIgnoreCase(); 297 } 298 299 300 304 public void setNegate(boolean b) 305 { 306 m_Not = b; 307 } 308 309 310 314 public boolean isNegate() 315 { 316 return m_Not; 317 } 318 319 320 324 private RegexpMatcher getRE() 325 { 326 if (m_RE==null) { 327 RegularExpression redt= new RegularExpression(); 328 redt.setPattern(getKnownValue()); 329 m_RE= redt.getRegexp(getProject()); 330 } 331 return m_RE; 332 } 333 334 335 339 public boolean eval() throws BuildException 340 { 341 if (isUndefined()) { 342 String ermsg = AntX.uistrs().get("brul.assert.need.2args"); 343 if (getProject()!=null) { 344 log(ermsg,Project.MSG_ERR); 345 } 346 throw new BuildException(ermsg); 347 } 348 349 String unknown = getUnknownValue(); 350 String known = getKnownValue(); 351 352 if (known==null || unknown==null) { return false; 354 } 355 356 boolean hit = true; 357 switch(m_Op) { 358 case 0: { 359 hit = known.equals(unknown); 360 break; 361 } 362 case 1: { 363 hit = unknown.indexOf(known)>=0; 364 break; 365 } 366 case 2: { 367 hit = unknown.startsWith(known); 368 break; 369 } 370 case 3: { 371 hit = getRE().matches(unknown); 372 break; 373 } 374 case 4: { 375 hit = unknown.endsWith(known); 376 break; 377 } 378 } 379 380 return isNegate() ? !hit : hit; 381 } 382 383 384 388 public final FlexString getKnownValueGetter() 389 { 390 return m_knownArg; 391 } 392 393 394 398 public final FlexString getUnknownValueGetter() 399 { 400 return m_unknownArg; 401 } 402 403 private FlexString m_knownArg = new FlexString(); 404 private FlexString m_unknownArg = new FlexString(); 405 private boolean m_Not; 406 private int m_Op = 0; private RegexpMatcher m_RE; 408 } 409 410 411 | Popular Tags |