1 28 29 package com.idaremedia.antx.condition.solo; 30 31 import java.util.ArrayList ; 32 import java.util.Collections ; 33 import java.util.Iterator ; 34 import java.util.List ; 35 36 import org.apache.tools.ant.BuildException; 37 import org.apache.tools.ant.Location; 38 import org.apache.tools.ant.Project; 39 import org.apache.tools.ant.taskdefs.condition.Condition; 40 41 import com.idaremedia.antx.AntX; 42 import com.idaremedia.antx.AssertableTask; 43 import com.idaremedia.antx.FlexString; 44 import com.idaremedia.antx.NoiseLevel; 45 import com.idaremedia.antx.apis.AntLibFriendly; 46 import com.idaremedia.antx.helpers.Strings; 47 import com.idaremedia.antx.helpers.Tk; 48 import com.idaremedia.antx.parameters.EnumSkeleton; 49 import com.idaremedia.antx.starters.Chainable; 50 51 69 70 public abstract class BooleanRule extends AssertableTask 71 implements Condition, Chainable, AntLibFriendly 72 { 73 80 public static final class Operator extends EnumSkeleton 81 { 82 83 public static final int OR_INDEX = 0; 84 85 86 public static final Operator OR = new Operator("or"); 87 88 89 public static final int AND_INDEX = OR_INDEX+1; 90 91 92 public static final Operator AND = new Operator("and"); 93 94 95 96 public Operator() { 97 super(); 98 } 99 100 101 private Operator(String v) { 102 super(v); 103 } 104 105 107 public String [] getValues() { 108 return new String []{"or","and"}; 109 } 110 111 113 public static Operator from(String s) { 114 if (s!=null) { 115 s= Tk.lowercaseFrom(s); 116 if (OR.value.equals(s)) { return OR; } 117 if (AND.value.equals(s)) { return AND; } 118 } 119 return null; 120 } 121 122 124 public static Operator from(String s, Operator dfltOp) { 125 Operator op= from(s); 126 return (op==null) ? dfltOp : op; 127 } 128 } 130 134 137 protected BooleanRule() 138 { 139 super(AntX.rules); 140 m_rules = new ArrayList (INITIAL_CAPACITY); 141 m_rulesRO = Collections.unmodifiableList(m_rules); 142 } 143 144 145 149 protected BooleanRule(String iam) 150 { 151 super(iam); 152 m_rules = new ArrayList (INITIAL_CAPACITY); 153 m_rulesRO = Collections.unmodifiableList(m_rules); 154 } 155 156 157 163 protected BooleanRule(String iam, boolean embedded) 164 { 165 this(iam); 166 setEmbedded(embedded); 167 } 168 169 170 174 public void setProject(Project project) 175 { 176 super.setProject(project); 177 m_updateValue.setProject(project); 178 } 179 180 181 185 protected final boolean isEmbedded() 186 { 187 return m_embedded; 188 } 189 190 191 196 protected final void setEmbedded(boolean isE) 197 { 198 m_embedded= isE; 199 } 200 201 202 206 210 protected final void setDefaultCombineOperator(Operator op) 211 { 212 require_(op!=null,"setDfltOp- nonzro op"); 213 checkModify("setDfltOp"); 214 m_defaultOperator = op; 215 } 216 217 218 223 protected final Operator getDefaultCombineOperator() 224 { 225 return m_defaultOperator; 226 } 227 228 229 241 protected final void setStopQuickEvaluation(boolean quikstop) 242 { 243 m_quickStop = quikstop; 244 } 245 246 247 253 protected final boolean isStopQuickEvaluation() 254 { 255 return m_quickStop; 256 } 257 258 259 263 protected void setUpdateProperty(String pn) 264 { 265 require_(pn!=null && pn.length()>0,"setUpdtProp- nonwspc nam"); 266 checkModify("setUpdtProp"); 267 m_updateProperty = pn; 268 } 269 270 271 276 protected String getUpdateProperty() 277 { 278 return m_updateProperty; 279 } 280 281 282 287 protected void setUpdatePropertyValue(String pv) 288 { 289 require_(pv!=null && pv.length()>0,"setUpdtValu- nonwspc val"); 290 checkModify("setUpdtValu"); 291 m_updateValue.set(pv); 292 m_updateValue.setIsLiteral(); 293 } 294 295 296 302 protected final FlexString getUpdatePropertyFlexValue() 303 { 304 return m_updateValue; 305 } 306 307 308 313 protected String getUpdatePropertyValue() 314 { 315 return String.valueOf(m_updateValue.getValue()); 316 } 317 318 319 324 protected void setUpdateVariable(String pn) 325 { 326 require_(pn!=null && pn.length()>0,"setUpdtVar- nonzro varnam"); 327 checkModify("setUpdtVar"); 328 m_updateVariable = pn; 329 } 330 331 332 337 protected String getUpdateVariable() 338 { 339 return m_updateVariable; 340 } 341 342 343 347 public String getId() 348 { 349 if (getLocation()!=Location.UNKNOWN_LOCATION) { 350 return getTaskName()+"@"+getLocation().toString(); 351 } 352 return getTaskName()+"@"+String.valueOf(System.identityHashCode(this)); 353 } 354 355 356 363 public final static NoiseLevel getPreferenceMsgLevel(Project P) 364 { 365 String s = Tk.getTheProperty 366 (P, AntX.PROPERTY_FALSE_PREFER_NOISELEVEL_PROP); 367 368 NoiseLevel nl= NoiseLevel.WARNING; 369 if (s!=null) { 370 nl = NoiseLevel.from(s,nl); 371 } 372 return nl; 373 } 374 375 376 380 383 private List getConditionsList() 384 { 385 return m_rules; 386 } 387 388 389 395 public void xaddCondition(Condition c) 396 { 397 require_(c!=null,"addInrRul- nonzro rul"); 398 checkModify("addRul"); 399 400 getConditionsList().add(c); 401 } 402 403 404 414 public boolean xaddRootCondition(Condition c) 415 { 416 require_(c!=null,"add1Rul- nonzro rul"); 417 checkModify("add1Rul"); 418 419 List l= getConditionsList(); 420 if (!l.isEmpty()) { 421 return false; 422 } 423 l.add(c); 424 return true; 425 } 426 427 428 434 protected final List getConditions() 435 { 436 return m_rulesRO; 437 } 438 439 440 444 protected final boolean isEmpty() 445 { 446 return m_rulesRO.isEmpty(); 447 } 448 449 450 456 protected final Condition getRootCondition() 457 { 458 List list= getConditions(); 459 if (list.size()!=1) { 460 return null; 461 } 462 return (Condition)list.get(0); 463 } 464 465 466 472 protected String getConditionNames(final int N) 473 { 474 List cl= getConditionsList(); 475 if (cl.isEmpty() || N==0) { 476 return Strings.NONE; 477 } 478 StringBuffer sb= new StringBuffer (300); 479 int i=0; 480 sb.append(getDefaultCombineOperator().getValue().toUpperCase()); 481 sb.append('['); 482 Iterator itr= cl.iterator(); 483 while (itr.hasNext()) { 484 if (i!=0) { sb.append(','); } 485 sb.append(Tk.leafNameFrom(itr.next().getClass())); 486 i++; 487 if (i==N) { 488 break; 489 } 490 } 491 sb.append(']'); 492 return sb.toString(); 493 } 494 495 496 503 public void freezeDefinition() 504 { 505 setFrozen(); 506 } 507 508 509 514 protected final void setFrozen() 515 { 516 m_isFrozen = true; 517 } 518 519 520 523 protected final boolean isFrozen() 524 { 525 return m_isFrozen; 526 } 527 528 529 533 protected final void checkModify(String who) 534 { 535 require_(!m_isFrozen,who+"- not frozen"); 536 } 537 538 539 543 549 protected abstract void setEvalResult(boolean istrue, String listing); 550 551 552 553 558 public void execute() throws BuildException 559 { 560 if (!isEmbedded()) { 561 eval(); 562 } 563 } 564 565 566 570 576 protected void cloneInternals(BooleanRule copy) 577 { 578 copy.m_rules = (ArrayList )m_rules.clone(); 579 copy.m_rulesRO = Collections.unmodifiableList(m_rules); 580 } 581 582 586 587 protected static final String ONLY_ONE= "- only one condition in rule"; 588 private static final int INITIAL_CAPACITY=5; 589 590 private ArrayList m_rules; private List m_rulesRO; 593 private Operator m_defaultOperator= Operator.AND; 594 private String m_updateProperty; private String m_updateVariable; private FlexString m_updateValue= new FlexString(Strings.TRUE); 597 private boolean m_embedded=true; private volatile boolean m_isFrozen; private boolean m_quickStop=true;} 601 602 603 | Popular Tags |