KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > fr > jayasoft > ivy > ant > AntBuildTrigger


1 package fr.jayasoft.ivy.ant;
2
3 import java.io.File JavaDoc;
4 import java.util.ArrayList JavaDoc;
5 import java.util.Collection JavaDoc;
6 import java.util.Iterator JavaDoc;
7 import java.util.Map JavaDoc;
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 /**
22  * Triggers an ant build on an event occurence.
23  *
24  * Example of use:
25  * <ant-build-trigger event="pre-resolve-dependency" filter="revision=latest.integration"
26  * antfile="/path/to/[module]/build.xml" target="compile"/>
27  * Triggers an ant build for any dependency in asked in latest.integration, just before resolving the
28  * dependency.
29  *
30  * @see AntCallTrigger
31  * @since 1.4
32  * @author Xavier Hanin
33  *
34  */

35 public class AntBuildTrigger extends AbstractTrigger implements Trigger {
36     private boolean _onlyonce = true;
37     private String JavaDoc _target = null;
38     private Collection JavaDoc _builds = new ArrayList JavaDoc();
39     private String JavaDoc _buildFilePattern;
40     private String JavaDoc _prefix;
41
42     public void progress(IvyEvent event) {
43         File JavaDoc 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 JavaDoc target = getTarget();
61                 if (target != null) {
62                     ant.setTarget(target);
63                 }
64                 Map JavaDoc atts = event.getAttributes();
65                 for (Iterator JavaDoc iter = atts.keySet().iterator(); iter.hasNext();) {
66                     String JavaDoc key = (String JavaDoc) iter.next();
67                     String JavaDoc value = (String JavaDoc) 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 JavaDoc f) {
91         _builds.add(f.getAbsolutePath());
92     }
93
94     private boolean isBuilt(File JavaDoc f) {
95         return _builds.contains(f.getAbsolutePath());
96     }
97
98     private File JavaDoc getBuildFile(IvyEvent event) {
99         return new File JavaDoc(IvyPatternHelper.substituteTokens(getBuildFilePattern(), event.getAttributes()));
100     }
101
102     public String JavaDoc getBuildFilePattern() {
103         return _buildFilePattern;
104     }
105     
106     public void setAntfile(String JavaDoc pattern) {
107         _buildFilePattern = pattern;
108     }
109
110     public String JavaDoc getTarget() {
111         return _target;
112     }
113
114     public void setTarget(String JavaDoc 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 JavaDoc getPrefix() {
127         return _prefix;
128     }
129
130     public void setPrefix(String JavaDoc prefix) {
131         _prefix = prefix;
132         if (!prefix.endsWith(".")) {
133             _prefix += ".";
134         }
135     }
136 }
137
Popular Tags