source: release-kits/wirk3/ant-scripts/tasks/antelope/src/ise/antelope/tasks/Foreach.java@ 15023

Last change on this file since 15023 was 15023, checked in by oranfry, 16 years ago

did the bulk of the work on wirk3

File size: 6.1 KB
Line 
1/*
2* The Apache Software License, Version 1.1
3*
4* Copyright (c) 2001-2002 The Apache Software Foundation. All rights
5* reserved.
6*
7* Redistribution and use in source and binary forms, with or without
8* modification, are permitted provided that the following conditions
9* are met:
10*
11* 1. Redistributions of source code must retain the above copyright
12* notice, this list of conditions and the following disclaimer.
13*
14* 2. Redistributions in binary form must reproduce the above copyright
15* notice, this list of conditions and the following disclaimer in
16* the documentation and/or other materials provided with the
17* distribution.
18*
19* 3. The end-user documentation included with the redistribution, if
20* any, must include the following acknowlegement:
21* "This product includes software developed by the
22* Apache Software Foundation (http://www.apache.org/)."
23* Alternately, this acknowlegement may appear in the software itself,
24* if and wherever such third-party acknowlegements normally appear.
25*
26* 4. The names "The Jakarta Project", "Ant", and "Apache Software
27* Foundation" must not be used to endorse or promote products derived
28* from this software without prior written permission. For written
29* permission, please contact [email protected].
30*
31* 5. Products derived from this software may not be called "Apache"
32* nor may "Apache" appear in their names without prior written
33* permission of the Apache Group.
34*
35* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
36* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
37* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
38* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
39* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
40* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
41* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
42* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
43* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
44* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
45* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
46* SUCH DAMAGE.
47* ====================================================================
48*
49* This software consists of voluntary contributions made by many
50* individuals on behalf of the Apache Software Foundation. For more
51* information on the Apache Software Foundation, please see
52* <http://www.apache.org/>.
53*/
54package ise.antelope.tasks;
55
56import java.util.*;
57
58import org.apache.tools.ant.BuildException;
59import org.apache.tools.ant.Project;
60import org.apache.tools.ant.Task;
61import org.apache.tools.ant.TaskContainer;
62
63/**
64 * Task container that iterates through a list of values, puts each value into a
65 * property, then executes all nested tasks.
66 *
67 * @author Dale Anson, [email protected]
68 * @version $Revision: 1.1 $
69 * @since Ant 1.5
70 */
71public class Foreach extends Task implements TaskContainer {
72
73 // attribute storage
74 private boolean failOnError = true;
75
76 // vector to hold any nested tasks
77 private Vector tasks = new Vector();
78
79 private String values = "";
80 private String separator = ",";
81 private String name = null;
82 private boolean trim = false;
83
84
85 /**
86 * Ant boolean, stop the build process if any nested task fails. Defaults to
87 * true.
88 *
89 * @param fail Ant boolean, whether to stop the build on error.
90 */
91 public void setFailonerror(boolean fail) {
92 failOnError = fail;
93 }
94
95 /**
96 * Sets the values to iterate through.
97 *
98 * @param values The new values value
99 */
100 public void setValues(String values) {
101 this.values = values;
102 }
103
104 /**
105 * Sets the separator for the values string, defaults to comma.
106 *
107 * @param separator The new separator value
108 */
109 public void setSeparator(String separator) {
110 this.separator = separator;
111 }
112
113
114 /**
115 * Sets the name of the property to set the value in.
116 *
117 * @param name The new property value
118 */
119 public void setProperty(String name) {
120 this.name = name;
121 }
122
123
124 /**
125 * If true, will trim whitespace from both ends of the value. Default is
126 * false, do not trim.
127 *
128 * @param trim The new trim value
129 */
130 public void setTrim(boolean trim) {
131 this.trim = trim;
132 }
133
134 /**
135 * Override {@link org.apache.tools.ant.Task#maybeConfigure maybeConfigure}
136 * in a way that leaves the nested tasks unconfigured until they get
137 * executed.
138 *
139 * @exception BuildException Description of Exception
140 * @since Ant 1.5
141 */
142 public void maybeConfigure() throws BuildException {
143 if (isInvalid()) {
144 super.maybeConfigure();
145 }
146 else {
147 getRuntimeConfigurableWrapper().maybeConfigure(getProject(), false);
148 }
149 }
150
151 /**
152 * Add a nested task to execute. <p>
153 *
154 *
155 *
156 * @param task Nested task to execute. <p>
157 *
158 *
159 */
160 public void addTask(Task task) {
161 if (task != null)
162 tasks.addElement(task);
163 }
164
165
166 /**
167 * Execute this task and all nested Tasks.
168 *
169 * @exception BuildException Description of Exception
170 */
171 public void execute() throws BuildException {
172 Unset unset = new Unset();
173 StringTokenizer st = new StringTokenizer(values, separator);
174 while (st.hasMoreTokens()) {
175 String value = st.nextToken();
176 value = trim ? value.trim() : value;
177 if (name != null) {
178 unset.setName(name);
179 unset.execute();
180 getProject().setProperty(name, value);
181 }
182 for (Enumeration e = tasks.elements(); e.hasMoreElements(); ) {
183 try {
184 Task task = (Task) e.nextElement();
185 task.perform();
186 }
187 catch (Exception ex) {
188 if (failOnError)
189 throw new BuildException(ex.getMessage());
190 else
191 log(ex.getMessage());
192 }
193 }
194 }
195 }
196
197}
198
Note: See TracBrowser for help on using the repository browser.