1 package fr.jayasoft.ivy.ant; 2 3 import java.io.File ; 4 import java.util.ArrayList ; 5 import java.util.Collection ; 6 import java.util.Iterator ; 7 import java.util.Map ; 8 9 import org.apache.tools.ant.Project; 10 import org.apache.tools.ant.taskdefs.Ant; 11 import org.apache.tools.ant.taskdefs.Property; 12 13 import fr.jayasoft.ivy.IvyContext; 14 import fr.jayasoft.ivy.event.AbstractTrigger; 15 import fr.jayasoft.ivy.event.IvyEvent; 16 import fr.jayasoft.ivy.event.Trigger; 17 import fr.jayasoft.ivy.util.IvyPatternHelper; 18 import fr.jayasoft.ivy.util.Message; 19 import fr.jayasoft.ivy.util.MessageImpl; 20 21 35 public class AntBuildTrigger extends AbstractTrigger implements Trigger { 36 private boolean _onlyonce = true; 37 private String _target = null; 38 private Collection _builds = new ArrayList (); 39 private String _buildFilePattern; 40 private String _prefix; 41 42 public void progress(IvyEvent event) { 43 File f = getBuildFile(event); 44 if (f.exists()) { 45 if (_onlyonce && isBuilt(f)) { 46 Message.verbose("target build file already built, skipping: "+f); 47 } else { 48 Ant ant = new Ant(); 49 Project project = (Project)IvyContext.getContext().get(IvyTask.ANT_PROJECT_CONTEXT_KEY); 50 if (project == null) { 51 project = new Project(); 52 project.init(); 53 } 54 55 ant.setProject(project); 56 ant.setTaskName("ant"); 57 58 ant.setAntfile(f.getAbsolutePath()); 59 ant.setInheritAll(false); 60 String target = getTarget(); 61 if (target != null) { 62 ant.setTarget(target); 63 } 64 Map atts = event.getAttributes(); 65 for (Iterator iter = atts.keySet().iterator(); iter.hasNext();) { 66 String key = (String ) iter.next(); 67 String value = (String ) atts.get(key); 68 Property p = ant.createProperty(); 69 p.setName(_prefix == null?key:_prefix+key); 70 p.setValue(value); 71 } 72 73 Message.verbose("triggering build: "+f+" target="+target+" for "+event); 74 MessageImpl impl = IvyContext.getContext().getMessageImpl(); 75 try { 76 IvyContext.getContext().setMessageImpl(null); 77 ant.execute(); 78 markBuilt(f); 79 } finally { 80 IvyContext.getContext().setMessageImpl(impl); 81 } 82 83 Message.debug("triggered build finished: "+f+" target="+target+" for "+event); 84 } 85 } else { 86 Message.verbose("no build file found for dependency, skipping: "+f); 87 } 88 } 89 90 private void markBuilt(File f) { 91 _builds.add(f.getAbsolutePath()); 92 } 93 94 private boolean isBuilt(File f) { 95 return _builds.contains(f.getAbsolutePath()); 96 } 97 98 private File getBuildFile(IvyEvent event) { 99 return new File (IvyPatternHelper.substituteTokens(getBuildFilePattern(), event.getAttributes())); 100 } 101 102 public String getBuildFilePattern() { 103 return _buildFilePattern; 104 } 105 106 public void setAntfile(String pattern) { 107 _buildFilePattern = pattern; 108 } 109 110 public String getTarget() { 111 return _target; 112 } 113 114 public void setTarget(String target) { 115 _target = target; 116 } 117 118 public boolean isOnlyonce() { 119 return _onlyonce; 120 } 121 122 public void setOnlyonce(boolean onlyonce) { 123 _onlyonce = onlyonce; 124 } 125 126 public String getPrefix() { 127 return _prefix; 128 } 129 130 public void setPrefix(String prefix) { 131 _prefix = prefix; 132 if (!prefix.endsWith(".")) { 133 _prefix += "."; 134 } 135 } 136 } 137 | Popular Tags |