source: other-projects/trunk/realistic-books/packages/AntInstaller/web/java2html/antinstaller/org/tp23/antinstaller/antmod/ProjectHelper3.java.html@ 19253

Last change on this file since 19253 was 19253, checked in by davidb, 15 years ago

Establishing a source code repository for Veronica's Realistic Book's software

File size: 103.0 KB
Line 
1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
2<HTML>
3<HEAD>
4<LINK REL=STYLESHEET TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
5<META NAME="GENERATOR" CONTENT="Java2HTML Version 1.4">
6<TITLE>org.tp23.antinstaller.antmod.ProjectHelper3 (Java2HTML)</TITLE>
7</HEAD>
8<BODY><TABLE id="Header" border="0" cellpadding="0" cellspacing="0" width="100%">
9<tr>
10<td colspan="2" width="33%">&nbsp;</td>
11<td align="center" colspan="2" width="33%">
12<font size="4" class="ClassName">ProjectHelper3.java</font>
13</td>
14<td align="right" colspan="2" width="33%">&nbsp;</td>
15</tr>
16</TABLE>
17<pre CLASS="Classes">
18<FONT CLASS="LN">1 </FONT><A NAME="1"></A><FONT CLASS="MultiLineComment">/*
19<FONT CLASS="LN">2 </FONT><A NAME="2"></A> * Copyright 2000-2004 The Apache Software Foundation
20<FONT CLASS="LN">3 </FONT><A NAME="3"></A> *
21<FONT CLASS="LN">4 </FONT><A NAME="4"></A> * Licensed under the Apache License, Version 2.0 (the "License");
22<FONT CLASS="LN">5 </FONT><A NAME="5"></A> * you may not use this file except in compliance with the License.
23<FONT CLASS="LN">6 </FONT><A NAME="6"></A> * You may obtain a copy of the License at
24<FONT CLASS="LN">7 </FONT><A NAME="7"></A> *
25<FONT CLASS="LN">8 </FONT><A NAME="8"></A> * http://www.apache.org/licenses/LICENSE-2.0
26<FONT CLASS="LN">9 </FONT><A NAME="9"></A> *
27<FONT CLASS="LN">10</FONT><A NAME="10"></A> * Unless required by applicable law or agreed to in writing, software
28<FONT CLASS="LN">11</FONT><A NAME="11"></A> * distributed under the License is distributed on an "AS IS" BASIS,
29<FONT CLASS="LN">12</FONT><A NAME="12"></A> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
30<FONT CLASS="LN">13</FONT><A NAME="13"></A> * See the License for the specific language governing permissions and
31<FONT CLASS="LN">14</FONT><A NAME="14"></A> * limitations under the License.
32<FONT CLASS="LN">15</FONT><A NAME="15"></A> *
33<FONT CLASS="LN">16</FONT><A NAME="16"></A> */</FONT>
34<FONT CLASS="LN">17</FONT><A NAME="17"></A>
35<FONT CLASS="LN">18</FONT><A NAME="18"></A><FONT CLASS="Package">package</FONT> <A HREF="../../../../org.tp23.antinstaller.antmod.index.html" target="packageFrame">org.tp23.antinstaller.antmod</A>;
36<FONT CLASS="LN">19</FONT><A NAME="19"></A>
37<FONT CLASS="LN">20</FONT><A NAME="20"></A><FONT CLASS="Import">import</FONT> java.io.File;
38<FONT CLASS="LN">21</FONT><A NAME="21"></A><FONT CLASS="Import">import</FONT> java.io.FileInputStream;
39<FONT CLASS="LN">22</FONT><A NAME="22"></A><FONT CLASS="Import">import</FONT> java.io.FileNotFoundException;
40<FONT CLASS="LN">23</FONT><A NAME="23"></A><FONT CLASS="Import">import</FONT> java.io.IOException;
41<FONT CLASS="LN">24</FONT><A NAME="24"></A><FONT CLASS="Import">import</FONT> java.io.InputStream;
42<FONT CLASS="LN">25</FONT><A NAME="25"></A><FONT CLASS="Import">import</FONT> java.io.UnsupportedEncodingException;
43<FONT CLASS="LN">26</FONT><A NAME="26"></A><FONT CLASS="Import">import</FONT> java.net.URL;
44<FONT CLASS="LN">27</FONT><A NAME="27"></A><FONT CLASS="Import">import</FONT> java.util.Hashtable;
45<FONT CLASS="LN">28</FONT><A NAME="28"></A><FONT CLASS="Import">import</FONT> java.util.Stack;
46<FONT CLASS="LN">29</FONT><A NAME="29"></A>
47<FONT CLASS="LN">30</FONT><A NAME="30"></A><FONT CLASS="Import">import</FONT> org.apache.tools.ant.BuildException;
48<FONT CLASS="LN">31</FONT><A NAME="31"></A><FONT CLASS="Import">import</FONT> org.apache.tools.ant.Location;
49<FONT CLASS="LN">32</FONT><A NAME="32"></A><FONT CLASS="Import">import</FONT> org.apache.tools.ant.Project;
50<FONT CLASS="LN">33</FONT><A NAME="33"></A><FONT CLASS="Import">import</FONT> org.apache.tools.ant.ProjectHelper;
51<FONT CLASS="LN">34</FONT><A NAME="34"></A><FONT CLASS="Import">import</FONT> org.apache.tools.ant.RuntimeConfigurable;
52<FONT CLASS="LN">35</FONT><A NAME="35"></A><FONT CLASS="Import">import</FONT> org.apache.tools.ant.Target;
53<FONT CLASS="LN">36</FONT><A NAME="36"></A><FONT CLASS="Import">import</FONT> org.apache.tools.ant.Task;
54<FONT CLASS="LN">37</FONT><A NAME="37"></A><FONT CLASS="Import">import</FONT> org.apache.tools.ant.UnknownElement;
55<FONT CLASS="LN">38</FONT><A NAME="38"></A><FONT CLASS="Import">import</FONT> org.apache.tools.ant.helper.AntXMLContext;
56<FONT CLASS="LN">39</FONT><A NAME="39"></A><FONT CLASS="Import">import</FONT> org.apache.tools.ant.util.FileUtils;
57<FONT CLASS="LN">40</FONT><A NAME="40"></A><FONT CLASS="Import">import</FONT> org.apache.tools.ant.util.JAXPUtils;
58<FONT CLASS="LN">41</FONT><A NAME="41"></A><FONT CLASS="Import">import</FONT> org.xml.sax.Attributes;
59<FONT CLASS="LN">42</FONT><A NAME="42"></A><FONT CLASS="Import">import</FONT> org.xml.sax.InputSource;
60<FONT CLASS="LN">43</FONT><A NAME="43"></A><FONT CLASS="Import">import</FONT> org.xml.sax.Locator;
61<FONT CLASS="LN">44</FONT><A NAME="44"></A><FONT CLASS="Import">import</FONT> org.xml.sax.SAXException;
62<FONT CLASS="LN">45</FONT><A NAME="45"></A><FONT CLASS="Import">import</FONT> org.xml.sax.SAXParseException;
63<FONT CLASS="LN">46</FONT><A NAME="46"></A><FONT CLASS="Import">import</FONT> org.xml.sax.XMLReader;
64<FONT CLASS="LN">47</FONT><A NAME="47"></A><FONT CLASS="Import">import</FONT> org.xml.sax.helpers.DefaultHandler;
65<FONT CLASS="LN">48</FONT><A NAME="48"></A>
66<FONT CLASS="LN">49</FONT><A NAME="49"></A><FONT CLASS="FormalComment">/**
67<FONT CLASS="LN">50</FONT><A NAME="50"></A> * Sax2 based project reader
68<FONT CLASS="LN">51</FONT><A NAME="51"></A> *
69<FONT CLASS="LN">52</FONT><A NAME="52"></A>* This file has been modified by Paul Hinds for Antinstaller and is not the same
70<FONT CLASS="LN">53</FONT><A NAME="53"></A>* as the ProjectHelper2 delivered with Ant 1.6 although almost identical
71<FONT CLASS="LN">54</FONT><A NAME="54"></A> */</FONT>
72<FONT CLASS="LN">55</FONT><A NAME="55"></A><FONT CLASS="Public">public</FONT> <FONT CLASS="Class">class</FONT> ProjectHelper3 <FONT CLASS="Extends">extends</FONT> ProjectHelper {
73<FONT CLASS="LN">56</FONT><A NAME="56"></A> <FONT CLASS="MultiLineComment">/* Stateless */</FONT>
74<FONT CLASS="LN">57</FONT><A NAME="57"></A>
75<FONT CLASS="LN">58</FONT><A NAME="58"></A> <FONT CLASS="SingleLineComment">// singletons - since all state is in the context
76<FONT CLASS="LN">59</FONT><A NAME="59"></A></FONT> <FONT CLASS="Private">private</FONT> <FONT CLASS="Static">static</FONT> AntHandler elementHandler = <FONT CLASS="New">new</FONT> ElementHandler();
77<FONT CLASS="LN">60</FONT><A NAME="60"></A> <FONT CLASS="Private">private</FONT> <FONT CLASS="Static">static</FONT> AntHandler targetHandler = <FONT CLASS="New">new</FONT> TargetHandler();
78<FONT CLASS="LN">61</FONT><A NAME="61"></A> <FONT CLASS="Private">private</FONT> <FONT CLASS="Static">static</FONT> AntHandler mainHandler = <FONT CLASS="New">new</FONT> MainHandler();
79<FONT CLASS="LN">62</FONT><A NAME="62"></A> <FONT CLASS="Private">private</FONT> <FONT CLASS="Static">static</FONT> AntHandler projectHandler = <FONT CLASS="New">new</FONT> ProjectHandler();
80<FONT CLASS="LN">63</FONT><A NAME="63"></A>
81<FONT CLASS="LN">64</FONT><A NAME="64"></A> <FONT CLASS="FormalComment">/**
82<FONT CLASS="LN">65</FONT><A NAME="65"></A> * helper for path -&gt; URI and URI -&gt; path conversions.
83<FONT CLASS="LN">66</FONT><A NAME="66"></A> */</FONT>
84<FONT CLASS="LN">67</FONT><A NAME="67"></A> <FONT CLASS="Private">private</FONT> <FONT CLASS="Static">static</FONT> FileUtils fu = FileUtils.newFileUtils();
85<FONT CLASS="LN">68</FONT><A NAME="68"></A>
86<FONT CLASS="LN">69</FONT><A NAME="69"></A> <FONT CLASS="FormalComment">/**
87<FONT CLASS="LN">70</FONT><A NAME="70"></A> * Parse an unknown element from a url
88<FONT CLASS="LN">71</FONT><A NAME="71"></A> *
89<FONT CLASS="LN">72</FONT><A NAME="72"></A> * @param project the current project
90<FONT CLASS="LN">73</FONT><A NAME="73"></A> * @param source the url containing the task
91<FONT CLASS="LN">74</FONT><A NAME="74"></A> * @return a configured task
92<FONT CLASS="LN">75</FONT><A NAME="75"></A> * @exception BuildException if an error occurs
93<FONT CLASS="LN">76</FONT><A NAME="76"></A> */</FONT>
94<FONT CLASS="LN">77</FONT><A NAME="77"></A> <FONT CLASS="Public">public</FONT> UnknownElement parseUnknownElement(Project project, URL source)
95<FONT CLASS="LN">78</FONT><A NAME="78"></A> <FONT CLASS="Throws">throws</FONT> BuildException {
96<FONT CLASS="LN">79</FONT><A NAME="79"></A> Target dummyTarget = <FONT CLASS="New">new</FONT> Target();
97<FONT CLASS="LN">80</FONT><A NAME="80"></A> dummyTarget.setProject(project);
98<FONT CLASS="LN">81</FONT><A NAME="81"></A>
99<FONT CLASS="LN">82</FONT><A NAME="82"></A> AntXMLContext context = <FONT CLASS="New">new</FONT> AntXMLContext(project);
100<FONT CLASS="LN">83</FONT><A NAME="83"></A> context.addTarget(dummyTarget);
101<FONT CLASS="LN">84</FONT><A NAME="84"></A> context.setImplicitTarget(dummyTarget);
102<FONT CLASS="LN">85</FONT><A NAME="85"></A>
103<FONT CLASS="LN">86</FONT><A NAME="86"></A> parse(context.getProject(), source,
104<FONT CLASS="LN">87</FONT><A NAME="87"></A> <FONT CLASS="New">new</FONT> RootHandler(context, elementHandler));
105<FONT CLASS="LN">88</FONT><A NAME="88"></A> Task[] tasks = dummyTarget.getTasks();
106<FONT CLASS="LN">89</FONT><A NAME="89"></A> <FONT CLASS="If">if</FONT> (tasks.length != <FONT CLASS="IntegerLiteral">1</FONT>) {
107<FONT CLASS="LN">90</FONT><A NAME="90"></A> <FONT CLASS="Throw">throw</FONT> <FONT CLASS="New">new</FONT> BuildException(<FONT CLASS="StringLiteral">"No tasks defined"</FONT>);
108<FONT CLASS="LN">91</FONT><A NAME="91"></A> }
109<FONT CLASS="LN">92</FONT><A NAME="92"></A> <FONT CLASS="Return">return</FONT> (UnknownElement) tasks[<FONT CLASS="IntegerLiteral">0</FONT>];
110<FONT CLASS="LN">93</FONT><A NAME="93"></A> }
111<FONT CLASS="LN">94</FONT><A NAME="94"></A> <FONT CLASS="FormalComment">/**
112<FONT CLASS="LN">95</FONT><A NAME="95"></A> * Parse a source xml input.
113<FONT CLASS="LN">96</FONT><A NAME="96"></A> *
114<FONT CLASS="LN">97</FONT><A NAME="97"></A> * @param project the current project
115<FONT CLASS="LN">98</FONT><A NAME="98"></A> * @param source the xml source
116<FONT CLASS="LN">99</FONT><A NAME="99"></A> * @exception BuildException if an error occurs
117<FONT CLASS="LN">00</FONT><A NAME="100"></A> */</FONT>
118<FONT CLASS="LN">01</FONT><A NAME="101"></A> <FONT CLASS="Public">public</FONT> <FONT CLASS="Void">void</FONT> parse(Project project, Object source)
119<FONT CLASS="LN">02</FONT><A NAME="102"></A> <FONT CLASS="Throws">throws</FONT> BuildException {
120<FONT CLASS="LN">03</FONT><A NAME="103"></A> getImportStack().addElement(source);
121<FONT CLASS="LN">04</FONT><A NAME="104"></A> <FONT CLASS="SingleLineComment">//System.out.println("Adding " + source);
122<FONT CLASS="LN">05</FONT><A NAME="105"></A></FONT> AntXMLContext context = <FONT CLASS="Null">null</FONT>;
123<FONT CLASS="LN">06</FONT><A NAME="106"></A> context = (AntXMLContext) project.getReference(<FONT CLASS="StringLiteral">"ant.parsing.context"</FONT>);
124<FONT CLASS="LN">07</FONT><A NAME="107"></A><FONT CLASS="SingleLineComment">// System.out.println("Parsing " + getImportStack().size() + " " +
125<FONT CLASS="LN">08</FONT><A NAME="108"></A></FONT><FONT CLASS="SingleLineComment">// context+ " " + getImportStack() );
126<FONT CLASS="LN">09</FONT><A NAME="109"></A></FONT> <FONT CLASS="If">if</FONT> (context == <FONT CLASS="Null">null</FONT>) {
127<FONT CLASS="LN">10</FONT><A NAME="110"></A> context = <FONT CLASS="New">new</FONT> AntXMLContext(project);
128<FONT CLASS="LN">11</FONT><A NAME="111"></A> project.addReference(<FONT CLASS="StringLiteral">"ant.parsing.context"</FONT>, context);
129<FONT CLASS="LN">12</FONT><A NAME="112"></A> project.addReference(<FONT CLASS="StringLiteral">"ant.targets"</FONT>, context.getTargets());
130<FONT CLASS="LN">13</FONT><A NAME="113"></A> }
131<FONT CLASS="LN">14</FONT><A NAME="114"></A>
132<FONT CLASS="LN">15</FONT><A NAME="115"></A> <FONT CLASS="If">if</FONT> (getImportStack().size() &gt; <FONT CLASS="IntegerLiteral">1</FONT>) {
133<FONT CLASS="LN">16</FONT><A NAME="116"></A> <FONT CLASS="SingleLineComment">// we are in an imported file.
134<FONT CLASS="LN">17</FONT><A NAME="117"></A></FONT> context.setIgnoreProjectTag(<FONT CLASS="True">true</FONT>);
135<FONT CLASS="LN">18</FONT><A NAME="118"></A> Target currentTarget = context.getCurrentTarget();
136<FONT CLASS="LN">19</FONT><A NAME="119"></A> <FONT CLASS="Try">try</FONT> {
137<FONT CLASS="LN">20</FONT><A NAME="120"></A> Target newCurrent = <FONT CLASS="New">new</FONT> Target();
138<FONT CLASS="LN">21</FONT><A NAME="121"></A> newCurrent.setProject(project);
139<FONT CLASS="LN">22</FONT><A NAME="122"></A> newCurrent.setName(<FONT CLASS="StringLiteral">""</FONT>);
140<FONT CLASS="LN">23</FONT><A NAME="123"></A> context.setCurrentTarget(newCurrent);
141<FONT CLASS="LN">24</FONT><A NAME="124"></A> parse(project, source, <FONT CLASS="New">new</FONT> RootHandler(context, mainHandler));
142<FONT CLASS="LN">25</FONT><A NAME="125"></A> newCurrent.execute();
143<FONT CLASS="LN">26</FONT><A NAME="126"></A> } <FONT CLASS="Finally">finally</FONT> {
144<FONT CLASS="LN">27</FONT><A NAME="127"></A> context.setCurrentTarget(currentTarget);
145<FONT CLASS="LN">28</FONT><A NAME="128"></A> }
146<FONT CLASS="LN">29</FONT><A NAME="129"></A> } <FONT CLASS="Else">else</FONT> {
147<FONT CLASS="LN">30</FONT><A NAME="130"></A> <FONT CLASS="SingleLineComment">// top level file
148<FONT CLASS="LN">31</FONT><A NAME="131"></A></FONT> parse(project, source, <FONT CLASS="New">new</FONT> RootHandler(context, mainHandler));
149<FONT CLASS="LN">32</FONT><A NAME="132"></A> <FONT CLASS="SingleLineComment">// Execute the top-level target
150<FONT CLASS="LN">33</FONT><A NAME="133"></A></FONT> context.getImplicitTarget().execute();
151<FONT CLASS="LN">34</FONT><A NAME="134"></A> }
152<FONT CLASS="LN">35</FONT><A NAME="135"></A> }
153<FONT CLASS="LN">36</FONT><A NAME="136"></A>
154<FONT CLASS="LN">37</FONT><A NAME="137"></A> <FONT CLASS="FormalComment">/**
155<FONT CLASS="LN">38</FONT><A NAME="138"></A> * Parses the project file, configuring the project as it goes.
156<FONT CLASS="LN">39</FONT><A NAME="139"></A> *
157<FONT CLASS="LN">40</FONT><A NAME="140"></A> * @param project the current project
158<FONT CLASS="LN">41</FONT><A NAME="141"></A> * @param source the xml source
159<FONT CLASS="LN">42</FONT><A NAME="142"></A> * @param handler the root handler to use (contains the current context)
160<FONT CLASS="LN">43</FONT><A NAME="143"></A> * @exception BuildException if the configuration is invalid or cannot
161<FONT CLASS="LN">44</FONT><A NAME="144"></A> * be read
162<FONT CLASS="LN">45</FONT><A NAME="145"></A> */</FONT>
163<FONT CLASS="LN">46</FONT><A NAME="146"></A> <FONT CLASS="Public">public</FONT> <FONT CLASS="Void">void</FONT> parse(Project project, Object source, RootHandler handler)
164<FONT CLASS="LN">47</FONT><A NAME="147"></A> <FONT CLASS="Throws">throws</FONT> BuildException {
165<FONT CLASS="LN">48</FONT><A NAME="148"></A>
166<FONT CLASS="LN">49</FONT><A NAME="149"></A> AntXMLContext context = handler.context;
167<FONT CLASS="LN">50</FONT><A NAME="150"></A>
168<FONT CLASS="LN">51</FONT><A NAME="151"></A> File buildFile = <FONT CLASS="Null">null</FONT>;
169<FONT CLASS="LN">52</FONT><A NAME="152"></A> URL url = <FONT CLASS="Null">null</FONT>;
170<FONT CLASS="LN">53</FONT><A NAME="153"></A> String buildFileName = <FONT CLASS="Null">null</FONT>;
171<FONT CLASS="LN">54</FONT><A NAME="154"></A>
172<FONT CLASS="LN">55</FONT><A NAME="155"></A> <FONT CLASS="If">if</FONT> (source <FONT CLASS="InstanceOf">instanceof</FONT> File) {
173<FONT CLASS="LN">56</FONT><A NAME="156"></A> buildFile = (File) source;
174<FONT CLASS="LN">57</FONT><A NAME="157"></A> buildFile = fu.normalize(buildFile.getAbsolutePath());
175<FONT CLASS="LN">58</FONT><A NAME="158"></A> context.setBuildFile(buildFile);
176<FONT CLASS="LN">59</FONT><A NAME="159"></A> buildFileName = buildFile.toString();
177<FONT CLASS="LN">60</FONT><A NAME="160"></A><FONT CLASS="SingleLineComment">// } else if (source instanceof InputStream ) {
178<FONT CLASS="LN">61</FONT><A NAME="161"></A></FONT> } <FONT CLASS="Else">else</FONT> <FONT CLASS="If">if</FONT> (source <FONT CLASS="InstanceOf">instanceof</FONT> URL) {
179<FONT CLASS="LN">62</FONT><A NAME="162"></A><FONT CLASS="SingleLineComment">// These commented out code is the only difference
180<FONT CLASS="LN">63</FONT><A NAME="163"></A></FONT><FONT CLASS="SingleLineComment">// between this class and ProjectHelper2
181<FONT CLASS="LN">64</FONT><A NAME="164"></A></FONT><FONT CLASS="SingleLineComment">// if (handler.getCurrentAntHandler() != elementHandler) {
182<FONT CLASS="LN">65</FONT><A NAME="165"></A></FONT><FONT CLASS="SingleLineComment">// throw new BuildException(
183<FONT CLASS="LN">66</FONT><A NAME="166"></A></FONT><FONT CLASS="SingleLineComment">// "Source " + source.getClass().getName()
184<FONT CLASS="LN">67</FONT><A NAME="167"></A></FONT><FONT CLASS="SingleLineComment">// + " not supported by this plugin for "
185<FONT CLASS="LN">68</FONT><A NAME="168"></A></FONT><FONT CLASS="SingleLineComment">// + " non task xml");
186<FONT CLASS="LN">69</FONT><A NAME="169"></A></FONT><FONT CLASS="SingleLineComment">// }
187<FONT CLASS="LN">70</FONT><A NAME="170"></A></FONT> url = (URL) source;
188<FONT CLASS="LN">71</FONT><A NAME="171"></A> buildFileName = url.toString();
189<FONT CLASS="LN">72</FONT><A NAME="172"></A><FONT CLASS="SingleLineComment">// } else if (source instanceof InputSource ) {
190<FONT CLASS="LN">73</FONT><A NAME="173"></A></FONT> } <FONT CLASS="Else">else</FONT> {
191<FONT CLASS="LN">74</FONT><A NAME="174"></A> <FONT CLASS="Throw">throw</FONT> <FONT CLASS="New">new</FONT> BuildException(<FONT CLASS="StringLiteral">"Source "</FONT> + source.getClass().getName()
192<FONT CLASS="LN">75</FONT><A NAME="175"></A> + <FONT CLASS="StringLiteral">" not supported by this plugin"</FONT>);
193<FONT CLASS="LN">76</FONT><A NAME="176"></A> }
194<FONT CLASS="LN">77</FONT><A NAME="177"></A>
195<FONT CLASS="LN">78</FONT><A NAME="178"></A> InputStream inputStream = <FONT CLASS="Null">null</FONT>;
196<FONT CLASS="LN">79</FONT><A NAME="179"></A> InputSource inputSource = <FONT CLASS="Null">null</FONT>;
197<FONT CLASS="LN">80</FONT><A NAME="180"></A>
198<FONT CLASS="LN">81</FONT><A NAME="181"></A>
199<FONT CLASS="LN">82</FONT><A NAME="182"></A> <FONT CLASS="Try">try</FONT> {
200<FONT CLASS="LN">83</FONT><A NAME="183"></A> <FONT CLASS="FormalComment">/**
201<FONT CLASS="LN">84</FONT><A NAME="184"></A> * SAX 2 style parser used to parse the given file.
202<FONT CLASS="LN">85</FONT><A NAME="185"></A> */</FONT>
203<FONT CLASS="LN">86</FONT><A NAME="186"></A> XMLReader parser = JAXPUtils.getNamespaceXMLReader();
204<FONT CLASS="LN">87</FONT><A NAME="187"></A>
205<FONT CLASS="LN">88</FONT><A NAME="188"></A> String uri = <FONT CLASS="Null">null</FONT>;
206<FONT CLASS="LN">89</FONT><A NAME="189"></A> <FONT CLASS="If">if</FONT> (buildFile != <FONT CLASS="Null">null</FONT>) {
207<FONT CLASS="LN">90</FONT><A NAME="190"></A> uri = fu.toURI(buildFile.getAbsolutePath());
208<FONT CLASS="LN">91</FONT><A NAME="191"></A> inputStream = <FONT CLASS="New">new</FONT> FileInputStream(buildFile);
209<FONT CLASS="LN">92</FONT><A NAME="192"></A> } <FONT CLASS="Else">else</FONT> {
210<FONT CLASS="LN">93</FONT><A NAME="193"></A> inputStream = url.openStream();
211<FONT CLASS="LN">94</FONT><A NAME="194"></A> uri = url.toString(); <FONT CLASS="SingleLineComment">// ?? OK ??
212<FONT CLASS="LN">95</FONT><A NAME="195"></A></FONT> }
213<FONT CLASS="LN">96</FONT><A NAME="196"></A>
214<FONT CLASS="LN">97</FONT><A NAME="197"></A> inputSource = <FONT CLASS="New">new</FONT> InputSource(inputStream);
215<FONT CLASS="LN">98</FONT><A NAME="198"></A> <FONT CLASS="If">if</FONT> (uri != <FONT CLASS="Null">null</FONT>) {
216<FONT CLASS="LN">99</FONT><A NAME="199"></A> inputSource.setSystemId(uri);
217<FONT CLASS="LN">00</FONT><A NAME="200"></A> }
218<FONT CLASS="LN">01</FONT><A NAME="201"></A> project.log(<FONT CLASS="StringLiteral">"parsing buildfile "</FONT> + buildFileName
219<FONT CLASS="LN">02</FONT><A NAME="202"></A> + <FONT CLASS="StringLiteral">" with URI = "</FONT> + uri, Project.MSG_VERBOSE);
220<FONT CLASS="LN">03</FONT><A NAME="203"></A>
221<FONT CLASS="LN">04</FONT><A NAME="204"></A> DefaultHandler hb = handler;
222<FONT CLASS="LN">05</FONT><A NAME="205"></A>
223<FONT CLASS="LN">06</FONT><A NAME="206"></A> parser.setContentHandler(hb);
224<FONT CLASS="LN">07</FONT><A NAME="207"></A> parser.setEntityResolver(hb);
225<FONT CLASS="LN">08</FONT><A NAME="208"></A> parser.setErrorHandler(hb);
226<FONT CLASS="LN">09</FONT><A NAME="209"></A> parser.setDTDHandler(hb);
227<FONT CLASS="LN">10</FONT><A NAME="210"></A> parser.parse(inputSource);
228<FONT CLASS="LN">11</FONT><A NAME="211"></A> } <FONT CLASS="Catch">catch</FONT> (SAXParseException exc) {
229<FONT CLASS="LN">12</FONT><A NAME="212"></A> Location location = <FONT CLASS="New">new</FONT> Location(exc.getSystemId(),
230<FONT CLASS="LN">13</FONT><A NAME="213"></A> exc.getLineNumber(), exc.getColumnNumber());
231<FONT CLASS="LN">14</FONT><A NAME="214"></A>
232<FONT CLASS="LN">15</FONT><A NAME="215"></A> Throwable t = exc.getException();
233<FONT CLASS="LN">16</FONT><A NAME="216"></A> <FONT CLASS="If">if</FONT> (t <FONT CLASS="InstanceOf">instanceof</FONT> BuildException) {
234<FONT CLASS="LN">17</FONT><A NAME="217"></A> BuildException be = (BuildException) t;
235<FONT CLASS="LN">18</FONT><A NAME="218"></A> <FONT CLASS="If">if</FONT> (be.getLocation() == Location.UNKNOWN_LOCATION) {
236<FONT CLASS="LN">19</FONT><A NAME="219"></A> be.setLocation(location);
237<FONT CLASS="LN">20</FONT><A NAME="220"></A> }
238<FONT CLASS="LN">21</FONT><A NAME="221"></A> <FONT CLASS="Throw">throw</FONT> be;
239<FONT CLASS="LN">22</FONT><A NAME="222"></A> }
240<FONT CLASS="LN">23</FONT><A NAME="223"></A>
241<FONT CLASS="LN">24</FONT><A NAME="224"></A> <FONT CLASS="Throw">throw</FONT> <FONT CLASS="New">new</FONT> BuildException(exc.getMessage(), t, location);
242<FONT CLASS="LN">25</FONT><A NAME="225"></A> } <FONT CLASS="Catch">catch</FONT> (SAXException exc) {
243<FONT CLASS="LN">26</FONT><A NAME="226"></A> Throwable t = exc.getException();
244<FONT CLASS="LN">27</FONT><A NAME="227"></A> <FONT CLASS="If">if</FONT> (t <FONT CLASS="InstanceOf">instanceof</FONT> BuildException) {
245<FONT CLASS="LN">28</FONT><A NAME="228"></A> <FONT CLASS="Throw">throw</FONT> (BuildException) t;
246<FONT CLASS="LN">29</FONT><A NAME="229"></A> }
247<FONT CLASS="LN">30</FONT><A NAME="230"></A> <FONT CLASS="Throw">throw</FONT> <FONT CLASS="New">new</FONT> BuildException(exc.getMessage(), t);
248<FONT CLASS="LN">31</FONT><A NAME="231"></A> } <FONT CLASS="Catch">catch</FONT> (FileNotFoundException exc) {
249<FONT CLASS="LN">32</FONT><A NAME="232"></A> <FONT CLASS="Throw">throw</FONT> <FONT CLASS="New">new</FONT> BuildException(exc);
250<FONT CLASS="LN">33</FONT><A NAME="233"></A> } <FONT CLASS="Catch">catch</FONT> (UnsupportedEncodingException exc) {
251<FONT CLASS="LN">34</FONT><A NAME="234"></A> <FONT CLASS="Throw">throw</FONT> <FONT CLASS="New">new</FONT> BuildException(<FONT CLASS="StringLiteral">"Encoding of project file "</FONT>
252<FONT CLASS="LN">35</FONT><A NAME="235"></A> + buildFileName + <FONT CLASS="StringLiteral">" is invalid."</FONT>,
253<FONT CLASS="LN">36</FONT><A NAME="236"></A> exc);
254<FONT CLASS="LN">37</FONT><A NAME="237"></A> } <FONT CLASS="Catch">catch</FONT> (IOException exc) {
255<FONT CLASS="LN">38</FONT><A NAME="238"></A> <FONT CLASS="Throw">throw</FONT> <FONT CLASS="New">new</FONT> BuildException(<FONT CLASS="StringLiteral">"Error reading project file "</FONT>
256<FONT CLASS="LN">39</FONT><A NAME="239"></A> + buildFileName + <FONT CLASS="StringLiteral">": "</FONT> + exc.getMessage(),
257<FONT CLASS="LN">40</FONT><A NAME="240"></A> exc);
258<FONT CLASS="LN">41</FONT><A NAME="241"></A> } <FONT CLASS="Finally">finally</FONT> {
259<FONT CLASS="LN">42</FONT><A NAME="242"></A> <FONT CLASS="If">if</FONT> (inputStream != <FONT CLASS="Null">null</FONT>) {
260<FONT CLASS="LN">43</FONT><A NAME="243"></A> <FONT CLASS="Try">try</FONT> {
261<FONT CLASS="LN">44</FONT><A NAME="244"></A> inputStream.close();
262<FONT CLASS="LN">45</FONT><A NAME="245"></A> } <FONT CLASS="Catch">catch</FONT> (IOException ioe) {
263<FONT CLASS="LN">46</FONT><A NAME="246"></A> <FONT CLASS="SingleLineComment">// ignore this
264<FONT CLASS="LN">47</FONT><A NAME="247"></A></FONT> }
265<FONT CLASS="LN">48</FONT><A NAME="248"></A> }
266<FONT CLASS="LN">49</FONT><A NAME="249"></A> }
267<FONT CLASS="LN">50</FONT><A NAME="250"></A> }
268<FONT CLASS="LN">51</FONT><A NAME="251"></A>
269<FONT CLASS="LN">52</FONT><A NAME="252"></A> <FONT CLASS="FormalComment">/**
270<FONT CLASS="LN">53</FONT><A NAME="253"></A> * The common superclass for all SAX event handlers used to parse
271<FONT CLASS="LN">54</FONT><A NAME="254"></A> * the configuration file.
272<FONT CLASS="LN">55</FONT><A NAME="255"></A> *
273<FONT CLASS="LN">56</FONT><A NAME="256"></A> * The context will hold all state information. At each time
274<FONT CLASS="LN">57</FONT><A NAME="257"></A> * there is one active handler for the current element. It can
275<FONT CLASS="LN">58</FONT><A NAME="258"></A> * use onStartChild() to set an alternate handler for the child.
276<FONT CLASS="LN">59</FONT><A NAME="259"></A> */</FONT>
277<FONT CLASS="LN">60</FONT><A NAME="260"></A> <FONT CLASS="Public">public</FONT> <FONT CLASS="Static">static</FONT> <FONT CLASS="Class">class</FONT> AntHandler {
278<FONT CLASS="LN">61</FONT><A NAME="261"></A> <FONT CLASS="FormalComment">/**
279<FONT CLASS="LN">62</FONT><A NAME="262"></A> * Handles the start of an element. This base implementation does
280<FONT CLASS="LN">63</FONT><A NAME="263"></A> * nothing.
281<FONT CLASS="LN">64</FONT><A NAME="264"></A> *
282<FONT CLASS="LN">65</FONT><A NAME="265"></A> * @param uri the namespace URI for the tag
283<FONT CLASS="LN">66</FONT><A NAME="266"></A> * @param tag The name of the element being started.
284<FONT CLASS="LN">67</FONT><A NAME="267"></A> * Will not be &lt;code&gt;null&lt;/code&gt;.
285<FONT CLASS="LN">68</FONT><A NAME="268"></A> * @param qname The qualified name of the element.
286<FONT CLASS="LN">69</FONT><A NAME="269"></A> * @param attrs Attributes of the element being started.
287<FONT CLASS="LN">70</FONT><A NAME="270"></A> * Will not be &lt;code&gt;null&lt;/code&gt;.
288<FONT CLASS="LN">71</FONT><A NAME="271"></A> * @param context The context that this element is in.
289<FONT CLASS="LN">72</FONT><A NAME="272"></A> *
290<FONT CLASS="LN">73</FONT><A NAME="273"></A> * @exception SAXParseException if this method is not overridden, or in
291<FONT CLASS="LN">74</FONT><A NAME="274"></A> * case of error in an overridden version
292<FONT CLASS="LN">75</FONT><A NAME="275"></A> */</FONT>
293<FONT CLASS="LN">76</FONT><A NAME="276"></A> <FONT CLASS="Public">public</FONT> <FONT CLASS="Void">void</FONT> onStartElement(String uri, String tag, String qname,
294<FONT CLASS="LN">77</FONT><A NAME="277"></A> Attributes attrs,
295<FONT CLASS="LN">78</FONT><A NAME="278"></A> AntXMLContext context)
296<FONT CLASS="LN">79</FONT><A NAME="279"></A> <FONT CLASS="Throws">throws</FONT> SAXParseException {
297<FONT CLASS="LN">80</FONT><A NAME="280"></A> }
298<FONT CLASS="LN">81</FONT><A NAME="281"></A>
299<FONT CLASS="LN">82</FONT><A NAME="282"></A> <FONT CLASS="FormalComment">/**
300<FONT CLASS="LN">83</FONT><A NAME="283"></A> * Handles the start of an element. This base implementation just
301<FONT CLASS="LN">84</FONT><A NAME="284"></A> * throws an exception - you must override this method if you expect
302<FONT CLASS="LN">85</FONT><A NAME="285"></A> * child elements.
303<FONT CLASS="LN">86</FONT><A NAME="286"></A> *
304<FONT CLASS="LN">87</FONT><A NAME="287"></A> * @param uri The namespace uri for this element.
305<FONT CLASS="LN">88</FONT><A NAME="288"></A> * @param tag The name of the element being started.
306<FONT CLASS="LN">89</FONT><A NAME="289"></A> * Will not be &lt;code&gt;null&lt;/code&gt;.
307<FONT CLASS="LN">90</FONT><A NAME="290"></A> * @param qname The qualified name for this element.
308<FONT CLASS="LN">91</FONT><A NAME="291"></A> * @param attrs Attributes of the element being started.
309<FONT CLASS="LN">92</FONT><A NAME="292"></A> * Will not be &lt;code&gt;null&lt;/code&gt;.
310<FONT CLASS="LN">93</FONT><A NAME="293"></A> * @param context The current context.
311<FONT CLASS="LN">94</FONT><A NAME="294"></A> * @return a handler (in the derived classes)
312<FONT CLASS="LN">95</FONT><A NAME="295"></A> *
313<FONT CLASS="LN">96</FONT><A NAME="296"></A> * @exception SAXParseException if this method is not overridden, or in
314<FONT CLASS="LN">97</FONT><A NAME="297"></A> * case of error in an overridden version
315<FONT CLASS="LN">98</FONT><A NAME="298"></A> */</FONT>
316<FONT CLASS="LN">99</FONT><A NAME="299"></A> <FONT CLASS="Public">public</FONT> AntHandler onStartChild(String uri, String tag, String qname,
317<FONT CLASS="LN">00</FONT><A NAME="300"></A> Attributes attrs,
318<FONT CLASS="LN">01</FONT><A NAME="301"></A> AntXMLContext context)
319<FONT CLASS="LN">02</FONT><A NAME="302"></A> <FONT CLASS="Throws">throws</FONT> SAXParseException {
320<FONT CLASS="LN">03</FONT><A NAME="303"></A> <FONT CLASS="Throw">throw</FONT> <FONT CLASS="New">new</FONT> SAXParseException(<FONT CLASS="StringLiteral">"Unexpected element \""</FONT> + qname
321<FONT CLASS="LN">04</FONT><A NAME="304"></A> + <FONT CLASS="StringLiteral">" \""</FONT>, context.getLocator());
322<FONT CLASS="LN">05</FONT><A NAME="305"></A> }
323<FONT CLASS="LN">06</FONT><A NAME="306"></A>
324<FONT CLASS="LN">07</FONT><A NAME="307"></A> <FONT CLASS="FormalComment">/**
325<FONT CLASS="LN">08</FONT><A NAME="308"></A> * Handle the end of a element.
326<FONT CLASS="LN">09</FONT><A NAME="309"></A> *
327<FONT CLASS="LN">10</FONT><A NAME="310"></A> * @param uri the namespace uri of the element
328<FONT CLASS="LN">11</FONT><A NAME="311"></A> * @param tag the tag of the element
329<FONT CLASS="LN">12</FONT><A NAME="312"></A> * @param qname the qualified name of the element
330<FONT CLASS="LN">13</FONT><A NAME="313"></A> * @param context the current context
331<FONT CLASS="LN">14</FONT><A NAME="314"></A> * @exception SAXParseException if an error occurs
332<FONT CLASS="LN">15</FONT><A NAME="315"></A> */</FONT>
333<FONT CLASS="LN">16</FONT><A NAME="316"></A> <FONT CLASS="Public">public</FONT> <FONT CLASS="Void">void</FONT> onEndChild(String uri, String tag, String qname,
334<FONT CLASS="LN">17</FONT><A NAME="317"></A> AntXMLContext context)
335<FONT CLASS="LN">18</FONT><A NAME="318"></A> <FONT CLASS="Throws">throws</FONT> SAXParseException {
336<FONT CLASS="LN">19</FONT><A NAME="319"></A> }
337<FONT CLASS="LN">20</FONT><A NAME="320"></A>
338<FONT CLASS="LN">21</FONT><A NAME="321"></A> <FONT CLASS="FormalComment">/**
339<FONT CLASS="LN">22</FONT><A NAME="322"></A> * This method is called when this element and all elements nested into it have been
340<FONT CLASS="LN">23</FONT><A NAME="323"></A> * handled. I.e., this happens at the &amp;lt;/end_tag_of_the_element&amp;gt;.
341<FONT CLASS="LN">24</FONT><A NAME="324"></A> * @param uri the namespace uri for this element
342<FONT CLASS="LN">25</FONT><A NAME="325"></A> * @param tag the element name
343<FONT CLASS="LN">26</FONT><A NAME="326"></A> * @param context the current context
344<FONT CLASS="LN">27</FONT><A NAME="327"></A> */</FONT>
345<FONT CLASS="LN">28</FONT><A NAME="328"></A> <FONT CLASS="Public">public</FONT> <FONT CLASS="Void">void</FONT> onEndElement(String uri, String tag,
346<FONT CLASS="LN">29</FONT><A NAME="329"></A> AntXMLContext context) {
347<FONT CLASS="LN">30</FONT><A NAME="330"></A> }
348<FONT CLASS="LN">31</FONT><A NAME="331"></A>
349<FONT CLASS="LN">32</FONT><A NAME="332"></A> <FONT CLASS="FormalComment">/**
350<FONT CLASS="LN">33</FONT><A NAME="333"></A> * Handles text within an element. This base implementation just
351<FONT CLASS="LN">34</FONT><A NAME="334"></A> * throws an exception, you must override it if you expect content.
352<FONT CLASS="LN">35</FONT><A NAME="335"></A> *
353<FONT CLASS="LN">36</FONT><A NAME="336"></A> * @param buf A character array of the text within the element.
354<FONT CLASS="LN">37</FONT><A NAME="337"></A> * Will not be &lt;code&gt;null&lt;/code&gt;.
355<FONT CLASS="LN">38</FONT><A NAME="338"></A> * @param start The start element in the array.
356<FONT CLASS="LN">39</FONT><A NAME="339"></A> * @param count The number of characters to read from the array.
357<FONT CLASS="LN">40</FONT><A NAME="340"></A> * @param context The current context.
358<FONT CLASS="LN">41</FONT><A NAME="341"></A> *
359<FONT CLASS="LN">42</FONT><A NAME="342"></A> * @exception SAXParseException if this method is not overridden, or in
360<FONT CLASS="LN">43</FONT><A NAME="343"></A> * case of error in an overridden version
361<FONT CLASS="LN">44</FONT><A NAME="344"></A> */</FONT>
362<FONT CLASS="LN">45</FONT><A NAME="345"></A> <FONT CLASS="Public">public</FONT> <FONT CLASS="Void">void</FONT> characters(<FONT CLASS="Char">char</FONT>[] buf, <FONT CLASS="Int">int</FONT> start, <FONT CLASS="Int">int</FONT> count, AntXMLContext context)
363<FONT CLASS="LN">46</FONT><A NAME="346"></A> <FONT CLASS="Throws">throws</FONT> SAXParseException {
364<FONT CLASS="LN">47</FONT><A NAME="347"></A> String s = <FONT CLASS="New">new</FONT> String(buf, start, count).trim();
365<FONT CLASS="LN">48</FONT><A NAME="348"></A>
366<FONT CLASS="LN">49</FONT><A NAME="349"></A> <FONT CLASS="If">if</FONT> (s.length() &gt; <FONT CLASS="IntegerLiteral">0</FONT>) {
367<FONT CLASS="LN">50</FONT><A NAME="350"></A> <FONT CLASS="Throw">throw</FONT> <FONT CLASS="New">new</FONT> SAXParseException(<FONT CLASS="StringLiteral">"Unexpected text \""</FONT> + s
368<FONT CLASS="LN">51</FONT><A NAME="351"></A> + <FONT CLASS="StringLiteral">"\""</FONT>, context.getLocator());
369<FONT CLASS="LN">52</FONT><A NAME="352"></A> }
370<FONT CLASS="LN">53</FONT><A NAME="353"></A> }
371<FONT CLASS="LN">54</FONT><A NAME="354"></A>
372<FONT CLASS="LN">55</FONT><A NAME="355"></A> <FONT CLASS="FormalComment">/**
373<FONT CLASS="LN">56</FONT><A NAME="356"></A> * Will be called every time a namespace is reached.
374<FONT CLASS="LN">57</FONT><A NAME="357"></A> * It'll verify if the ns was processed, and if not load the task
375<FONT CLASS="LN">58</FONT><A NAME="358"></A> * definitions.
376<FONT CLASS="LN">59</FONT><A NAME="359"></A> * @param uri The namespace uri.
377<FONT CLASS="LN">60</FONT><A NAME="360"></A> */</FONT>
378<FONT CLASS="LN">61</FONT><A NAME="361"></A> <FONT CLASS="Protected">protected</FONT> <FONT CLASS="Void">void</FONT> checkNamespace(String uri) {
379<FONT CLASS="LN">62</FONT><A NAME="362"></A>
380<FONT CLASS="LN">63</FONT><A NAME="363"></A> }
381<FONT CLASS="LN">64</FONT><A NAME="364"></A> }
382<FONT CLASS="LN">65</FONT><A NAME="365"></A>
383<FONT CLASS="LN">66</FONT><A NAME="366"></A> <FONT CLASS="FormalComment">/**
384<FONT CLASS="LN">67</FONT><A NAME="367"></A> * Handler for ant processing. Uses a stack of AntHandlers to
385<FONT CLASS="LN">68</FONT><A NAME="368"></A> * implement each element ( the original parser used a recursive behavior,
386<FONT CLASS="LN">69</FONT><A NAME="369"></A> * with the implicit execution stack )
387<FONT CLASS="LN">70</FONT><A NAME="370"></A> */</FONT>
388<FONT CLASS="LN">71</FONT><A NAME="371"></A> <FONT CLASS="Public">public</FONT> <FONT CLASS="Static">static</FONT> <FONT CLASS="Class">class</FONT> RootHandler <FONT CLASS="Extends">extends</FONT> DefaultHandler {
389<FONT CLASS="LN">72</FONT><A NAME="372"></A> <FONT CLASS="Private">private</FONT> Stack antHandlers = <FONT CLASS="New">new</FONT> Stack();
390<FONT CLASS="LN">73</FONT><A NAME="373"></A> <FONT CLASS="Private">private</FONT> AntHandler currentHandler = <FONT CLASS="Null">null</FONT>;
391<FONT CLASS="LN">74</FONT><A NAME="374"></A> <FONT CLASS="Private">private</FONT> AntXMLContext context;
392<FONT CLASS="LN">75</FONT><A NAME="375"></A>
393<FONT CLASS="LN">76</FONT><A NAME="376"></A> <FONT CLASS="FormalComment">/**
394<FONT CLASS="LN">77</FONT><A NAME="377"></A> * Creates a new RootHandler instance.
395<FONT CLASS="LN">78</FONT><A NAME="378"></A> *
396<FONT CLASS="LN">79</FONT><A NAME="379"></A> * @param context The context for the handler.
397<FONT CLASS="LN">80</FONT><A NAME="380"></A> * @param rootHandler The handler for the root element.
398<FONT CLASS="LN">81</FONT><A NAME="381"></A> */</FONT>
399<FONT CLASS="LN">82</FONT><A NAME="382"></A> <FONT CLASS="Public">public</FONT> RootHandler(AntXMLContext context, AntHandler rootHandler) {
400<FONT CLASS="LN">83</FONT><A NAME="383"></A> currentHandler = rootHandler;
401<FONT CLASS="LN">84</FONT><A NAME="384"></A> antHandlers.push(currentHandler);
402<FONT CLASS="LN">85</FONT><A NAME="385"></A> <FONT CLASS="This">this</FONT>.context = context;
403<FONT CLASS="LN">86</FONT><A NAME="386"></A> }
404<FONT CLASS="LN">87</FONT><A NAME="387"></A>
405<FONT CLASS="LN">88</FONT><A NAME="388"></A> <FONT CLASS="FormalComment">/**
406<FONT CLASS="LN">89</FONT><A NAME="389"></A> * Returns the current ant handler object.
407<FONT CLASS="LN">90</FONT><A NAME="390"></A> * @return the current ant handler.
408<FONT CLASS="LN">91</FONT><A NAME="391"></A> */</FONT>
409<FONT CLASS="LN">92</FONT><A NAME="392"></A> <FONT CLASS="Public">public</FONT> AntHandler getCurrentAntHandler() {
410<FONT CLASS="LN">93</FONT><A NAME="393"></A> <FONT CLASS="Return">return</FONT> currentHandler;
411<FONT CLASS="LN">94</FONT><A NAME="394"></A> }
412<FONT CLASS="LN">95</FONT><A NAME="395"></A>
413<FONT CLASS="LN">96</FONT><A NAME="396"></A> <FONT CLASS="FormalComment">/**
414<FONT CLASS="LN">97</FONT><A NAME="397"></A> * Resolves file: URIs relative to the build file.
415<FONT CLASS="LN">98</FONT><A NAME="398"></A> *
416<FONT CLASS="LN">99</FONT><A NAME="399"></A> * @param publicId The public identifier, or &lt;code&gt;null&lt;/code&gt;
417<FONT CLASS="LN">00</FONT><A NAME="400"></A> * if none is available. Ignored in this
418<FONT CLASS="LN">01</FONT><A NAME="401"></A> * implementation.
419<FONT CLASS="LN">02</FONT><A NAME="402"></A> * @param systemId The system identifier provided in the XML
420<FONT CLASS="LN">03</FONT><A NAME="403"></A> * document. Will not be &lt;code&gt;null&lt;/code&gt;.
421<FONT CLASS="LN">04</FONT><A NAME="404"></A> * @return an inputsource for this identifier
422<FONT CLASS="LN">05</FONT><A NAME="405"></A> */</FONT>
423<FONT CLASS="LN">06</FONT><A NAME="406"></A> <FONT CLASS="Public">public</FONT> InputSource resolveEntity(String publicId,
424<FONT CLASS="LN">07</FONT><A NAME="407"></A> String systemId) {
425<FONT CLASS="LN">08</FONT><A NAME="408"></A>
426<FONT CLASS="LN">09</FONT><A NAME="409"></A> context.getProject().log(<FONT CLASS="StringLiteral">"resolving systemId: "</FONT>
427<FONT CLASS="LN">10</FONT><A NAME="410"></A> + systemId, Project.MSG_VERBOSE);
428<FONT CLASS="LN">11</FONT><A NAME="411"></A>
429<FONT CLASS="LN">12</FONT><A NAME="412"></A> <FONT CLASS="If">if</FONT> (systemId.startsWith(<FONT CLASS="StringLiteral">"file:"</FONT>)) {
430<FONT CLASS="LN">13</FONT><A NAME="413"></A> String path = fu.fromURI(systemId);
431<FONT CLASS="LN">14</FONT><A NAME="414"></A>
432<FONT CLASS="LN">15</FONT><A NAME="415"></A> File file = <FONT CLASS="New">new</FONT> File(path);
433<FONT CLASS="LN">16</FONT><A NAME="416"></A> <FONT CLASS="If">if</FONT> (!file.isAbsolute()) {
434<FONT CLASS="LN">17</FONT><A NAME="417"></A> file = fu.resolveFile(context.getBuildFileParent(), path);
435<FONT CLASS="LN">18</FONT><A NAME="418"></A> }
436<FONT CLASS="LN">19</FONT><A NAME="419"></A> <FONT CLASS="Try">try</FONT> {
437<FONT CLASS="LN">20</FONT><A NAME="420"></A> InputSource inputSource =
438<FONT CLASS="LN">21</FONT><A NAME="421"></A> <FONT CLASS="New">new</FONT> InputSource(<FONT CLASS="New">new</FONT> FileInputStream(file));
439<FONT CLASS="LN">22</FONT><A NAME="422"></A> inputSource.setSystemId(fu.toURI(file.getAbsolutePath()));
440<FONT CLASS="LN">23</FONT><A NAME="423"></A> <FONT CLASS="Return">return</FONT> inputSource;
441<FONT CLASS="LN">24</FONT><A NAME="424"></A> } <FONT CLASS="Catch">catch</FONT> (FileNotFoundException fne) {
442<FONT CLASS="LN">25</FONT><A NAME="425"></A> context.getProject().log(file.getAbsolutePath()
443<FONT CLASS="LN">26</FONT><A NAME="426"></A> + <FONT CLASS="StringLiteral">" could not be found"</FONT>, Project.MSG_WARN);
444<FONT CLASS="LN">27</FONT><A NAME="427"></A> }
445<FONT CLASS="LN">28</FONT><A NAME="428"></A>
446<FONT CLASS="LN">29</FONT><A NAME="429"></A> }
447<FONT CLASS="LN">30</FONT><A NAME="430"></A> <FONT CLASS="SingleLineComment">// use default if not file or file not found
448<FONT CLASS="LN">31</FONT><A NAME="431"></A></FONT> <FONT CLASS="Return">return</FONT> <FONT CLASS="Null">null</FONT>;
449<FONT CLASS="LN">32</FONT><A NAME="432"></A> }
450<FONT CLASS="LN">33</FONT><A NAME="433"></A>
451<FONT CLASS="LN">34</FONT><A NAME="434"></A> <FONT CLASS="FormalComment">/**
452<FONT CLASS="LN">35</FONT><A NAME="435"></A> * Handles the start of a project element. A project handler is created
453<FONT CLASS="LN">36</FONT><A NAME="436"></A> * and initialised with the element name and attributes.
454<FONT CLASS="LN">37</FONT><A NAME="437"></A> *
455<FONT CLASS="LN">38</FONT><A NAME="438"></A> * @param uri The namespace uri for this element.
456<FONT CLASS="LN">39</FONT><A NAME="439"></A> * @param tag The name of the element being started.
457<FONT CLASS="LN">40</FONT><A NAME="440"></A> * Will not be &lt;code&gt;null&lt;/code&gt;.
458<FONT CLASS="LN">41</FONT><A NAME="441"></A> * @param qname The qualified name for this element.
459<FONT CLASS="LN">42</FONT><A NAME="442"></A> * @param attrs Attributes of the element being started.
460<FONT CLASS="LN">43</FONT><A NAME="443"></A> * Will not be &lt;code&gt;null&lt;/code&gt;.
461<FONT CLASS="LN">44</FONT><A NAME="444"></A> *
462<FONT CLASS="LN">45</FONT><A NAME="445"></A> * @exception org.xml.sax.SAXParseException if the tag given is not
463<FONT CLASS="LN">46</FONT><A NAME="446"></A> * &lt;code&gt;"project"&lt;/code&gt;
464<FONT CLASS="LN">47</FONT><A NAME="447"></A> */</FONT>
465<FONT CLASS="LN">48</FONT><A NAME="448"></A> <FONT CLASS="Public">public</FONT> <FONT CLASS="Void">void</FONT> startElement(String uri, String tag, String qname, Attributes attrs)
466<FONT CLASS="LN">49</FONT><A NAME="449"></A> <FONT CLASS="Throws">throws</FONT> SAXParseException {
467<FONT CLASS="LN">50</FONT><A NAME="450"></A> AntHandler next
468<FONT CLASS="LN">51</FONT><A NAME="451"></A> = currentHandler.onStartChild(uri, tag, qname, attrs, context);
469<FONT CLASS="LN">52</FONT><A NAME="452"></A> antHandlers.push(currentHandler);
470<FONT CLASS="LN">53</FONT><A NAME="453"></A> currentHandler = next;
471<FONT CLASS="LN">54</FONT><A NAME="454"></A> currentHandler.onStartElement(uri, tag, qname, attrs, context);
472<FONT CLASS="LN">55</FONT><A NAME="455"></A> }
473<FONT CLASS="LN">56</FONT><A NAME="456"></A>
474<FONT CLASS="LN">57</FONT><A NAME="457"></A> <FONT CLASS="FormalComment">/**
475<FONT CLASS="LN">58</FONT><A NAME="458"></A> * Sets the locator in the project helper for future reference.
476<FONT CLASS="LN">59</FONT><A NAME="459"></A> *
477<FONT CLASS="LN">60</FONT><A NAME="460"></A> * @param locator The locator used by the parser.
478<FONT CLASS="LN">61</FONT><A NAME="461"></A> * Will not be &lt;code&gt;null&lt;/code&gt;.
479<FONT CLASS="LN">62</FONT><A NAME="462"></A> */</FONT>
480<FONT CLASS="LN">63</FONT><A NAME="463"></A> <FONT CLASS="Public">public</FONT> <FONT CLASS="Void">void</FONT> setDocumentLocator(Locator locator) {
481<FONT CLASS="LN">64</FONT><A NAME="464"></A> context.setLocator(locator);
482<FONT CLASS="LN">65</FONT><A NAME="465"></A> }
483<FONT CLASS="LN">66</FONT><A NAME="466"></A>
484<FONT CLASS="LN">67</FONT><A NAME="467"></A> <FONT CLASS="FormalComment">/**
485<FONT CLASS="LN">68</FONT><A NAME="468"></A> * Handles the end of an element. Any required clean-up is performed
486<FONT CLASS="LN">69</FONT><A NAME="469"></A> * by the onEndElement() method and then the original handler
487<FONT CLASS="LN">70</FONT><A NAME="470"></A> * is restored to the parser.
488<FONT CLASS="LN">71</FONT><A NAME="471"></A> *
489<FONT CLASS="LN">72</FONT><A NAME="472"></A> * @param uri The namespace URI for this element.
490<FONT CLASS="LN">73</FONT><A NAME="473"></A> * @param name The name of the element which is ending.
491<FONT CLASS="LN">74</FONT><A NAME="474"></A> * Will not be &lt;code&gt;null&lt;/code&gt;.
492<FONT CLASS="LN">75</FONT><A NAME="475"></A> * @param qName The qualified name for this element.
493<FONT CLASS="LN">76</FONT><A NAME="476"></A> *
494<FONT CLASS="LN">77</FONT><A NAME="477"></A> * @exception SAXException in case of error (not thrown in
495<FONT CLASS="LN">78</FONT><A NAME="478"></A> * this implementation)
496<FONT CLASS="LN">79</FONT><A NAME="479"></A> *
497<FONT CLASS="LN">80</FONT><A NAME="480"></A> */</FONT>
498<FONT CLASS="LN">81</FONT><A NAME="481"></A> <FONT CLASS="Public">public</FONT> <FONT CLASS="Void">void</FONT> endElement(String uri, String name, String qName) <FONT CLASS="Throws">throws</FONT> SAXException {
499<FONT CLASS="LN">82</FONT><A NAME="482"></A> currentHandler.onEndElement(uri, name, context);
500<FONT CLASS="LN">83</FONT><A NAME="483"></A> AntHandler prev = (AntHandler) antHandlers.pop();
501<FONT CLASS="LN">84</FONT><A NAME="484"></A> currentHandler = prev;
502<FONT CLASS="LN">85</FONT><A NAME="485"></A> <FONT CLASS="If">if</FONT> (currentHandler != <FONT CLASS="Null">null</FONT>) {
503<FONT CLASS="LN">86</FONT><A NAME="486"></A> currentHandler.onEndChild(uri, name, qName, context);
504<FONT CLASS="LN">87</FONT><A NAME="487"></A> }
505<FONT CLASS="LN">88</FONT><A NAME="488"></A> }
506<FONT CLASS="LN">89</FONT><A NAME="489"></A>
507<FONT CLASS="LN">90</FONT><A NAME="490"></A> <FONT CLASS="FormalComment">/**
508<FONT CLASS="LN">91</FONT><A NAME="491"></A> * Handle text within an element, calls currentHandler.characters.
509<FONT CLASS="LN">92</FONT><A NAME="492"></A> *
510<FONT CLASS="LN">93</FONT><A NAME="493"></A> * @param buf A character array of the test.
511<FONT CLASS="LN">94</FONT><A NAME="494"></A> * @param start The start offset in the array.
512<FONT CLASS="LN">95</FONT><A NAME="495"></A> * @param count The number of characters to read.
513<FONT CLASS="LN">96</FONT><A NAME="496"></A> * @exception SAXParseException if an error occurs
514<FONT CLASS="LN">97</FONT><A NAME="497"></A> */</FONT>
515<FONT CLASS="LN">98</FONT><A NAME="498"></A> <FONT CLASS="Public">public</FONT> <FONT CLASS="Void">void</FONT> characters(<FONT CLASS="Char">char</FONT>[] buf, <FONT CLASS="Int">int</FONT> start, <FONT CLASS="Int">int</FONT> count)
516<FONT CLASS="LN">99</FONT><A NAME="499"></A> <FONT CLASS="Throws">throws</FONT> SAXParseException {
517<FONT CLASS="LN">00</FONT><A NAME="500"></A> currentHandler.characters(buf, start, count, context);
518<FONT CLASS="LN">01</FONT><A NAME="501"></A> }
519<FONT CLASS="LN">02</FONT><A NAME="502"></A>
520<FONT CLASS="LN">03</FONT><A NAME="503"></A> <FONT CLASS="FormalComment">/**
521<FONT CLASS="LN">04</FONT><A NAME="504"></A> * Start a namespace prefix to uri mapping
522<FONT CLASS="LN">05</FONT><A NAME="505"></A> *
523<FONT CLASS="LN">06</FONT><A NAME="506"></A> * @param prefix the namespace prefix
524<FONT CLASS="LN">07</FONT><A NAME="507"></A> * @param uri the namespace uri
525<FONT CLASS="LN">08</FONT><A NAME="508"></A> */</FONT>
526<FONT CLASS="LN">09</FONT><A NAME="509"></A> <FONT CLASS="Public">public</FONT> <FONT CLASS="Void">void</FONT> startPrefixMapping(String prefix, String uri) {
527<FONT CLASS="LN">10</FONT><A NAME="510"></A> context.startPrefixMapping(prefix, uri);
528<FONT CLASS="LN">11</FONT><A NAME="511"></A> }
529<FONT CLASS="LN">12</FONT><A NAME="512"></A>
530<FONT CLASS="LN">13</FONT><A NAME="513"></A> <FONT CLASS="FormalComment">/**
531<FONT CLASS="LN">14</FONT><A NAME="514"></A> * End a namepace prefix to uri mapping
532<FONT CLASS="LN">15</FONT><A NAME="515"></A> *
533<FONT CLASS="LN">16</FONT><A NAME="516"></A> * @param prefix the prefix that is not mapped anymore
534<FONT CLASS="LN">17</FONT><A NAME="517"></A> */</FONT>
535<FONT CLASS="LN">18</FONT><A NAME="518"></A> <FONT CLASS="Public">public</FONT> <FONT CLASS="Void">void</FONT> endPrefixMapping(String prefix) {
536<FONT CLASS="LN">19</FONT><A NAME="519"></A> context.endPrefixMapping(prefix);
537<FONT CLASS="LN">20</FONT><A NAME="520"></A> }
538<FONT CLASS="LN">21</FONT><A NAME="521"></A> }
539<FONT CLASS="LN">22</FONT><A NAME="522"></A>
540<FONT CLASS="LN">23</FONT><A NAME="523"></A> <FONT CLASS="FormalComment">/**
541<FONT CLASS="LN">24</FONT><A NAME="524"></A> * The main handler - it handles the &amp;lt;project&amp;gt; tag.
542<FONT CLASS="LN">25</FONT><A NAME="525"></A> *
543<FONT CLASS="LN">26</FONT><A NAME="526"></A> * @see AntHandler
544<FONT CLASS="LN">27</FONT><A NAME="527"></A> */</FONT>
545<FONT CLASS="LN">28</FONT><A NAME="528"></A> <FONT CLASS="Public">public</FONT> <FONT CLASS="Static">static</FONT> <FONT CLASS="Class">class</FONT> MainHandler <FONT CLASS="Extends">extends</FONT> AntHandler {
546<FONT CLASS="LN">29</FONT><A NAME="529"></A>
547<FONT CLASS="LN">30</FONT><A NAME="530"></A> <FONT CLASS="FormalComment">/**
548<FONT CLASS="LN">31</FONT><A NAME="531"></A> * Handle the project tag
549<FONT CLASS="LN">32</FONT><A NAME="532"></A> *
550<FONT CLASS="LN">33</FONT><A NAME="533"></A> * @param uri The namespace uri.
551<FONT CLASS="LN">34</FONT><A NAME="534"></A> * @param name The element tag.
552<FONT CLASS="LN">35</FONT><A NAME="535"></A> * @param qname The element qualified name.
553<FONT CLASS="LN">36</FONT><A NAME="536"></A> * @param attrs The attributes of the element.
554<FONT CLASS="LN">37</FONT><A NAME="537"></A> * @param context The current context.
555<FONT CLASS="LN">38</FONT><A NAME="538"></A> * @return The project handler that handles subelements of project
556<FONT CLASS="LN">39</FONT><A NAME="539"></A> * @exception SAXParseException if the qualified name is not "project".
557<FONT CLASS="LN">40</FONT><A NAME="540"></A> */</FONT>
558<FONT CLASS="LN">41</FONT><A NAME="541"></A> <FONT CLASS="Public">public</FONT> AntHandler onStartChild(String uri, String name, String qname,
559<FONT CLASS="LN">42</FONT><A NAME="542"></A> Attributes attrs,
560<FONT CLASS="LN">43</FONT><A NAME="543"></A> AntXMLContext context)
561<FONT CLASS="LN">44</FONT><A NAME="544"></A> <FONT CLASS="Throws">throws</FONT> SAXParseException {
562<FONT CLASS="LN">45</FONT><A NAME="545"></A> <FONT CLASS="If">if</FONT> (name.equals(<FONT CLASS="StringLiteral">"project"</FONT>)
563<FONT CLASS="LN">46</FONT><A NAME="546"></A> &amp;&amp; (uri.equals(<FONT CLASS="StringLiteral">""</FONT>) || uri.equals(ANT_CORE_URI))) {
564<FONT CLASS="LN">47</FONT><A NAME="547"></A> <FONT CLASS="Return">return</FONT> ProjectHelper3.projectHandler;
565<FONT CLASS="LN">48</FONT><A NAME="548"></A> } <FONT CLASS="Else">else</FONT> {
566<FONT CLASS="LN">49</FONT><A NAME="549"></A><FONT CLASS="SingleLineComment">// if (context.importlevel &gt; 0) {
567<FONT CLASS="LN">50</FONT><A NAME="550"></A></FONT><FONT CLASS="SingleLineComment">// // we are in an imported file. Allow top-level &lt;target&gt;.
568<FONT CLASS="LN">51</FONT><A NAME="551"></A></FONT><FONT CLASS="SingleLineComment">// if (qname.equals( "target" ) )
569<FONT CLASS="LN">52</FONT><A NAME="552"></A></FONT><FONT CLASS="SingleLineComment">// return ProjectHelper3.targetHandler;
570<FONT CLASS="LN">53</FONT><A NAME="553"></A></FONT><FONT CLASS="SingleLineComment">// }
571<FONT CLASS="LN">54</FONT><A NAME="554"></A></FONT> <FONT CLASS="Throw">throw</FONT> <FONT CLASS="New">new</FONT> SAXParseException(<FONT CLASS="StringLiteral">"Unexpected element \""</FONT> + qname
572<FONT CLASS="LN">55</FONT><A NAME="555"></A> + <FONT CLASS="StringLiteral">"\" "</FONT> + name, context.getLocator());
573<FONT CLASS="LN">56</FONT><A NAME="556"></A> }
574<FONT CLASS="LN">57</FONT><A NAME="557"></A> }
575<FONT CLASS="LN">58</FONT><A NAME="558"></A> }
576<FONT CLASS="LN">59</FONT><A NAME="559"></A>
577<FONT CLASS="LN">60</FONT><A NAME="560"></A> <FONT CLASS="FormalComment">/**
578<FONT CLASS="LN">61</FONT><A NAME="561"></A> * Handler for the top level "project" element.
579<FONT CLASS="LN">62</FONT><A NAME="562"></A> */</FONT>
580<FONT CLASS="LN">63</FONT><A NAME="563"></A> <FONT CLASS="Public">public</FONT> <FONT CLASS="Static">static</FONT> <FONT CLASS="Class">class</FONT> ProjectHandler <FONT CLASS="Extends">extends</FONT> AntHandler {
581<FONT CLASS="LN">64</FONT><A NAME="564"></A>
582<FONT CLASS="LN">65</FONT><A NAME="565"></A> <FONT CLASS="FormalComment">/**
583<FONT CLASS="LN">66</FONT><A NAME="566"></A> * Initialisation routine called after handler creation
584<FONT CLASS="LN">67</FONT><A NAME="567"></A> * with the element name and attributes. The attributes which
585<FONT CLASS="LN">68</FONT><A NAME="568"></A> * this handler can deal with are: &lt;code&gt;"default"&lt;/code&gt;,
586<FONT CLASS="LN">69</FONT><A NAME="569"></A> * &lt;code&gt;"name"&lt;/code&gt;, &lt;code&gt;"id"&lt;/code&gt; and &lt;code&gt;"basedir"&lt;/code&gt;.
587<FONT CLASS="LN">70</FONT><A NAME="570"></A> *
588<FONT CLASS="LN">71</FONT><A NAME="571"></A> * @param uri The namespace URI for this element.
589<FONT CLASS="LN">72</FONT><A NAME="572"></A> * @param tag Name of the element which caused this handler
590<FONT CLASS="LN">73</FONT><A NAME="573"></A> * to be created. Should not be &lt;code&gt;null&lt;/code&gt;.
591<FONT CLASS="LN">74</FONT><A NAME="574"></A> * Ignored in this implementation.
592<FONT CLASS="LN">75</FONT><A NAME="575"></A> * @param qname The qualified name for this element.
593<FONT CLASS="LN">76</FONT><A NAME="576"></A> * @param attrs Attributes of the element which caused this
594<FONT CLASS="LN">77</FONT><A NAME="577"></A> * handler to be created. Must not be &lt;code&gt;null&lt;/code&gt;.
595<FONT CLASS="LN">78</FONT><A NAME="578"></A> * @param context The current context.
596<FONT CLASS="LN">79</FONT><A NAME="579"></A> *
597<FONT CLASS="LN">80</FONT><A NAME="580"></A> * @exception SAXParseException if an unexpected attribute is
598<FONT CLASS="LN">81</FONT><A NAME="581"></A> * encountered or if the &lt;code&gt;"default"&lt;/code&gt; attribute
599<FONT CLASS="LN">82</FONT><A NAME="582"></A> * is missing.
600<FONT CLASS="LN">83</FONT><A NAME="583"></A> */</FONT>
601<FONT CLASS="LN">84</FONT><A NAME="584"></A> <FONT CLASS="Public">public</FONT> <FONT CLASS="Void">void</FONT> onStartElement(String uri, String tag, String qname,
602<FONT CLASS="LN">85</FONT><A NAME="585"></A> Attributes attrs,
603<FONT CLASS="LN">86</FONT><A NAME="586"></A> AntXMLContext context)
604<FONT CLASS="LN">87</FONT><A NAME="587"></A> <FONT CLASS="Throws">throws</FONT> SAXParseException {
605<FONT CLASS="LN">88</FONT><A NAME="588"></A> String id = <FONT CLASS="Null">null</FONT>;
606<FONT CLASS="LN">89</FONT><A NAME="589"></A> String baseDir = <FONT CLASS="Null">null</FONT>;
607<FONT CLASS="LN">90</FONT><A NAME="590"></A> <FONT CLASS="Boolean">boolean</FONT> nameAttributeSet = <FONT CLASS="False">false</FONT>;
608<FONT CLASS="LN">91</FONT><A NAME="591"></A>
609<FONT CLASS="LN">92</FONT><A NAME="592"></A> Project project = context.getProject();
610<FONT CLASS="LN">93</FONT><A NAME="593"></A>
611<FONT CLASS="LN">94</FONT><A NAME="594"></A> <FONT CLASS="FormalComment">/** XXX I really don't like this - the XML processor is still
612<FONT CLASS="LN">95</FONT><A NAME="595"></A> * too 'involved' in the processing. A better solution (IMO)
613<FONT CLASS="LN">96</FONT><A NAME="596"></A> * would be to create UE for Project and Target too, and
614<FONT CLASS="LN">97</FONT><A NAME="597"></A> * then process the tree and have Project/Target deal with
615<FONT CLASS="LN">98</FONT><A NAME="598"></A> * its attributes ( similar with Description ).
616<FONT CLASS="LN">99</FONT><A NAME="599"></A> *
617<FONT CLASS="LN">00</FONT><A NAME="600"></A> * If we eventually switch to ( or add support for ) DOM,
618<FONT CLASS="LN">01</FONT><A NAME="601"></A> * things will work smoothly - UE can be avoided almost completely
619<FONT CLASS="LN">02</FONT><A NAME="602"></A> * ( it could still be created on demand, for backward compatibility )
620<FONT CLASS="LN">03</FONT><A NAME="603"></A> */</FONT>
621<FONT CLASS="LN">04</FONT><A NAME="604"></A>
622<FONT CLASS="LN">05</FONT><A NAME="605"></A> <FONT CLASS="For">for</FONT> (<FONT CLASS="Int">int</FONT> i = <FONT CLASS="IntegerLiteral">0</FONT>; i &lt; attrs.getLength(); i++) {
623<FONT CLASS="LN">06</FONT><A NAME="606"></A> String attrUri = attrs.getURI(i);
624<FONT CLASS="LN">07</FONT><A NAME="607"></A> <FONT CLASS="If">if</FONT> (attrUri != <FONT CLASS="Null">null</FONT>
625<FONT CLASS="LN">08</FONT><A NAME="608"></A> &amp;&amp; !attrUri.equals(<FONT CLASS="StringLiteral">""</FONT>)
626<FONT CLASS="LN">09</FONT><A NAME="609"></A> &amp;&amp; !attrUri.equals(uri)) {
627<FONT CLASS="LN">10</FONT><A NAME="610"></A> <FONT CLASS="Continue">continue</FONT>; <FONT CLASS="SingleLineComment">// Ignore attributes from unknown uris
628<FONT CLASS="LN">11</FONT><A NAME="611"></A></FONT> }
629<FONT CLASS="LN">12</FONT><A NAME="612"></A> String key = attrs.getLocalName(i);
630<FONT CLASS="LN">13</FONT><A NAME="613"></A> String value = attrs.getValue(i);
631<FONT CLASS="LN">14</FONT><A NAME="614"></A>
632<FONT CLASS="LN">15</FONT><A NAME="615"></A> <FONT CLASS="If">if</FONT> (key.equals(<FONT CLASS="StringLiteral">"default"</FONT>)) {
633<FONT CLASS="LN">16</FONT><A NAME="616"></A> <FONT CLASS="If">if</FONT> (value != <FONT CLASS="Null">null</FONT> &amp;&amp; !value.equals(<FONT CLASS="StringLiteral">""</FONT>)) {
634<FONT CLASS="LN">17</FONT><A NAME="617"></A> <FONT CLASS="If">if</FONT> (!context.isIgnoringProjectTag()) {
635<FONT CLASS="LN">18</FONT><A NAME="618"></A> project.setDefault(value);
636<FONT CLASS="LN">19</FONT><A NAME="619"></A> }
637<FONT CLASS="LN">20</FONT><A NAME="620"></A> }
638<FONT CLASS="LN">21</FONT><A NAME="621"></A> } <FONT CLASS="Else">else</FONT> <FONT CLASS="If">if</FONT> (key.equals(<FONT CLASS="StringLiteral">"name"</FONT>)) {
639<FONT CLASS="LN">22</FONT><A NAME="622"></A> <FONT CLASS="If">if</FONT> (value != <FONT CLASS="Null">null</FONT>) {
640<FONT CLASS="LN">23</FONT><A NAME="623"></A> context.setCurrentProjectName(value);
641<FONT CLASS="LN">24</FONT><A NAME="624"></A> nameAttributeSet = <FONT CLASS="True">true</FONT>;
642<FONT CLASS="LN">25</FONT><A NAME="625"></A> <FONT CLASS="If">if</FONT> (!context.isIgnoringProjectTag()) {
643<FONT CLASS="LN">26</FONT><A NAME="626"></A> project.setName(value);
644<FONT CLASS="LN">27</FONT><A NAME="627"></A> project.addReference(value, project);
645<FONT CLASS="LN">28</FONT><A NAME="628"></A> }
646<FONT CLASS="LN">29</FONT><A NAME="629"></A> }
647<FONT CLASS="LN">30</FONT><A NAME="630"></A> } <FONT CLASS="Else">else</FONT> <FONT CLASS="If">if</FONT> (key.equals(<FONT CLASS="StringLiteral">"id"</FONT>)) {
648<FONT CLASS="LN">31</FONT><A NAME="631"></A> <FONT CLASS="If">if</FONT> (value != <FONT CLASS="Null">null</FONT>) {
649<FONT CLASS="LN">32</FONT><A NAME="632"></A> <FONT CLASS="SingleLineComment">// What's the difference between id and name ?
650<FONT CLASS="LN">33</FONT><A NAME="633"></A></FONT> <FONT CLASS="If">if</FONT> (!context.isIgnoringProjectTag()) {
651<FONT CLASS="LN">34</FONT><A NAME="634"></A> project.addReference(value, project);
652<FONT CLASS="LN">35</FONT><A NAME="635"></A> }
653<FONT CLASS="LN">36</FONT><A NAME="636"></A> }
654<FONT CLASS="LN">37</FONT><A NAME="637"></A> } <FONT CLASS="Else">else</FONT> <FONT CLASS="If">if</FONT> (key.equals(<FONT CLASS="StringLiteral">"basedir"</FONT>)) {
655<FONT CLASS="LN">38</FONT><A NAME="638"></A> <FONT CLASS="If">if</FONT> (!context.isIgnoringProjectTag()) {
656<FONT CLASS="LN">39</FONT><A NAME="639"></A> baseDir = value;
657<FONT CLASS="LN">40</FONT><A NAME="640"></A> }
658<FONT CLASS="LN">41</FONT><A NAME="641"></A> } <FONT CLASS="Else">else</FONT> {
659<FONT CLASS="LN">42</FONT><A NAME="642"></A> <FONT CLASS="SingleLineComment">// XXX ignore attributes in a different NS ( maybe store them ? )
660<FONT CLASS="LN">43</FONT><A NAME="643"></A></FONT> <FONT CLASS="Throw">throw</FONT> <FONT CLASS="New">new</FONT> SAXParseException(<FONT CLASS="StringLiteral">"Unexpected attribute \""</FONT>
661<FONT CLASS="LN">44</FONT><A NAME="644"></A> + attrs.getQName(i) + <FONT CLASS="StringLiteral">"\""</FONT>, context.getLocator());
662<FONT CLASS="LN">45</FONT><A NAME="645"></A> }
663<FONT CLASS="LN">46</FONT><A NAME="646"></A> }
664<FONT CLASS="LN">47</FONT><A NAME="647"></A>
665<FONT CLASS="LN">48</FONT><A NAME="648"></A> <FONT CLASS="SingleLineComment">// XXX Move to Project ( so it is shared by all helpers )
666<FONT CLASS="LN">49</FONT><A NAME="649"></A></FONT> String antFileProp = <FONT CLASS="StringLiteral">"ant.file."</FONT> + context.getCurrentProjectName();
667<FONT CLASS="LN">50</FONT><A NAME="650"></A> String dup = project.getProperty(antFileProp);
668<FONT CLASS="LN">51</FONT><A NAME="651"></A> <FONT CLASS="If">if</FONT> (dup != <FONT CLASS="Null">null</FONT> &amp;&amp; nameAttributeSet) {
669<FONT CLASS="LN">52</FONT><A NAME="652"></A> File dupFile = <FONT CLASS="New">new</FONT> File(dup);
670<FONT CLASS="LN">53</FONT><A NAME="653"></A> <FONT CLASS="If">if</FONT> (context.isIgnoringProjectTag()
671<FONT CLASS="LN">54</FONT><A NAME="654"></A> &amp;&amp; !dupFile.equals(context.getBuildFile())) {
672<FONT CLASS="LN">55</FONT><A NAME="655"></A> project.log(<FONT CLASS="StringLiteral">"Duplicated project name in import. Project "</FONT>
673<FONT CLASS="LN">56</FONT><A NAME="656"></A> + context.getCurrentProjectName() + <FONT CLASS="StringLiteral">" defined first in "</FONT>
674<FONT CLASS="LN">57</FONT><A NAME="657"></A> + dup + <FONT CLASS="StringLiteral">" and again in "</FONT> + context.getBuildFile(),
675<FONT CLASS="LN">58</FONT><A NAME="658"></A> Project.MSG_WARN);
676<FONT CLASS="LN">59</FONT><A NAME="659"></A> }
677<FONT CLASS="LN">60</FONT><A NAME="660"></A> }
678<FONT CLASS="LN">61</FONT><A NAME="661"></A>
679<FONT CLASS="LN">62</FONT><A NAME="662"></A> <FONT CLASS="If">if</FONT> (context.getBuildFile() != <FONT CLASS="Null">null</FONT>) {
680<FONT CLASS="LN">63</FONT><A NAME="663"></A> project.setUserProperty(<FONT CLASS="StringLiteral">"ant.file."</FONT>
681<FONT CLASS="LN">64</FONT><A NAME="664"></A> + context.getCurrentProjectName(),
682<FONT CLASS="LN">65</FONT><A NAME="665"></A> context.getBuildFile().toString());
683<FONT CLASS="LN">66</FONT><A NAME="666"></A> }
684<FONT CLASS="LN">67</FONT><A NAME="667"></A>
685<FONT CLASS="LN">68</FONT><A NAME="668"></A> <FONT CLASS="If">if</FONT> (context.isIgnoringProjectTag()) {
686<FONT CLASS="LN">69</FONT><A NAME="669"></A> <FONT CLASS="SingleLineComment">// no further processing
687<FONT CLASS="LN">70</FONT><A NAME="670"></A></FONT> <FONT CLASS="Return">return</FONT>;
688<FONT CLASS="LN">71</FONT><A NAME="671"></A> }
689<FONT CLASS="LN">72</FONT><A NAME="672"></A> <FONT CLASS="SingleLineComment">// set explicitly before starting ?
690<FONT CLASS="LN">73</FONT><A NAME="673"></A></FONT> <FONT CLASS="If">if</FONT> (project.getProperty(<FONT CLASS="StringLiteral">"basedir"</FONT>) != <FONT CLASS="Null">null</FONT>) {
691<FONT CLASS="LN">74</FONT><A NAME="674"></A> project.setBasedir(project.getProperty(<FONT CLASS="StringLiteral">"basedir"</FONT>));
692<FONT CLASS="LN">75</FONT><A NAME="675"></A> } <FONT CLASS="Else">else</FONT> {
693<FONT CLASS="LN">76</FONT><A NAME="676"></A> <FONT CLASS="SingleLineComment">// Default for baseDir is the location of the build file.
694<FONT CLASS="LN">77</FONT><A NAME="677"></A></FONT> <FONT CLASS="If">if</FONT> (baseDir == <FONT CLASS="Null">null</FONT>) {
695<FONT CLASS="LN">78</FONT><A NAME="678"></A> project.setBasedir(context.getBuildFileParent().getAbsolutePath());
696<FONT CLASS="LN">79</FONT><A NAME="679"></A> } <FONT CLASS="Else">else</FONT> {
697<FONT CLASS="LN">80</FONT><A NAME="680"></A> <FONT CLASS="SingleLineComment">// check whether the user has specified an absolute path
698<FONT CLASS="LN">81</FONT><A NAME="681"></A></FONT> <FONT CLASS="If">if</FONT> ((<FONT CLASS="New">new</FONT> File(baseDir)).isAbsolute()) {
699<FONT CLASS="LN">82</FONT><A NAME="682"></A> project.setBasedir(baseDir);
700<FONT CLASS="LN">83</FONT><A NAME="683"></A> } <FONT CLASS="Else">else</FONT> {
701<FONT CLASS="LN">84</FONT><A NAME="684"></A> project.setBaseDir(fu.resolveFile(
702<FONT CLASS="LN">85</FONT><A NAME="685"></A> context.getBuildFileParent(), baseDir));
703<FONT CLASS="LN">86</FONT><A NAME="686"></A> }
704<FONT CLASS="LN">87</FONT><A NAME="687"></A> }
705<FONT CLASS="LN">88</FONT><A NAME="688"></A> }
706<FONT CLASS="LN">89</FONT><A NAME="689"></A>
707<FONT CLASS="LN">90</FONT><A NAME="690"></A> project.addTarget(<FONT CLASS="StringLiteral">""</FONT>, context.getImplicitTarget());
708<FONT CLASS="LN">91</FONT><A NAME="691"></A> context.setCurrentTarget(context.getImplicitTarget());
709<FONT CLASS="LN">92</FONT><A NAME="692"></A> }
710<FONT CLASS="LN">93</FONT><A NAME="693"></A>
711<FONT CLASS="LN">94</FONT><A NAME="694"></A> <FONT CLASS="FormalComment">/**
712<FONT CLASS="LN">95</FONT><A NAME="695"></A> * Handles the start of a top-level element within the project. An
713<FONT CLASS="LN">96</FONT><A NAME="696"></A> * appropriate handler is created and initialised with the details
714<FONT CLASS="LN">97</FONT><A NAME="697"></A> * of the element.
715<FONT CLASS="LN">98</FONT><A NAME="698"></A> *
716<FONT CLASS="LN">99</FONT><A NAME="699"></A> * @param uri The namespace URI for this element.
717<FONT CLASS="LN">00</FONT><A NAME="700"></A> * @param name The name of the element being started.
718<FONT CLASS="LN">01</FONT><A NAME="701"></A> * Will not be &lt;code&gt;null&lt;/code&gt;.
719<FONT CLASS="LN">02</FONT><A NAME="702"></A> * @param qname The qualified name for this element.
720<FONT CLASS="LN">03</FONT><A NAME="703"></A> * @param attrs Attributes of the element being started.
721<FONT CLASS="LN">04</FONT><A NAME="704"></A> * Will not be &lt;code&gt;null&lt;/code&gt;.
722<FONT CLASS="LN">05</FONT><A NAME="705"></A> * @param context The context for this element.
723<FONT CLASS="LN">06</FONT><A NAME="706"></A> * @return a target or an element handler.
724<FONT CLASS="LN">07</FONT><A NAME="707"></A> *
725<FONT CLASS="LN">08</FONT><A NAME="708"></A> * @exception org.xml.sax.SAXParseException if the tag given is not
726<FONT CLASS="LN">09</FONT><A NAME="709"></A> * &lt;code&gt;"taskdef"&lt;/code&gt;, &lt;code&gt;"typedef"&lt;/code&gt;,
727<FONT CLASS="LN">10</FONT><A NAME="710"></A> * &lt;code&gt;"property"&lt;/code&gt;, &lt;code&gt;"target"&lt;/code&gt;
728<FONT CLASS="LN">11</FONT><A NAME="711"></A> * or a data type definition
729<FONT CLASS="LN">12</FONT><A NAME="712"></A> */</FONT>
730<FONT CLASS="LN">13</FONT><A NAME="713"></A> <FONT CLASS="Public">public</FONT> AntHandler onStartChild(String uri, String name, String qname,
731<FONT CLASS="LN">14</FONT><A NAME="714"></A> Attributes attrs,
732<FONT CLASS="LN">15</FONT><A NAME="715"></A> AntXMLContext context)
733<FONT CLASS="LN">16</FONT><A NAME="716"></A> <FONT CLASS="Throws">throws</FONT> SAXParseException {
734<FONT CLASS="LN">17</FONT><A NAME="717"></A> <FONT CLASS="If">if</FONT> (name.equals(<FONT CLASS="StringLiteral">"target"</FONT>)
735<FONT CLASS="LN">18</FONT><A NAME="718"></A> &amp;&amp; (uri.equals(<FONT CLASS="StringLiteral">""</FONT>) || uri.equals(ANT_CORE_URI))) {
736<FONT CLASS="LN">19</FONT><A NAME="719"></A> <FONT CLASS="Return">return</FONT> ProjectHelper3.targetHandler;
737<FONT CLASS="LN">20</FONT><A NAME="720"></A> } <FONT CLASS="Else">else</FONT> {
738<FONT CLASS="LN">21</FONT><A NAME="721"></A> <FONT CLASS="Return">return</FONT> ProjectHelper3.elementHandler;
739<FONT CLASS="LN">22</FONT><A NAME="722"></A> }
740<FONT CLASS="LN">23</FONT><A NAME="723"></A> }
741<FONT CLASS="LN">24</FONT><A NAME="724"></A>
742<FONT CLASS="LN">25</FONT><A NAME="725"></A> }
743<FONT CLASS="LN">26</FONT><A NAME="726"></A>
744<FONT CLASS="LN">27</FONT><A NAME="727"></A> <FONT CLASS="FormalComment">/**
745<FONT CLASS="LN">28</FONT><A NAME="728"></A> * Handler for "target" elements.
746<FONT CLASS="LN">29</FONT><A NAME="729"></A> */</FONT>
747<FONT CLASS="LN">30</FONT><A NAME="730"></A> <FONT CLASS="Public">public</FONT> <FONT CLASS="Static">static</FONT> <FONT CLASS="Class">class</FONT> TargetHandler <FONT CLASS="Extends">extends</FONT> AntHandler {
748<FONT CLASS="LN">31</FONT><A NAME="731"></A>
749<FONT CLASS="LN">32</FONT><A NAME="732"></A> <FONT CLASS="FormalComment">/**
750<FONT CLASS="LN">33</FONT><A NAME="733"></A> * Initialisation routine called after handler creation
751<FONT CLASS="LN">34</FONT><A NAME="734"></A> * with the element name and attributes. The attributes which
752<FONT CLASS="LN">35</FONT><A NAME="735"></A> * this handler can deal with are: &lt;code&gt;"name"&lt;/code&gt;,
753<FONT CLASS="LN">36</FONT><A NAME="736"></A> * &lt;code&gt;"depends"&lt;/code&gt;, &lt;code&gt;"if"&lt;/code&gt;,
754<FONT CLASS="LN">37</FONT><A NAME="737"></A> * &lt;code&gt;"unless"&lt;/code&gt;, &lt;code&gt;"id"&lt;/code&gt; and
755<FONT CLASS="LN">38</FONT><A NAME="738"></A> * &lt;code&gt;"description"&lt;/code&gt;.
756<FONT CLASS="LN">39</FONT><A NAME="739"></A> *
757<FONT CLASS="LN">40</FONT><A NAME="740"></A> * @param uri The namespace URI for this element.
758<FONT CLASS="LN">41</FONT><A NAME="741"></A> * @param tag Name of the element which caused this handler
759<FONT CLASS="LN">42</FONT><A NAME="742"></A> * to be created. Should not be &lt;code&gt;null&lt;/code&gt;.
760<FONT CLASS="LN">43</FONT><A NAME="743"></A> * Ignored in this implementation.
761<FONT CLASS="LN">44</FONT><A NAME="744"></A> * @param qname The qualified name for this element.
762<FONT CLASS="LN">45</FONT><A NAME="745"></A> * @param attrs Attributes of the element which caused this
763<FONT CLASS="LN">46</FONT><A NAME="746"></A> * handler to be created. Must not be &lt;code&gt;null&lt;/code&gt;.
764<FONT CLASS="LN">47</FONT><A NAME="747"></A> * @param context The current context.
765<FONT CLASS="LN">48</FONT><A NAME="748"></A> *
766<FONT CLASS="LN">49</FONT><A NAME="749"></A> * @exception SAXParseException if an unexpected attribute is encountered
767<FONT CLASS="LN">50</FONT><A NAME="750"></A> * or if the &lt;code&gt;"name"&lt;/code&gt; attribute is missing.
768<FONT CLASS="LN">51</FONT><A NAME="751"></A> */</FONT>
769<FONT CLASS="LN">52</FONT><A NAME="752"></A> <FONT CLASS="Public">public</FONT> <FONT CLASS="Void">void</FONT> onStartElement(String uri, String tag, String qname,
770<FONT CLASS="LN">53</FONT><A NAME="753"></A> Attributes attrs,
771<FONT CLASS="LN">54</FONT><A NAME="754"></A> AntXMLContext context)
772<FONT CLASS="LN">55</FONT><A NAME="755"></A> <FONT CLASS="Throws">throws</FONT> SAXParseException {
773<FONT CLASS="LN">56</FONT><A NAME="756"></A> String name = <FONT CLASS="Null">null</FONT>;
774<FONT CLASS="LN">57</FONT><A NAME="757"></A> String depends = <FONT CLASS="StringLiteral">""</FONT>;
775<FONT CLASS="LN">58</FONT><A NAME="758"></A>
776<FONT CLASS="LN">59</FONT><A NAME="759"></A> Project project = context.getProject();
777<FONT CLASS="LN">60</FONT><A NAME="760"></A> Target target = <FONT CLASS="New">new</FONT> Target();
778<FONT CLASS="LN">61</FONT><A NAME="761"></A> target.setProject(project);
779<FONT CLASS="LN">62</FONT><A NAME="762"></A> context.addTarget(target);
780<FONT CLASS="LN">63</FONT><A NAME="763"></A>
781<FONT CLASS="LN">64</FONT><A NAME="764"></A> <FONT CLASS="For">for</FONT> (<FONT CLASS="Int">int</FONT> i = <FONT CLASS="IntegerLiteral">0</FONT>; i &lt; attrs.getLength(); i++) {
782<FONT CLASS="LN">65</FONT><A NAME="765"></A> String attrUri = attrs.getURI(i);
783<FONT CLASS="LN">66</FONT><A NAME="766"></A> <FONT CLASS="If">if</FONT> (attrUri != <FONT CLASS="Null">null</FONT>
784<FONT CLASS="LN">67</FONT><A NAME="767"></A> &amp;&amp; !attrUri.equals(<FONT CLASS="StringLiteral">""</FONT>)
785<FONT CLASS="LN">68</FONT><A NAME="768"></A> &amp;&amp; !attrUri.equals(uri)) {
786<FONT CLASS="LN">69</FONT><A NAME="769"></A> <FONT CLASS="Continue">continue</FONT>; <FONT CLASS="SingleLineComment">// Ignore attributes from unknown uris
787<FONT CLASS="LN">70</FONT><A NAME="770"></A></FONT> }
788<FONT CLASS="LN">71</FONT><A NAME="771"></A> String key = attrs.getLocalName(i);
789<FONT CLASS="LN">72</FONT><A NAME="772"></A> String value = attrs.getValue(i);
790<FONT CLASS="LN">73</FONT><A NAME="773"></A>
791<FONT CLASS="LN">74</FONT><A NAME="774"></A> <FONT CLASS="If">if</FONT> (key.equals(<FONT CLASS="StringLiteral">"name"</FONT>)) {
792<FONT CLASS="LN">75</FONT><A NAME="775"></A> name = value;
793<FONT CLASS="LN">76</FONT><A NAME="776"></A> <FONT CLASS="If">if</FONT> (<FONT CLASS="StringLiteral">""</FONT>.equals(name)) {
794<FONT CLASS="LN">77</FONT><A NAME="777"></A> <FONT CLASS="Throw">throw</FONT> <FONT CLASS="New">new</FONT> BuildException(<FONT CLASS="StringLiteral">"name attribute must "</FONT>
795<FONT CLASS="LN">78</FONT><A NAME="778"></A> + <FONT CLASS="StringLiteral">"not be empty"</FONT>);
796<FONT CLASS="LN">79</FONT><A NAME="779"></A> }
797<FONT CLASS="LN">80</FONT><A NAME="780"></A> } <FONT CLASS="Else">else</FONT> <FONT CLASS="If">if</FONT> (key.equals(<FONT CLASS="StringLiteral">"depends"</FONT>)) {
798<FONT CLASS="LN">81</FONT><A NAME="781"></A> depends = value;
799<FONT CLASS="LN">82</FONT><A NAME="782"></A> } <FONT CLASS="Else">else</FONT> <FONT CLASS="If">if</FONT> (key.equals(<FONT CLASS="StringLiteral">"if"</FONT>)) {
800<FONT CLASS="LN">83</FONT><A NAME="783"></A> target.setIf(value);
801<FONT CLASS="LN">84</FONT><A NAME="784"></A> } <FONT CLASS="Else">else</FONT> <FONT CLASS="If">if</FONT> (key.equals(<FONT CLASS="StringLiteral">"unless"</FONT>)) {
802<FONT CLASS="LN">85</FONT><A NAME="785"></A> target.setUnless(value);
803<FONT CLASS="LN">86</FONT><A NAME="786"></A> } <FONT CLASS="Else">else</FONT> <FONT CLASS="If">if</FONT> (key.equals(<FONT CLASS="StringLiteral">"id"</FONT>)) {
804<FONT CLASS="LN">87</FONT><A NAME="787"></A> <FONT CLASS="If">if</FONT> (value != <FONT CLASS="Null">null</FONT> &amp;&amp; !value.equals(<FONT CLASS="StringLiteral">""</FONT>)) {
805<FONT CLASS="LN">88</FONT><A NAME="788"></A> context.getProject().addReference(value, target);
806<FONT CLASS="LN">89</FONT><A NAME="789"></A> }
807<FONT CLASS="LN">90</FONT><A NAME="790"></A> } <FONT CLASS="Else">else</FONT> <FONT CLASS="If">if</FONT> (key.equals(<FONT CLASS="StringLiteral">"description"</FONT>)) {
808<FONT CLASS="LN">91</FONT><A NAME="791"></A> target.setDescription(value);
809<FONT CLASS="LN">92</FONT><A NAME="792"></A> } <FONT CLASS="Else">else</FONT> {
810<FONT CLASS="LN">93</FONT><A NAME="793"></A> <FONT CLASS="Throw">throw</FONT> <FONT CLASS="New">new</FONT> SAXParseException(<FONT CLASS="StringLiteral">"Unexpected attribute \""</FONT>
811<FONT CLASS="LN">94</FONT><A NAME="794"></A> + key + <FONT CLASS="StringLiteral">"\""</FONT>, context.getLocator());
812<FONT CLASS="LN">95</FONT><A NAME="795"></A> }
813<FONT CLASS="LN">96</FONT><A NAME="796"></A> }
814<FONT CLASS="LN">97</FONT><A NAME="797"></A>
815<FONT CLASS="LN">98</FONT><A NAME="798"></A> <FONT CLASS="If">if</FONT> (name == <FONT CLASS="Null">null</FONT>) {
816<FONT CLASS="LN">99</FONT><A NAME="799"></A> <FONT CLASS="Throw">throw</FONT> <FONT CLASS="New">new</FONT> SAXParseException(<FONT CLASS="StringLiteral">"target element appears without "</FONT>
817<FONT CLASS="LN">00</FONT><A NAME="800"></A> + <FONT CLASS="StringLiteral">"a name attribute"</FONT>, context.getLocator());
818<FONT CLASS="LN">01</FONT><A NAME="801"></A> }
819<FONT CLASS="LN">02</FONT><A NAME="802"></A>
820<FONT CLASS="LN">03</FONT><A NAME="803"></A> Hashtable currentTargets = project.getTargets();
821<FONT CLASS="LN">04</FONT><A NAME="804"></A>
822<FONT CLASS="LN">05</FONT><A NAME="805"></A> <FONT CLASS="SingleLineComment">// If the name has already been defined ( import for example )
823<FONT CLASS="LN">06</FONT><A NAME="806"></A></FONT> <FONT CLASS="If">if</FONT> (currentTargets.containsKey(name)) {
824<FONT CLASS="LN">07</FONT><A NAME="807"></A> <FONT CLASS="If">if</FONT> (!context.isIgnoringProjectTag()) {
825<FONT CLASS="LN">08</FONT><A NAME="808"></A> <FONT CLASS="SingleLineComment">// not in a import'ed file
826<FONT CLASS="LN">09</FONT><A NAME="809"></A></FONT> <FONT CLASS="Throw">throw</FONT> <FONT CLASS="New">new</FONT> BuildException(
827<FONT CLASS="LN">10</FONT><A NAME="810"></A> <FONT CLASS="StringLiteral">"Duplicate target '"</FONT> + name + <FONT CLASS="StringLiteral">"'"</FONT>,
828<FONT CLASS="LN">11</FONT><A NAME="811"></A> <FONT CLASS="New">new</FONT> Location(context.getLocator().getSystemId(),
829<FONT CLASS="LN">12</FONT><A NAME="812"></A> context.getLocator().getLineNumber(),
830<FONT CLASS="LN">13</FONT><A NAME="813"></A> context.getLocator().getColumnNumber()));
831<FONT CLASS="LN">14</FONT><A NAME="814"></A> }
832<FONT CLASS="LN">15</FONT><A NAME="815"></A> <FONT CLASS="SingleLineComment">// Alter the name.
833<FONT CLASS="LN">16</FONT><A NAME="816"></A></FONT> <FONT CLASS="If">if</FONT> (context.getCurrentProjectName() != <FONT CLASS="Null">null</FONT>) {
834<FONT CLASS="LN">17</FONT><A NAME="817"></A> String newName = context.getCurrentProjectName()
835<FONT CLASS="LN">18</FONT><A NAME="818"></A> + <FONT CLASS="StringLiteral">"."</FONT> + name;
836<FONT CLASS="LN">19</FONT><A NAME="819"></A> project.log(<FONT CLASS="StringLiteral">"Already defined in main or a previous import, "</FONT>
837<FONT CLASS="LN">20</FONT><A NAME="820"></A> + <FONT CLASS="StringLiteral">"define "</FONT> + name + <FONT CLASS="StringLiteral">" as "</FONT> + newName,
838<FONT CLASS="LN">21</FONT><A NAME="821"></A> Project.MSG_VERBOSE);
839<FONT CLASS="LN">22</FONT><A NAME="822"></A> name = newName;
840<FONT CLASS="LN">23</FONT><A NAME="823"></A> } <FONT CLASS="Else">else</FONT> {
841<FONT CLASS="LN">24</FONT><A NAME="824"></A> project.log(<FONT CLASS="StringLiteral">"Already defined in main or a previous import, "</FONT>
842<FONT CLASS="LN">25</FONT><A NAME="825"></A> + <FONT CLASS="StringLiteral">"ignore "</FONT> + name, Project.MSG_VERBOSE);
843<FONT CLASS="LN">26</FONT><A NAME="826"></A> name = <FONT CLASS="Null">null</FONT>;
844<FONT CLASS="LN">27</FONT><A NAME="827"></A> }
845<FONT CLASS="LN">28</FONT><A NAME="828"></A> }
846<FONT CLASS="LN">29</FONT><A NAME="829"></A>
847<FONT CLASS="LN">30</FONT><A NAME="830"></A> <FONT CLASS="If">if</FONT> (name != <FONT CLASS="Null">null</FONT>) {
848<FONT CLASS="LN">31</FONT><A NAME="831"></A> target.setName(name);
849<FONT CLASS="LN">32</FONT><A NAME="832"></A> project.addOrReplaceTarget(name, target);
850<FONT CLASS="LN">33</FONT><A NAME="833"></A> }
851<FONT CLASS="LN">34</FONT><A NAME="834"></A>
852<FONT CLASS="LN">35</FONT><A NAME="835"></A> <FONT CLASS="SingleLineComment">// take care of dependencies
853<FONT CLASS="LN">36</FONT><A NAME="836"></A></FONT> <FONT CLASS="If">if</FONT> (depends.length() &gt; <FONT CLASS="IntegerLiteral">0</FONT>) {
854<FONT CLASS="LN">37</FONT><A NAME="837"></A> target.setDepends(depends);
855<FONT CLASS="LN">38</FONT><A NAME="838"></A> }
856<FONT CLASS="LN">39</FONT><A NAME="839"></A> }
857<FONT CLASS="LN">40</FONT><A NAME="840"></A>
858<FONT CLASS="LN">41</FONT><A NAME="841"></A> <FONT CLASS="FormalComment">/**
859<FONT CLASS="LN">42</FONT><A NAME="842"></A> * Handles the start of an element within a target.
860<FONT CLASS="LN">43</FONT><A NAME="843"></A> *
861<FONT CLASS="LN">44</FONT><A NAME="844"></A> * @param uri The namespace URI for this element.
862<FONT CLASS="LN">45</FONT><A NAME="845"></A> * @param name The name of the element being started.
863<FONT CLASS="LN">46</FONT><A NAME="846"></A> * Will not be &lt;code&gt;null&lt;/code&gt;.
864<FONT CLASS="LN">47</FONT><A NAME="847"></A> * @param qname The qualified name for this element.
865<FONT CLASS="LN">48</FONT><A NAME="848"></A> * @param attrs Attributes of the element being started.
866<FONT CLASS="LN">49</FONT><A NAME="849"></A> * Will not be &lt;code&gt;null&lt;/code&gt;.
867<FONT CLASS="LN">50</FONT><A NAME="850"></A> * @param context The current context.
868<FONT CLASS="LN">51</FONT><A NAME="851"></A> * @return an element handler.
869<FONT CLASS="LN">52</FONT><A NAME="852"></A> *
870<FONT CLASS="LN">53</FONT><A NAME="853"></A> * @exception SAXParseException if an error occurs when initialising
871<FONT CLASS="LN">54</FONT><A NAME="854"></A> * the appropriate child handler
872<FONT CLASS="LN">55</FONT><A NAME="855"></A> */</FONT>
873<FONT CLASS="LN">56</FONT><A NAME="856"></A> <FONT CLASS="Public">public</FONT> AntHandler onStartChild(String uri, String name, String qname,
874<FONT CLASS="LN">57</FONT><A NAME="857"></A> Attributes attrs,
875<FONT CLASS="LN">58</FONT><A NAME="858"></A> AntXMLContext context)
876<FONT CLASS="LN">59</FONT><A NAME="859"></A> <FONT CLASS="Throws">throws</FONT> SAXParseException {
877<FONT CLASS="LN">60</FONT><A NAME="860"></A> <FONT CLASS="Return">return</FONT> ProjectHelper3.elementHandler;
878<FONT CLASS="LN">61</FONT><A NAME="861"></A> }
879<FONT CLASS="LN">62</FONT><A NAME="862"></A>
880<FONT CLASS="LN">63</FONT><A NAME="863"></A> <FONT CLASS="FormalComment">/**
881<FONT CLASS="LN">64</FONT><A NAME="864"></A> * Handle the end of the project, sets the current target of the
882<FONT CLASS="LN">65</FONT><A NAME="865"></A> * context to be the implicit target.
883<FONT CLASS="LN">66</FONT><A NAME="866"></A> *
884<FONT CLASS="LN">67</FONT><A NAME="867"></A> * @param uri The namespace URI of the element.
885<FONT CLASS="LN">68</FONT><A NAME="868"></A> * @param tag The name of the element.
886<FONT CLASS="LN">69</FONT><A NAME="869"></A> * @param context The current context.
887<FONT CLASS="LN">70</FONT><A NAME="870"></A> */</FONT>
888<FONT CLASS="LN">71</FONT><A NAME="871"></A> <FONT CLASS="Public">public</FONT> <FONT CLASS="Void">void</FONT> onEndElement(String uri, String tag, AntXMLContext context) {
889<FONT CLASS="LN">72</FONT><A NAME="872"></A> context.setCurrentTarget(context.getImplicitTarget());
890<FONT CLASS="LN">73</FONT><A NAME="873"></A> }
891<FONT CLASS="LN">74</FONT><A NAME="874"></A> }
892<FONT CLASS="LN">75</FONT><A NAME="875"></A>
893<FONT CLASS="LN">76</FONT><A NAME="876"></A> <FONT CLASS="FormalComment">/**
894<FONT CLASS="LN">77</FONT><A NAME="877"></A> * Handler for all project elements ( tasks, data types )
895<FONT CLASS="LN">78</FONT><A NAME="878"></A> */</FONT>
896<FONT CLASS="LN">79</FONT><A NAME="879"></A> <FONT CLASS="Public">public</FONT> <FONT CLASS="Static">static</FONT> <FONT CLASS="Class">class</FONT> ElementHandler <FONT CLASS="Extends">extends</FONT> AntHandler {
897<FONT CLASS="LN">80</FONT><A NAME="880"></A>
898<FONT CLASS="LN">81</FONT><A NAME="881"></A> <FONT CLASS="FormalComment">/**
899<FONT CLASS="LN">82</FONT><A NAME="882"></A> * Constructor.
900<FONT CLASS="LN">83</FONT><A NAME="883"></A> */</FONT>
901<FONT CLASS="LN">84</FONT><A NAME="884"></A> <FONT CLASS="Public">public</FONT> ElementHandler() {
902<FONT CLASS="LN">85</FONT><A NAME="885"></A> }
903<FONT CLASS="LN">86</FONT><A NAME="886"></A>
904<FONT CLASS="LN">87</FONT><A NAME="887"></A> <FONT CLASS="FormalComment">/**
905<FONT CLASS="LN">88</FONT><A NAME="888"></A> * Initialisation routine called after handler creation
906<FONT CLASS="LN">89</FONT><A NAME="889"></A> * with the element name and attributes. This configures
907<FONT CLASS="LN">90</FONT><A NAME="890"></A> * the element with its attributes and sets it up with
908<FONT CLASS="LN">91</FONT><A NAME="891"></A> * its parent container (if any). Nested elements are then
909<FONT CLASS="LN">92</FONT><A NAME="892"></A> * added later as the parser encounters them.
910<FONT CLASS="LN">93</FONT><A NAME="893"></A> *
911<FONT CLASS="LN">94</FONT><A NAME="894"></A> * @param uri The namespace URI for this element.
912<FONT CLASS="LN">95</FONT><A NAME="895"></A> * @param tag Name of the element which caused this handler
913<FONT CLASS="LN">96</FONT><A NAME="896"></A> * to be created. Must not be &lt;code&gt;null&lt;/code&gt;.
914<FONT CLASS="LN">97</FONT><A NAME="897"></A> * @param qname The qualified name for this element.
915<FONT CLASS="LN">98</FONT><A NAME="898"></A> * @param attrs Attributes of the element which caused this
916<FONT CLASS="LN">99</FONT><A NAME="899"></A> * handler to be created. Must not be &lt;code&gt;null&lt;/code&gt;.
917<FONT CLASS="LN">00</FONT><A NAME="900"></A> * @param context The current context.
918<FONT CLASS="LN">01</FONT><A NAME="901"></A> *
919<FONT CLASS="LN">02</FONT><A NAME="902"></A> * @exception SAXParseException in case of error (not thrown in
920<FONT CLASS="LN">03</FONT><A NAME="903"></A> * this implementation)
921<FONT CLASS="LN">04</FONT><A NAME="904"></A> */</FONT>
922<FONT CLASS="LN">05</FONT><A NAME="905"></A> <FONT CLASS="Public">public</FONT> <FONT CLASS="Void">void</FONT> onStartElement(String uri, String tag, String qname,
923<FONT CLASS="LN">06</FONT><A NAME="906"></A> Attributes attrs,
924<FONT CLASS="LN">07</FONT><A NAME="907"></A> AntXMLContext context)
925<FONT CLASS="LN">08</FONT><A NAME="908"></A> <FONT CLASS="Throws">throws</FONT> SAXParseException {
926<FONT CLASS="LN">09</FONT><A NAME="909"></A> RuntimeConfigurable parentWrapper = context.currentWrapper();
927<FONT CLASS="LN">10</FONT><A NAME="910"></A> Object parent = <FONT CLASS="Null">null</FONT>;
928<FONT CLASS="LN">11</FONT><A NAME="911"></A>
929<FONT CLASS="LN">12</FONT><A NAME="912"></A> <FONT CLASS="If">if</FONT> (parentWrapper != <FONT CLASS="Null">null</FONT>) {
930<FONT CLASS="LN">13</FONT><A NAME="913"></A> parent = parentWrapper.getProxy();
931<FONT CLASS="LN">14</FONT><A NAME="914"></A> }
932<FONT CLASS="LN">15</FONT><A NAME="915"></A>
933<FONT CLASS="LN">16</FONT><A NAME="916"></A> <FONT CLASS="MultiLineComment">/* UnknownElement is used for tasks and data types - with
934<FONT CLASS="LN">17</FONT><A NAME="917"></A> delayed eval */</FONT>
935<FONT CLASS="LN">18</FONT><A NAME="918"></A> UnknownElement task = <FONT CLASS="New">new</FONT> UnknownElement(tag);
936<FONT CLASS="LN">19</FONT><A NAME="919"></A> task.setProject(context.getProject());
937<FONT CLASS="LN">20</FONT><A NAME="920"></A> task.setNamespace(uri);
938<FONT CLASS="LN">21</FONT><A NAME="921"></A> task.setQName(qname);
939<FONT CLASS="LN">22</FONT><A NAME="922"></A> task.setTaskType(
940<FONT CLASS="LN">23</FONT><A NAME="923"></A> ProjectHelper.genComponentName(task.getNamespace(), tag));
941<FONT CLASS="LN">24</FONT><A NAME="924"></A> task.setTaskName(qname);
942<FONT CLASS="LN">25</FONT><A NAME="925"></A>
943<FONT CLASS="LN">26</FONT><A NAME="926"></A> Location location = <FONT CLASS="New">new</FONT> Location(context.getLocator().getSystemId(),
944<FONT CLASS="LN">27</FONT><A NAME="927"></A> context.getLocator().getLineNumber(),
945<FONT CLASS="LN">28</FONT><A NAME="928"></A> context.getLocator().getColumnNumber());
946<FONT CLASS="LN">29</FONT><A NAME="929"></A> task.setLocation(location);
947<FONT CLASS="LN">30</FONT><A NAME="930"></A> task.setOwningTarget(context.getCurrentTarget());
948<FONT CLASS="LN">31</FONT><A NAME="931"></A>
949<FONT CLASS="LN">32</FONT><A NAME="932"></A> context.configureId(task, attrs);
950<FONT CLASS="LN">33</FONT><A NAME="933"></A>
951<FONT CLASS="LN">34</FONT><A NAME="934"></A> <FONT CLASS="If">if</FONT> (parent != <FONT CLASS="Null">null</FONT>) {
952<FONT CLASS="LN">35</FONT><A NAME="935"></A> <FONT CLASS="SingleLineComment">// Nested element
953<FONT CLASS="LN">36</FONT><A NAME="936"></A></FONT> ((UnknownElement) parent).addChild(task);
954<FONT CLASS="LN">37</FONT><A NAME="937"></A> } <FONT CLASS="Else">else</FONT> {
955<FONT CLASS="LN">38</FONT><A NAME="938"></A> <FONT CLASS="SingleLineComment">// Task included in a target ( including the default one ).
956<FONT CLASS="LN">39</FONT><A NAME="939"></A></FONT> context.getCurrentTarget().addTask(task);
957<FONT CLASS="LN">40</FONT><A NAME="940"></A> }
958<FONT CLASS="LN">41</FONT><A NAME="941"></A>
959<FONT CLASS="LN">42</FONT><A NAME="942"></A> <FONT CLASS="SingleLineComment">// container.addTask(task);
960<FONT CLASS="LN">43</FONT><A NAME="943"></A></FONT> <FONT CLASS="SingleLineComment">// This is a nop in UE: task.init();
961<FONT CLASS="LN">44</FONT><A NAME="944"></A></FONT>
962<FONT CLASS="LN">45</FONT><A NAME="945"></A> RuntimeConfigurable wrapper
963<FONT CLASS="LN">46</FONT><A NAME="946"></A> = <FONT CLASS="New">new</FONT> RuntimeConfigurable(task, task.getTaskName());
964<FONT CLASS="LN">47</FONT><A NAME="947"></A>
965<FONT CLASS="LN">48</FONT><A NAME="948"></A> <FONT CLASS="For">for</FONT> (<FONT CLASS="Int">int</FONT> i = <FONT CLASS="IntegerLiteral">0</FONT>; i &lt; attrs.getLength(); i++) {
966<FONT CLASS="LN">49</FONT><A NAME="949"></A> String name = attrs.getLocalName(i);
967<FONT CLASS="LN">50</FONT><A NAME="950"></A> String attrUri = attrs.getURI(i);
968<FONT CLASS="LN">51</FONT><A NAME="951"></A> <FONT CLASS="If">if</FONT> (attrUri != <FONT CLASS="Null">null</FONT>
969<FONT CLASS="LN">52</FONT><A NAME="952"></A> &amp;&amp; !attrUri.equals(<FONT CLASS="StringLiteral">""</FONT>)
970<FONT CLASS="LN">53</FONT><A NAME="953"></A> &amp;&amp; !attrUri.equals(uri)) {
971<FONT CLASS="LN">54</FONT><A NAME="954"></A> name = attrUri + <FONT CLASS="StringLiteral">":"</FONT> + attrs.getQName(i);
972<FONT CLASS="LN">55</FONT><A NAME="955"></A> }
973<FONT CLASS="LN">56</FONT><A NAME="956"></A> String value = attrs.getValue(i);
974<FONT CLASS="LN">57</FONT><A NAME="957"></A> <FONT CLASS="SingleLineComment">// PR: Hack for ant-type value
975<FONT CLASS="LN">58</FONT><A NAME="958"></A></FONT> <FONT CLASS="SingleLineComment">// an ant-type is a component name which can
976<FONT CLASS="LN">59</FONT><A NAME="959"></A></FONT> <FONT CLASS="SingleLineComment">// be namespaced, need to extract the name
977<FONT CLASS="LN">60</FONT><A NAME="960"></A></FONT> <FONT CLASS="SingleLineComment">// and convert from qualified name to uri/name
978<FONT CLASS="LN">61</FONT><A NAME="961"></A></FONT> <FONT CLASS="If">if</FONT> (ANT_TYPE.equals(name)
979<FONT CLASS="LN">62</FONT><A NAME="962"></A> || (ANT_CORE_URI.equals(attrUri)
980<FONT CLASS="LN">63</FONT><A NAME="963"></A> &amp;&amp; ANT_TYPE.equals(attrs.getLocalName(i)))) {
981<FONT CLASS="LN">64</FONT><A NAME="964"></A> name = ANT_TYPE;
982<FONT CLASS="LN">65</FONT><A NAME="965"></A> <FONT CLASS="Int">int</FONT> index = value.indexOf(<FONT CLASS="StringLiteral">":"</FONT>);
983<FONT CLASS="LN">66</FONT><A NAME="966"></A> <FONT CLASS="If">if</FONT> (index != -<FONT CLASS="IntegerLiteral">1</FONT>) {
984<FONT CLASS="LN">67</FONT><A NAME="967"></A> String prefix = value.substring(<FONT CLASS="IntegerLiteral">0</FONT>, index);
985<FONT CLASS="LN">68</FONT><A NAME="968"></A> String mappedUri = context.getPrefixMapping(prefix);
986<FONT CLASS="LN">69</FONT><A NAME="969"></A> <FONT CLASS="If">if</FONT> (mappedUri == <FONT CLASS="Null">null</FONT>) {
987<FONT CLASS="LN">70</FONT><A NAME="970"></A> <FONT CLASS="Throw">throw</FONT> <FONT CLASS="New">new</FONT> BuildException(
988<FONT CLASS="LN">71</FONT><A NAME="971"></A> <FONT CLASS="StringLiteral">"Unable to find XML NS prefix "</FONT> + prefix);
989<FONT CLASS="LN">72</FONT><A NAME="972"></A> }
990<FONT CLASS="LN">73</FONT><A NAME="973"></A> value = ProjectHelper.genComponentName(
991<FONT CLASS="LN">74</FONT><A NAME="974"></A> mappedUri, value.substring(index + <FONT CLASS="IntegerLiteral">1</FONT>));
992<FONT CLASS="LN">75</FONT><A NAME="975"></A> }
993<FONT CLASS="LN">76</FONT><A NAME="976"></A> }
994<FONT CLASS="LN">77</FONT><A NAME="977"></A> wrapper.setAttribute(name, value);
995<FONT CLASS="LN">78</FONT><A NAME="978"></A> }
996<FONT CLASS="LN">79</FONT><A NAME="979"></A>
997<FONT CLASS="LN">80</FONT><A NAME="980"></A> <FONT CLASS="If">if</FONT> (parentWrapper != <FONT CLASS="Null">null</FONT>) {
998<FONT CLASS="LN">81</FONT><A NAME="981"></A> parentWrapper.addChild(wrapper);
999<FONT CLASS="LN">82</FONT><A NAME="982"></A> }
1000<FONT CLASS="LN">83</FONT><A NAME="983"></A>
1001<FONT CLASS="LN">84</FONT><A NAME="984"></A> context.pushWrapper(wrapper);
1002<FONT CLASS="LN">85</FONT><A NAME="985"></A> }
1003<FONT CLASS="LN">86</FONT><A NAME="986"></A>
1004<FONT CLASS="LN">87</FONT><A NAME="987"></A> <FONT CLASS="FormalComment">/**
1005<FONT CLASS="LN">88</FONT><A NAME="988"></A> * Adds text to the task, using the wrapper
1006<FONT CLASS="LN">89</FONT><A NAME="989"></A> *
1007<FONT CLASS="LN">90</FONT><A NAME="990"></A> * @param buf A character array of the text within the element.
1008<FONT CLASS="LN">91</FONT><A NAME="991"></A> * Will not be &lt;code&gt;null&lt;/code&gt;.
1009<FONT CLASS="LN">92</FONT><A NAME="992"></A> * @param start The start element in the array.
1010<FONT CLASS="LN">93</FONT><A NAME="993"></A> * @param count The number of characters to read from the array.
1011<FONT CLASS="LN">94</FONT><A NAME="994"></A> * @param context The current context.
1012<FONT CLASS="LN">95</FONT><A NAME="995"></A> *
1013<FONT CLASS="LN">96</FONT><A NAME="996"></A> * @exception SAXParseException if the element doesn't support text
1014<FONT CLASS="LN">97</FONT><A NAME="997"></A> *
1015<FONT CLASS="LN">98</FONT><A NAME="998"></A> * @see ProjectHelper#addText(Project,java.lang.Object,char[],int,int)
1016<FONT CLASS="LN">99</FONT><A NAME="999"></A> */</FONT>
1017<FONT CLASS="LN">00</FONT><A NAME="1000"></A> <FONT CLASS="Public">public</FONT> <FONT CLASS="Void">void</FONT> characters(<FONT CLASS="Char">char</FONT>[] buf, <FONT CLASS="Int">int</FONT> start, <FONT CLASS="Int">int</FONT> count,
1018<FONT CLASS="LN">01</FONT><A NAME="1001"></A> AntXMLContext context)
1019<FONT CLASS="LN">02</FONT><A NAME="1002"></A> <FONT CLASS="Throws">throws</FONT> SAXParseException {
1020<FONT CLASS="LN">03</FONT><A NAME="1003"></A> RuntimeConfigurable wrapper = context.currentWrapper();
1021<FONT CLASS="LN">04</FONT><A NAME="1004"></A> wrapper.addText(buf, start, count);
1022<FONT CLASS="LN">05</FONT><A NAME="1005"></A> }
1023<FONT CLASS="LN">06</FONT><A NAME="1006"></A>
1024<FONT CLASS="LN">07</FONT><A NAME="1007"></A> <FONT CLASS="FormalComment">/**
1025<FONT CLASS="LN">08</FONT><A NAME="1008"></A> * Handles the start of an element within a target. Task containers
1026<FONT CLASS="LN">09</FONT><A NAME="1009"></A> * will always use another task handler, and all other tasks
1027<FONT CLASS="LN">10</FONT><A NAME="1010"></A> * will always use a nested element handler.
1028<FONT CLASS="LN">11</FONT><A NAME="1011"></A> *
1029<FONT CLASS="LN">12</FONT><A NAME="1012"></A> * @param uri The namespace URI for this element.
1030<FONT CLASS="LN">13</FONT><A NAME="1013"></A> * @param tag The name of the element being started.
1031<FONT CLASS="LN">14</FONT><A NAME="1014"></A> * Will not be &lt;code&gt;null&lt;/code&gt;.
1032<FONT CLASS="LN">15</FONT><A NAME="1015"></A> * @param qname The qualified name for this element.
1033<FONT CLASS="LN">16</FONT><A NAME="1016"></A> * @param attrs Attributes of the element being started.
1034<FONT CLASS="LN">17</FONT><A NAME="1017"></A> * Will not be &lt;code&gt;null&lt;/code&gt;.
1035<FONT CLASS="LN">18</FONT><A NAME="1018"></A> * @param context The current context.
1036<FONT CLASS="LN">19</FONT><A NAME="1019"></A> * @return The handler for elements.
1037<FONT CLASS="LN">20</FONT><A NAME="1020"></A> *
1038<FONT CLASS="LN">21</FONT><A NAME="1021"></A> * @exception SAXParseException if an error occurs when initialising
1039<FONT CLASS="LN">22</FONT><A NAME="1022"></A> * the appropriate child handler
1040<FONT CLASS="LN">23</FONT><A NAME="1023"></A> */</FONT>
1041<FONT CLASS="LN">24</FONT><A NAME="1024"></A> <FONT CLASS="Public">public</FONT> AntHandler onStartChild(String uri, String tag, String qname,
1042<FONT CLASS="LN">25</FONT><A NAME="1025"></A> Attributes attrs,
1043<FONT CLASS="LN">26</FONT><A NAME="1026"></A> AntXMLContext context)
1044<FONT CLASS="LN">27</FONT><A NAME="1027"></A> <FONT CLASS="Throws">throws</FONT> SAXParseException {
1045<FONT CLASS="LN">28</FONT><A NAME="1028"></A> <FONT CLASS="Return">return</FONT> ProjectHelper3.elementHandler;
1046<FONT CLASS="LN">29</FONT><A NAME="1029"></A> }
1047<FONT CLASS="LN">30</FONT><A NAME="1030"></A>
1048<FONT CLASS="LN">31</FONT><A NAME="1031"></A> <FONT CLASS="FormalComment">/**
1049<FONT CLASS="LN">32</FONT><A NAME="1032"></A> * Handles the end of the element. This pops the wrapper from
1050<FONT CLASS="LN">33</FONT><A NAME="1033"></A> * the context.
1051<FONT CLASS="LN">34</FONT><A NAME="1034"></A> *
1052<FONT CLASS="LN">35</FONT><A NAME="1035"></A> * @param uri The namespace URI for the element.
1053<FONT CLASS="LN">36</FONT><A NAME="1036"></A> * @param tag The name of the element.
1054<FONT CLASS="LN">37</FONT><A NAME="1037"></A> * @param context The current context.
1055<FONT CLASS="LN">38</FONT><A NAME="1038"></A> */</FONT>
1056<FONT CLASS="LN">39</FONT><A NAME="1039"></A> <FONT CLASS="Public">public</FONT> <FONT CLASS="Void">void</FONT> onEndElement(String uri, String tag, AntXMLContext context) {
1057<FONT CLASS="LN">40</FONT><A NAME="1040"></A> context.popWrapper();
1058<FONT CLASS="LN">41</FONT><A NAME="1041"></A> }
1059<FONT CLASS="LN">42</FONT><A NAME="1042"></A> }
1060<FONT CLASS="LN">43</FONT><A NAME="1043"></A>}
1061<FONT CLASS="LN">44</FONT><A NAME="1044"></A></pre>
1062</BODY>
1063</HTML>
Note: See TracBrowser for help on using the repository browser.