1 28 29 package com.idaremedia.antx.construct; 30 31 import java.util.List ; 32 import java.util.Map ; 33 34 import org.apache.tools.ant.BuildException; 35 import org.apache.tools.ant.DynamicAttribute; 36 import org.apache.tools.ant.Project; 37 import org.apache.tools.ant.Task; 38 import org.apache.tools.ant.TaskContainer; 39 import org.apache.tools.ant.UnknownElement; 40 41 import com.idaremedia.antx.AntX; 42 import com.idaremedia.antx.AntXFixture; 43 import com.idaremedia.antx.AssertableTask; 44 import com.idaremedia.antx.FixtureExaminer; 45 import com.idaremedia.antx.apis.Requester; 46 import com.idaremedia.antx.helpers.Tk; 47 import com.idaremedia.antx.ownhelpers.TaskExaminer; 48 import com.idaremedia.antx.ownhelpers.UEContainerProxy; 49 50 85 86 public final class AlterTaskTask extends AssertableTask 87 implements TaskContainer, DynamicAttribute 88 { 89 92 public AlterTaskTask() 93 { 94 super(AntX.utilities+"AlterTaskTask:"); 95 } 96 97 98 99 104 public void setName(String refId) 105 { 106 require_(refId!=null,"setName- nonzro refid"); 107 m_itemUC = (UEContainerProxy)FixtureExaminer.getReferencedObject(getProject(), 108 new Requester.ForComponent(this), refId, UEContainerProxy.class); 109 } 110 111 112 113 118 public void setResolveProperties(boolean inLoop) 119 { 120 m_tryResolveProperties = inLoop; 121 } 122 123 124 125 131 public void setChild(String childElementName) 132 { 133 m_childElementName = childElementName; 134 } 135 136 137 138 145 public void setDynamicAttribute(String param, String value) 146 { 147 require_(param!=null,"setDynAttr- nonzro param"); 148 if (param.startsWith("addparam-")) { 149 param = param.substring("addparam-".length()); 150 if (param.length()==0) { 151 String err = getAntXMsg("task.unsupported.attr",getTaskName(),""); 152 log(err,Project.MSG_ERR); 153 throw new BuildException(err,getLocation()); 154 } 155 } 156 if (m_tryResolveProperties) { 157 value = tryResolve(getProject(),value); 158 } 159 m_itemAtrs.put(param,value); 160 } 161 162 163 164 169 public void addTask(Task task) 170 { 171 require_(task instanceof UnknownElement, "addTask- is UE proxy"); 172 m_nestedElems.add(task); 173 } 174 175 176 177 181 public void execute() 182 { 183 verifyCanExecute_("exec"); 184 final boolean grandchild = m_childElementName!=null; 185 186 if (!m_nestedElems.isEmpty()) { 187 for (int i=0,N=m_nestedElems.size();i<N;i++) { 188 UnknownElement ue = (UnknownElement)m_nestedElems.get(i); 189 if (m_tryResolveProperties) { 190 ue = TaskExaminer.copyUEProxy 191 (ue,ue.getProject(),ue.getOwningTarget(),true); 192 } 193 if (grandchild) { 194 m_itemUC.addGrandchildTask(ue,m_childElementName); 195 } else { 196 m_itemUC.addTask(ue); 197 } 198 } 199 } 200 201 if (!m_itemAtrs.isEmpty()) { 202 if (grandchild) { 203 m_itemUC.setGrandchildAttributes(m_itemAtrs,m_childElementName); 204 } else { 205 m_itemUC.setAttributes(m_itemAtrs); 206 } 207 } 208 209 m_itemUC = null; 210 m_nestedElems = null; 211 m_itemAtrs = null; 212 } 213 214 215 216 219 protected void verifyCanExecute_(String calr) 220 { 221 verifyInProject_(calr); 222 223 if (m_itemUC==null) { 224 String ermsg = uistrs().get("task.needs.this.attr", getTaskName(), "name"); 225 log(ermsg,Project.MSG_ERR); 226 throw new BuildException(ermsg,getLocation()); 227 } 228 } 229 230 231 238 private static String tryResolve(final Project P, final String string) 239 { 240 try { 241 return Tk.resolveString(P,string); 242 } catch(BuildException tooSoonX) { 243 return string; 244 } 245 } 246 247 248 249 private UEContainerProxy m_itemUC; private List m_nestedElems = AntXFixture.newList(); 251 private Map m_itemAtrs = AntXFixture.newMap(); 252 private boolean m_tryResolveProperties; private String m_childElementName; 254 } 255 256 | Popular Tags |