1 28 29 package com.idaremedia.antx.flowcontrol.call; 30 31 import java.util.Iterator ; 32 import java.util.Map ; 33 34 import org.apache.tools.ant.BuildException; 35 import org.apache.tools.ant.Project; 36 import org.apache.tools.ant.Target; 37 import org.apache.tools.ant.Task; 38 import org.apache.tools.ant.taskdefs.Property; 39 40 import com.idaremedia.antx.AntX; 41 import com.idaremedia.antx.Iteration; 42 import com.idaremedia.antx.flowcontrol.FlowConstants; 43 import com.idaremedia.antx.ownhelpers.TaskExaminer; 44 45 57 58 public final class StepLauncherCaller extends AnyTargetCaller 59 { 60 64 private static final String VERIFIED_FLAG= 65 AntX.ANTX_INTERNAL_ID+"steplaunch.specialtargetname"; 66 67 68 74 public StepLauncherCaller(OnceTask from) 75 throws BuildException 76 { 77 super(from, findSpecialTarget(from)); 78 } 79 80 81 88 public StepLauncherCaller(OnceTask from, String targetName) 89 { 90 super(from,targetName); 91 verifySpecialTarget(from,targetName); 92 } 93 94 95 98 StepLauncherCaller(OnceTask from, String targetName, boolean verified) 99 { 100 super(from,targetName); 101 if (!verified) { 102 verifySpecialTarget(from,targetName); 103 } 104 } 105 106 107 108 115 public static final StepLauncherCaller create 116 (OnceTask from, boolean verified, String specialTargetName, 117 String stepName, String stepClass, int searchDepth) 118 { 119 StepLauncherCaller caller; 120 caller = new StepLauncherCaller(from,specialTargetName,verified); 121 caller.setStepName(stepName); 122 123 Property p; 124 125 p = caller.createProperty(); 126 p.setName(FlowConstants.DEFAULT_STEP_LAUNCHER_TARGET_PROP); 127 p.setValue(from.getOwningTarget().getName()); 128 129 p = caller.createProperty(); 130 p.setName(FlowConstants.DEFAULT_STEP_LAUNCHER_STEPNAME_PROP); 131 p.setValue(stepName); 132 133 p = caller.createProperty(); 134 p.setName(FlowConstants.DEFAULT_STEP_LAUNCHER_STEPCLASS_PROP); 135 p.setValue(stepClass); 136 137 p = caller.createProperty(); 138 p.setName(FlowConstants.DEFAULT_STEP_LAUNCHER_SEARCHDEPTH_PROP); 139 p.setValue(String.valueOf(searchDepth)); 140 141 return caller; 142 } 143 144 145 148 final static void verifySpecialTarget(OnceTask from, 149 String specialTargetName) 150 { 151 Project P = from.getProject(); 152 String doneFlag = P.getProperty(VERIFIED_FLAG); 153 if (specialTargetName.equals(doneFlag)) { 154 return; 155 } 156 Map targets = (Map )P.getTargets().clone(); Iterator itr= targets.values().iterator(); 158 while (itr.hasNext()) { 159 Target target = (Target)itr.next(); 160 if (specialTargetName.equals(target.getName())) { 161 Task[] tasks = target.getTasks(); 162 if (tasks.length==1) { 163 Task task = TaskExaminer.trueTask(tasks[0],COI_,from); 164 if (task instanceof StepLauncher) { 165 P.setNewProperty(VERIFIED_FLAG,specialTargetName); 166 return; } 168 } 169 break; 170 } 171 } 172 throw new BuildException 173 (Iteration.uistrs().get("flow.bad.specialtarget", specialTargetName)); 174 } 175 176 177 182 final static String findSpecialTarget(OnceTask from) 183 { 184 final Project P= from.getProject(); 185 186 String specialTargetName = 187 P.getProperty(FlowConstants.DEFAULT_STEP_CALLER_SPECIAL_TARGETNAME_PROP); 188 189 if (specialTargetName==null) { 190 specialTargetName = FlowConstants.DEFAULT_STEP_CALLER_SPECIAL_TARGETNAME; 191 } 192 verifySpecialTarget(from, specialTargetName); 193 194 return specialTargetName; 195 } 196 197 198 203 private static final Class [] COI_= { 204 StepLauncher.class 205 }; 206 207 } 208 209 210 211 | Popular Tags |