1 package org.antmod.tasks; 2 3 import java.io.File ; 4 import java.util.ArrayList ; 5 import java.util.Iterator ; 6 7 import org.antmod.conf.AntmodProperties; 8 import org.antmod.descriptor.DescriptorStoreFactory; 9 import org.antmod.descriptor.ReleaseDescriptor; 10 import org.antmod.descriptor.ReleaseTask; 11 import org.antmod.descriptor.ReleaseDescriptor.Module; 12 import org.apache.commons.lang.StringUtils; 13 import org.apache.tools.ant.BuildException; 14 import org.apache.tools.ant.Project; 15 import org.apache.tools.ant.Task; 16 import org.apache.tools.ant.taskdefs.Ant; 17 import org.apache.tools.ant.taskdefs.CallTarget; 18 import org.apache.tools.ant.taskdefs.Property; 19 import org.apache.tools.ant.taskdefs.Ant.Reference; 20 21 29 public final class ModuleIteratorTask extends Task { 30 31 private ReleaseDescriptor descriptor; 32 33 private String target; 34 35 private boolean antOnModule; 36 37 private String [] includeTypes; 38 39 private String [] excludeTypes; 40 41 private boolean logNewlines; 42 43 private ArrayList passbackRefs = new ArrayList (); 44 45 48 public ModuleIteratorTask() { 49 } 50 51 56 public void execute() throws BuildException { 57 if (this.descriptor == null) { 59 throw new BuildException("FAIL: 'descriptor' attribute of moduleiterator task has to be set."); 60 } 61 62 Iterator moduleIter = descriptor.getModules().iterator(); 64 while (moduleIter.hasNext()) { 65 Module module = (Module) moduleIter.next(); 66 if (includesModuleType(module.getType())) { 67 invokeTargetForModule(module); 68 } 69 if (this.logNewlines) { 70 getProject().log("", Project.MSG_WARN); 71 } 72 } 73 } 74 75 81 private void invokeTargetForModule(Module module) throws BuildException { 82 Task invokeTask = null; 83 if (antOnModule) { 84 ConditionalAnt antTask = new ConditionalAnt(); 85 antTask.setInheritAll(true); 86 antTask.setInheritRefs(true); 87 antTask.setProject(getProject()); 88 antTask.setTaskName(getTaskName()); 89 antTask.setTarget(this.target); 90 antTask.setDir(new File (ReleaseTask.getReleaseDir(getProject()), module.getName())); 91 antTask.setAntfile(AntmodProperties.getProperty("antmod.module.antfile")); 92 antTask.setPassbackRefs(this.passbackRefs); 93 invokeTask = antTask; 94 } 95 else { 96 CallTarget antcall = new CallTarget(); 97 antcall.setInheritAll(true); 98 antcall.setProject(getProject()); 99 antcall.setTaskName(getTaskName()); 100 antcall.setTarget(this.target); 101 invokeTask = antcall; 102 } 103 104 createInvokeParam(invokeTask, "antmod.release.name", this.descriptor.getName()); 105 createInvokeParam(invokeTask, "antmod.release.version", this.descriptor.getVersionString()); 106 107 createInvokeParam(invokeTask, "antmod.ismainmodule", String.valueOf(module.equals(this.descriptor.getMainModule()))); 108 createInvokeParam(invokeTask, "antmod.isbuildreleasemodule", String.valueOf(module.equals(this.descriptor.getBuildReleaseModule()))); 109 110 createInvokeParam(invokeTask, "antmod.moduleiterator.module.name", module.getName()); 111 createInvokeParam(invokeTask, "antmod.moduleiterator.module.version", module.getVersion()); 112 createInvokeParam(invokeTask, "antmod.moduleiterator.module.type", module.getType()); 113 if (module.getRepos() != null) { 114 createInvokeParam(invokeTask, "antmod.moduleiterator.module.repos", module.getRepos()); 115 } 116 if (this.descriptor.getScmRevision() != null) { 117 createInvokeParam(invokeTask, "antmod.release.scm.revision", this.descriptor.getScmRevision()); 118 } 119 120 invokeTask.execute(); 121 } 122 123 static void createInvokeParam(Task invokeTask, String paramName, String paramValue) { 124 Property param = null; 125 if (invokeTask instanceof Ant) { 126 param = ((Ant) invokeTask).createProperty(); 127 } 128 else if (invokeTask instanceof CallTarget) { 129 param = ((CallTarget) invokeTask).createParam(); 130 } 131 param.setName(paramName); 132 param.setValue(paramValue); 133 } 134 135 144 public void setDescriptor(String descriptorName) { 145 if (descriptorName == null) { 146 descriptorName = getProject().getProperty("antmod.release"); 147 } 148 if (descriptorName != null) { 149 this.descriptor = DescriptorStoreFactory.getConfiguredDescriptorStore().getReleaseDescriptor(descriptorName); 150 } 151 } 152 153 156 public void setTarget(String target) { 157 this.target = target; 158 } 159 160 163 public void setAntOnModule(boolean antOnModule) { 164 this.antOnModule = antOnModule; 165 } 166 167 174 public void setIncludeTypes(String includeTypes) { 175 this.includeTypes = StringUtils.split(includeTypes, ","); 176 } 177 178 184 public void setExcludeTypes(String excludeTypes) { 185 this.excludeTypes = StringUtils.split(excludeTypes, ","); 186 } 187 188 193 public void setLogNewlines(boolean logNewlines) { 194 this.logNewlines = logNewlines; 195 } 196 197 203 public void addPassbackRef(Reference passbackReference) { 204 this.passbackRefs.add(passbackReference); 205 } 206 207 210 private boolean includesModuleType(String moduleType) { 211 if (this.excludeTypes != null) { 212 for (int i = this.excludeTypes.length; i-- > 0;) { 213 if (this.excludeTypes[i].equalsIgnoreCase(moduleType)) { 214 return false; 215 } 216 } 217 } 218 if (this.includeTypes != null) { 219 boolean releaseHasBuildreleaseModule = !this.descriptor.getModulesByType(Module.TYPE_BUILDRELEASE).isEmpty(); 220 for (int i = this.includeTypes.length; i-- > 0;) { 221 String includeType = this.includeTypes[i]; 222 if (!releaseHasBuildreleaseModule && includeType.equalsIgnoreCase(Module.TYPE_BUILDRELEASE) 223 && Module.TYPE_MAIN.equalsIgnoreCase(moduleType)) { 224 return true; 227 } 228 else if (this.includeTypes[i].equalsIgnoreCase(moduleType)) { 229 return true; 230 } 231 } 232 return false; 233 } 234 return true; 235 } 236 } | Popular Tags |