1 28 29 package com.idaremedia.antx.condition.solo; 30 31 import org.apache.tools.ant.BuildException; 32 import org.apache.tools.ant.Project; 33 import org.apache.tools.ant.ProjectComponent; 34 import org.apache.tools.ant.taskdefs.condition.Condition; 35 36 import com.idaremedia.antx.AntX; 37 import com.idaremedia.antx.AssertableProjectComponent; 38 import com.idaremedia.antx.helpers.Strings; 39 40 51 52 final class EqualFields extends AssertableProjectComponent 53 implements Condition 54 { 55 58 EqualFields() 59 { 60 super(AntX.conditions); 61 initFields(); 62 } 63 64 65 69 EqualFields(String iam) 70 { 71 super(iam); 72 initFields(); 73 } 74 75 76 80 void setItem1(String refid) 81 { 82 require_(refid!=null,"setItem1- nonzro refid"); 83 m_item1 = refid; 84 } 85 86 87 91 String getItem1() 92 { 93 return (m_item1==__NULL1) ? null : m_item1; 94 } 95 96 97 101 void setItem2(String refid) 102 { 103 if (refid==null || Strings.NULL.equalsIgnoreCase(refid)) { 104 m_item2 = null; 105 } else { 106 m_item2 = refid; 107 } 108 } 109 110 111 116 String getItem2() 117 { 118 return (m_item2==__NULL2) ? null : 119 (m_item2==null) ? Strings.NULL : m_item2; 120 } 121 122 123 128 private Object getItemField(String refid, boolean refRequired) 129 { 130 if (refid==null || refid==__NULL1 || refid==__NULL2) { 131 if (refRequired) { 132 String ermsg = uistrs().get("brul.assert.samefield.need.item"); 133 log(ermsg,Project.MSG_ERR); 134 throw new BuildException(ermsg); 135 } 136 return refid==null ? null : getProject(); 137 } 138 Object obj = getProject().getReference(refid); 140 141 if (!(obj instanceof ProjectComponent)) { 142 String ermsg = uistrs().get("brul.assert.samefield.missing.field", 143 refid, "Project"); 144 log(ermsg,Project.MSG_ERR); 145 throw new BuildException(ermsg); 146 } 147 return ((ProjectComponent)obj).getProject(); 148 } 149 150 151 155 public boolean eval() 156 { 157 verifyInProject_("eval"); 158 Object P1 = getItemField(m_item1,true); 159 Object P2 = getItemField(m_item2,false); 160 return equalObjects(P1,P2,true); 161 } 162 163 164 168 static boolean equalObjects(Object a, Object b, boolean identical) 169 { 170 if (a==null) { 171 return b==null; 172 } 173 if (b==null) { 174 return false; 175 } 176 if (a==b) { 177 return true; 178 } 179 return identical ? false : a.equals(b); 180 } 181 182 183 187 private static final String __NULL1, __NULL2; static { 189 StringBuffer sb = new StringBuffer 190 (String.valueOf(System.identityHashCode(EqualFields.class))); 191 sb.append("_"); 192 __NULL1 = sb.substring(0); 193 sb.append("_"); 194 __NULL2 = sb.substring(0); 195 sb = null; 196 } 197 private void initFields() 198 { 199 m_item1 = __NULL1; 200 m_item2 = __NULL2; 201 } 202 203 private String m_item1, m_item2; 204 } 205 206 207 | Popular Tags |