1 18 package org.apache.tools.ant.types.resources.comparators; 19 20 import java.util.Stack ; 21 import java.util.Vector ; 22 import java.util.Iterator ; 23 24 import org.apache.tools.ant.BuildException; 25 import org.apache.tools.ant.Project; 26 import org.apache.tools.ant.types.DataType; 27 import org.apache.tools.ant.types.Resource; 28 29 34 public class DelegatedResourceComparator extends ResourceComparator { 35 36 private Vector v = null; 37 38 42 public synchronized void add(ResourceComparator c) { 43 if (isReference()) { 44 throw noChildrenAllowed(); 45 } 46 if (c == null) { 47 return; 48 } 49 v = (v == null) ? new Vector () : v; 50 v.add(c); 51 } 52 53 59 public synchronized boolean equals(Object o) { 60 if (o == this) { 61 return true; 62 } 63 if (isReference()) { 64 return getCheckedRef().equals(o); 65 } 66 if (!(o instanceof DelegatedResourceComparator)) { 67 return false; 68 } 69 Vector ov = ((DelegatedResourceComparator) o).v; 70 return v == null ? ov == null : v.equals(ov); 71 } 72 73 77 public synchronized int hashCode() { 78 if (isReference()) { 79 return getCheckedRef().hashCode(); 80 } 81 return v == null ? 0 : v.hashCode(); 82 } 83 84 85 protected synchronized int resourceCompare(Resource foo, Resource bar) { 86 if (v == null || v.isEmpty()) { 88 return foo.compareTo(bar); 89 } 90 int result = 0; 91 for (Iterator i = v.iterator(); result == 0 && i.hasNext();) { 92 result = ((ResourceComparator) i.next()).resourceCompare(foo, bar); 93 } 94 return result; 95 } 96 97 104 protected void dieOnCircularReference(Stack stk, Project p) 105 throws BuildException { 106 if (isChecked()) { 107 return; 108 } 109 if (isReference()) { 110 super.dieOnCircularReference(stk, p); 111 } else { 112 if (!(v == null || v.isEmpty())) { 113 for (Iterator i = v.iterator(); i.hasNext();) { 114 Object o = i.next(); 115 if (o instanceof DataType) { 116 stk.push(o); 117 invokeCircularReferenceCheck((DataType) o, stk, p); 118 } 119 } 120 } 121 setChecked(true); 122 } 123 } 124 } 125 | Popular Tags |